Bug #9155
closedDelegateClass - ArgumentError: not delegated
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 `'
Files
Updated by hsbt (Hiroshi SHIBATA) about 11 years ago
- Assignee set to nobu (Nobuyoshi Nakada)
- Priority changed from Normal to 5
It happened will_paginate too. follow code.
https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/page_number.rb
Updated by rhs (Russell Smith) about 11 years ago
@hsbt (Hiroshi SHIBATA) yep that's where I found the issue - I thought I'd make it easier to replicate with the above code :)
Updated by rhs (Russell Smith) about 11 years ago
See - https://github.com/ruby/ruby/pull/459 for a fix
Updated by smathieu (Simon Mathieu) about 11 years ago
Submitted a pull request for this:
Updated by nobu (Nobuyoshi Nakada) about 11 years 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. [ruby-core:58572] [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.
Updated by rhs (Russell Smith) about 11 years 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
Updated by nobu (Nobuyoshi Nakada) about 11 years 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.