Actions
Bug #19893
closedOpenStruct#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) 11 months 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) 11 months ago
- Status changed from Open to Closed
Updated by msxavi (Emerson Xavier) 11 months ago
Thank you! That's it.
Actions
Like0
Like1Like0Like0