Bug #2207
lib/delegate: #method doesn't delegate to its object
| 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
add ML ref [ruby-core:26081]
History
Updated by marcandre (Marc-Andre Lafortune) over 2 years ago
- Status changed from Open to Closed