From: Decklin Foster Date: Wed, 18 Jun 2008 20:25:56 +0000 (-0400) Subject: respond_to? needs include_private argument X-Git-Url: https://git.notmuchmail.org/git?a=commitdiff_plain;h=7baf2ae82255b4ca77a1e2a4b46831371f92cfce;p=sup respond_to? needs include_private argument Sup started mysteriously bailing out on me today after an apt-get update with stuff like this: --- ArgumentError from thread: main wrong number of arguments (2 for 1) /usr/lib/ruby/1.8/sup/index.rb:424:in `respond_to?' /usr/lib/ruby/1.8/sup/index.rb:424:in `flatten' /usr/lib/ruby/1.8/sup/index.rb:424:in `load_sources' /usr/lib/ruby/1.8/sup/index.rb:108:in `load' /usr/lib/ruby/1.8/sup/util.rb:497:in `send' /usr/lib/ruby/1.8/sup/util.rb:497:in `method_missing' /usr/bin/sup:122 I did some digging and it seems like when Array#flatten, in attempting to figure out if it can flatten some list element recursively, sends it :respond_to? with both arguments -- I didn't even know there was a second one (defaults to false; see docs). But this only happened recently or something. Here's somewhere else this came up: http://www.ruby-forum.com/topic/154938 So, the fix is exactly the same. Should work fine on old Ruby as well. --- diff --git a/lib/sup/util.rb b/lib/sup/util.rb index ceaf0b8..9909022 100644 --- a/lib/sup/util.rb +++ b/lib/sup/util.rb @@ -108,7 +108,9 @@ class Module def defer_all_other_method_calls_to obj class_eval %{ def method_missing meth, *a, &b; @#{obj}.send meth, *a, &b; end - def respond_to? meth; @#{obj}.respond_to?(meth); end + def respond_to?(m, include_private = false) + @#{obj}.respond_to?(m, include_private) + end } end end @@ -527,7 +529,9 @@ class Recoverable def to_yaml x; __pass :to_yaml, x; end def is_a? c; @o.is_a? c; end - def respond_to? m; @o.respond_to? m end + def respond_to?(m, include_private=false) + @o.respond_to?(m, include_private) + end def __pass m, *a, &b begin