oop/public_instance_method.rb

tests/_examples/oop/public_instance_method.rb in the metorex repository.

module Base
  def open_method
  end

  protected

  def guarded
  end

  private

  def hidden
  end
end

module Layer
  include Base

  def layer_method
  end
end

from_base = Layer.public_instance_method(:open_method)
puts from_base.owner.inspect
puts (from_base.owner == Base).inspect

from_layer = Layer.public_instance_method(:layer_method)
puts (from_layer.owner == Layer).inspect
puts (Base.public_instance_method("open_method") == Base.public_instance_method(:open_method)).inspect

[:guarded, :hidden, :missing].each do |name|
  begin
    Base.public_instance_method(name)
  rescue NameError => error
    puts "#{name}: #{error.name.inspect}"
  end
end

begin
  Module.new.public_instance_method(nil)
rescue TypeError => error
  puts error.message
end

puts Module.new.method(:public_instance_method).arity.inspect

Output:

Base
true
true
true
guarded: :guarded
hidden: :hidden
missing: :missing
nil is not a symbol nor a string
1