Project

General

Profile

Bug #2207

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

Added by marcandre (Marc-Andre Lafortune) about 10 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2dev (2009-10-13 trunk 25317) [x86_64-darwin10.0.0]
Backport:
[ruby-core:26081]

Description

=begin
require 'delegate'
d = SimpleDelegator.new("hello")
d.method(:upcase) # ==> NameError: undefined method upcase' for classSimpleDelegator'

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?
=end

History

#1

Updated by marcandre (Marc-Andre Lafortune) almost 10 years ago

  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF