introspection/respond_to.rb
tests/_examples/introspection/respond_to.rb in the metorex repository.
class Vault
def open_door
end
def hidden
end
private :hidden
def guarded
end
protected :guarded
end
vault = Vault.new
puts vault.respond_to?(:open_door)
puts vault.respond_to?(:hidden)
puts vault.respond_to?(:hidden, true)
puts vault.respond_to?(:guarded)
puts vault.respond_to?(:guarded, true)
puts vault.respond_to?(:nothing_here)
puts vault.respond_to?("open_door")
class Sealed
class << self
private :new
end
end
puts Sealed.respond_to?(:new)
puts Sealed.respond_to?(:new, false)
puts Sealed.respond_to?(:new, true)
begin
Sealed.new
rescue NoMethodError => error
puts "#{error.class}: #{error.message}"
end
puts Vault.respond_to?(:new)
puts Vault.respond_to?(:instance_methods)
class Named
def to_str
"open_door"
end
end
puts vault.respond_to?(Named.new)
begin
vault.respond_to?(42)
rescue TypeError => error
puts "#{error.class}: #{error.message}"
end
Output:
true
false
true
false
true
false
true
false
false
true
NoMethodError: private method 'new' called for class Sealed
true
true
true
TypeError: 42 is not a symbol nor a string