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) almost 12 years ago
          Updated by hsbt (Hiroshi SHIBATA) almost 12 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) almost 12 years ago
          Updated by rhs (Russell Smith) almost 12 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) almost 12 years ago
          Updated by rhs (Russell Smith) almost 12 years ago
          
          
        
        
      
      See - https://github.com/ruby/ruby/pull/459 for a fix
        
           Updated by smathieu (Simon Mathieu) almost 12 years ago
          Updated by smathieu (Simon Mathieu) almost 12 years ago
          
          
        
        
      
      Submitted a pull request for this:
        
           Updated by nobu (Nobuyoshi Nakada) almost 12 years ago
          Updated by nobu (Nobuyoshi Nakada) almost 12 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) almost 12 years ago
          Updated by rhs (Russell Smith) almost 12 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) almost 12 years ago
          Updated by nobu (Nobuyoshi Nakada) almost 12 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.