From 43fe51c5e5bfc40a6db95f3d4ee93958ed1081a2 Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Wed, 12 May 2010 12:57:40 +0200 Subject: 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). --- lib/rbot/plugins.rb | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3