introspection/respond_to_missing_no_parens.rb

tests/_examples/introspection/respond_to_missing_no_parens.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