From: Marc-Andre Lafortune Date: 2009-10-14T13:46:50+09:00 Subject: [ruby-core:26081] [Bug #2207] lib/delegate: #method doesn't delegate to its object Bug #2207: lib/delegate: #method doesn't delegate to its object http://redmine.ruby-lang.org/issues/show/2207 Author: Marc-Andre Lafortune Status: Open, Priority: Normal Category: lib, Target version: 1.9.2 ruby -v: ruby 1.9.2dev (2009-10-13 trunk 25317) [x86_64-darwin10.0.0] require 'delegate' d = SimpleDelegator.new("hello") d.method(:upcase) # ==> NameError: undefined method `upcase' for class `SimpleDelegator' Note that in Ruby 1.8, this does not create an error. This is fixed by defining respond_to_missing? instead of respond_to? diff --git a/lib/delegate.rb b/lib/delegate.rb index 57c479c..6b9f91a 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -143,12 +143,11 @@ class Delegator end # - # Checks for a method provided by this the delegate object by fowarding the + # Checks for a method provided by this the delegate object by forwarding the # call through \_\_getobj\_\_. # - def respond_to?(m, include_private = false) - return true if super - return self.__getobj__.respond_to?(m, include_private) + def respond_to_missing?(m, include_private = false) + __getobj__.respond_to?(m, include_private) end # Only caveat is that after a change of object of different class, the method can produce a NoMethodError when called. (same as Ruby 1.8) Any objection? ---------------------------------------- http://redmine.ruby-lang.org