Bug #2207

lib/delegate: #method doesn't delegate to its object

Added by marcandre (Marc-Andre Lafortune) over 2 years ago. Updated about 1 year ago.

[ruby-core:26081]
Status:Closed Start date:10/14/2009
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:lib
Target version:1.9.2
ruby -v:ruby 1.9.2dev (2009-10-13 trunk 25317) [x86_64-darwin10.0.0]

Description

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?

Associated revisions

Revision 25373
Added by matz (Yukihiro Matsumoto) over 2 years ago

add ML ref [ruby-core:26081]

History

Updated by marcandre (Marc-Andre Lafortune) over 2 years ago

  • Status changed from Open to Closed

Also available in: Atom PDF