introspection/respond_to_missing.rb
tests/_examples/introspection/respond_to_missing.rb in the metorex repository.
class Ghost
def respond_to_missing?(name, include_private = false)
return true if name == :publicly_handled
include_private && name == :privately_handled
end
def method_missing(name, *args)
"called #{name}"
end
end
ghost = Ghost.new
puts ghost.respond_to?(:publicly_handled)
puts ghost.respond_to?(:privately_handled)
puts ghost.respond_to?(:privately_handled, true)
puts ghost.respond_to?(:not_handled)
class Plain
def visible
end
def hidden
end
private :hidden
end
plain = Plain.new
puts plain.respond_to?(:visible)
puts plain.respond_to?(:hidden)
puts plain.respond_to?(:hidden, true)
puts plain.respond_to?(:respond_to_missing?, true)
puts(plain.send(:respond_to_missing?, :anything, true))
puts Plain.respond_to?(:respond_to_missing?, true)
class Registry
def self.respond_to_missing?(name, include_private = false)
name == :lookup
end
end
puts Registry.respond_to?(:lookup)
puts Registry.respond_to?(:missing_entirely)
puts Kernel.private_instance_methods(false).include?(:respond_to_missing?)
puts Kernel.method(:respond_to_missing?).owner == Kernel
Output:
true
false
true
false
true
false
true
true
false
true
true
false
true
true