diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-05-12 12:57:40 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-05-12 14:44:22 +0200 |
commit | 43fe51c5e5bfc40a6db95f3d4ee93958ed1081a2 (patch) | |
tree | 63131a2a92ccf1d296983a8e37182052d29290cf | |
parent | 90ff1ab6b449c6163b8e4dc32588a2ccc1f046f2 (diff) |
Survive active_support idiocy
Somebody should hang the ActiveSupport developers by their balls
with barbed wire. Their MissingSourceFile extension to LoadError
_expects_ a second argument, breaking the usual Exception interface
(instead, the smart thing to do would have been to make the second
parameter optional and run the code in the from_message method if
it was missing).
-rw-r--r-- | lib/rbot/plugins.rb | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index 81449cce..55733cee 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -585,7 +585,24 @@ module Plugins msg = err.to_s.gsub(/^\(eval\)(:\d+)(:in `.*')?(:.*)?/) { |m| "#{fname}#{$1}#{$3}" } - newerr = err.class.new(msg) + begin + newerr = err.class.new(msg) + rescue ArgumentError => err_in_err + # Somebody should hang the ActiveSupport developers by their balls + # with barbed wire. Their MissingSourceFile extension to LoadError + # _expects_ a second argument, breaking the usual Exception interface + # (instead, the smart thing to do would have been to make the second + # parameter optional and run the code in the from_message method if + # it was missing). + # Anyway, we try to cope with this in the simplest possible way. On + # the upside, this new block can be extended to handle other similar + # idiotic approaches + if err.class.respond_to? :from_message + newerr = err.class.from_message(msg) + else + raise err_in_err + end + end newerr.set_backtrace(bt) return newerr end |