From mboxrd@z Thu Jan 1 00:00:00 1970 From: rgh@roughage.com.au (Richard Heycock) Date: Thu, 19 Jun 2008 08:21:06 +1000 Subject: [sup-talk] [PATCH] respond_to? needs include_private argument In-Reply-To: <1213819628-sup-7961@jobim> References: <1213819628-sup-7961@jobim> Message-ID: <1213827628-sup-9329@wrasse> Are you using ruby 1.8.7? I found this. rgh Excerpts from Decklin Foster's message of Thu Jun 19 06:25:56 +1000 2008: > 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. > Weep for our poor one-liner methods; they just weren't cut out for this > harsh world... > > Also: Hi everyone. I am the future Debian maintainer of sup. > > --- > lib/sup/util.rb | 8 ++++++-- > 1 files changed, 6 insertions(+), 2 deletions(-) > > 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 -- +61 (0) 410 646 369 [e]: rgh at neoss.com.au [im]: rgh at jabber.org You're worried criminals will continue to penetrate into cyberspace, and I'm worried complexity, poor design and mismanagement will be there to meet them - Marcus Ranum