summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2010-05-12 12:57:40 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2010-05-12 14:44:22 +0200
commit43fe51c5e5bfc40a6db95f3d4ee93958ed1081a2 (patch)
tree63131a2a92ccf1d296983a8e37182052d29290cf
parent90ff1ab6b449c6163b8e4dc32588a2ccc1f046f2 (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.rb19
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