Actions
Bug #19893
closedOpenStruct#respond_to? when true fails with NameError
    Bug #19893:
    OpenStruct#respond_to? when true fails with NameError
  
Description
Hello,
I have a case where I overrode respond_to? on a subclass of OpenStruct because I this class to work as fake object.
class Dep
  def a
    "Hello from Dep"
  end
end
class FakeDep < OpenStruct
  def respond_to?(*args)
    super || Dep.new.respond_to?(*args)
  end  
end
FakeDep.new(a: [])
NameError: undefined method `a' for class `FakeDep'
      owner = method!(name).owner
              ^^^^^^^
from /usr/local/lib/ruby/3.1.0/ostruct.rb:245:in `method'
Is this a valid issue?
Also posted in https://github.com/ruby/ostruct/issues/55
        
           Updated by znz (Kazuhiro NISHIYAMA) about 2 years ago
          Updated by znz (Kazuhiro NISHIYAMA) about 2 years ago
          
          
        
        
      
      I think you should define respond_to_missing? too.
require 'ostruct'
class Dep
  def a
    "Hello from Dep"
  end
end
class FakeDep < OpenStruct
  def respond_to?(*args)
    super || Dep.new.respond_to?(*args)
  end
  def respond_to_missing?(*args)
    super || Dep.new.respond_to?(*args)
  end
end
FakeDep.new(a: []) # no error
        
           Updated by jeremyevans0 (Jeremy Evans) about 2 years ago
          Updated by jeremyevans0 (Jeremy Evans) about 2 years ago
          
          
        
        
      
      - Status changed from Open to Closed
        
           Updated by msxavi (Emerson Xavier) about 2 years ago
          Updated by msxavi (Emerson Xavier) about 2 years ago
          
          
        
        
      
      Thank you! That's it.
Actions