Bug #9155

DelegateClass - ArgumentError: not delegated

Added by Russell Smith over 1 year ago. Updated over 1 year ago.

[ruby-core:58572]
Status:Closed
Priority:High
Assignee:Nobuyoshi Nakada
ruby -v:ruby 2.1.0dev (2013-11-23 trunk 43807) [x86_64-darwin13.0] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

Running the attached code gives ArgumentError: not delegated. It's unexpected as it worked on preview 1 and in 2.0.0. Error pasted below. https://gist.github.com/ukd1/9293c419a080d034f4bb - has sample code plus runs on 2.0.0p247 + 2.1.0-preview1 and 2.1.0-preview2

ArgumentError: not delegated
from /Users/russ/.rvm/rubies/ruby-2.1.0-preview2/lib/ruby/2.1.0/delegate.rb:384:in __getobj__'
from /Users/russ/.rvm/rubies/ruby-2.1.0-preview2/lib/ruby/2.1.0/delegate.rb:77:in
method_missing'
from (irb):5:in initialize'
from (irb):11:in
new'
from (irb):11
from /Users/russ/.rvm/rubies/ruby-2.1.0-preview2/bin/irb:11:in `'

sample.rb Magnifier - sample file that's also in the gist in the issue (171 Bytes) Russell Smith, 11/26/2013 05:33 AM

Associated revisions

Revision 43984
Added by Nobuyoshi Nakada over 1 year ago

delegate.rb: ignore unset target

  • lib/delegate.rb (Delegator#method_missing): ignore the target if not set, and delegate to global methods. [Bug #9155]
  • lib/delegate.rb (Delegator#respond_to_missing): ditto.
  • lib/delegate.rb (SimpleDelegator#getobj): yield and return if not delegated but a block is given, like as Hash#fetch.
  • lib/delegate.rb (DelegateClass#getobj): ditto.

Revision 43984
Added by Nobuyoshi Nakada over 1 year ago

delegate.rb: ignore unset target

  • lib/delegate.rb (Delegator#method_missing): ignore the target if not set, and delegate to global methods. [Bug #9155]
  • lib/delegate.rb (Delegator#respond_to_missing): ditto.
  • lib/delegate.rb (SimpleDelegator#getobj): yield and return if not delegated but a block is given, like as Hash#fetch.
  • lib/delegate.rb (DelegateClass#getobj): ditto.

Revision 44630
Added by Nobuyoshi Nakada about 1 year ago

delegate.rb: keep special methods

  • lib/delegate.rb (Delegator): keep source information methods which start and end with '__'. [Bug #9155]

Revision 44630
Added by Nobuyoshi Nakada about 1 year ago

delegate.rb: keep special methods

  • lib/delegate.rb (Delegator): keep source information methods which start and end with '__'. [Bug #9155]

History

#1 Updated by Hiroshi SHIBATA over 1 year ago

  • Assignee set to Nobuyoshi Nakada
  • Priority changed from Normal to High

#2 Updated by Russell Smith over 1 year ago

@hsbt yep that's where I found the issue - I thought I'd make it easier to replicate with the above code :)

#4 Updated by Simon Mathieu over 1 year ago

Submitted a pull request for this:

https://github.com/ruby/ruby/pull/459

#5 Updated by Nobuyoshi Nakada over 1 year ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r43984.
Russell, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


delegate.rb: ignore unset target

  • lib/delegate.rb (Delegator#method_missing): ignore the target if not set, and delegate to global methods. [Bug #9155]
  • lib/delegate.rb (Delegator#respond_to_missing): ditto.
  • lib/delegate.rb (SimpleDelegator#getobj): yield and return if not delegated but a block is given, like as Hash#fetch.
  • lib/delegate.rb (DelegateClass#getobj): ditto.

#6 Updated by Russell Smith over 1 year ago

No problem, thanks for the fix.

Just a quick question - Simon fixed this on github; is this not the correct place to do a pull request / fix for a bug? If you can let us know, next time we'll do it through the correct channel.

Russ

#7 Updated by Nobuyoshi Nakada over 1 year ago

I prefer here but a pull request on github is also a correct place.

The reason I didn't merge it is:
* I didn't want to add another instance variable, and
* more importantly, a subclass of Delegator/DelegateClass may not call
super in its setobj method, and then the flag will be left unset.

Also available in: Atom PDF