Project

General

Profile

Actions

Bug #2207

closed

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

Added by marcandre (Marc-Andre Lafortune) about 15 years ago. Updated over 13 years ago.

Status:
Closed
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 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?
=end

Actions #1

Updated by marcandre (Marc-Andre Lafortune) about 15 years ago

  • Status changed from Open to Closed

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0