Project

General

Profile

Actions

Bug #19893

closed

OpenStruct#respond_to? when true fails with NameError

Added by msxavi (Emerson Xavier) 8 months ago. Updated 8 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:114822]

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) 8 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
Actions #2

Updated by jeremyevans0 (Jeremy Evans) 8 months ago

  • Status changed from Open to Closed

Updated by msxavi (Emerson Xavier) 8 months ago

Thank you! That's it.

Actions

Also available in: Atom PDF

Like0
Like1Like0Like0