oop/unbound_method_parens.rb

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

module Greeter
  def greet
    :from_module
  end
end

class Base
  def label
    :from_base
  end
end

class Child < Base
  include Greeter
end

from_module = Child.instance_method(:greet)
from_super = Child.instance_method(:label)

puts(from_module.bind(Child.new).call.inspect)
puts(from_super.bind(Child.new).call.inspect)
puts(Child.new.method(:label).call.inspect)
puts(Module.new.method(:instance_method).arity.inspect)

begin
  Object.instance_method(:missing)
rescue NameError => error
  puts(error.name.inspect)
end

begin
  Object.instance_method(42)
rescue TypeError => error
  puts(error.message)
end

undefined_in_child = Class.new(Base)
undefined_in_child.send(:undef_method, :label)
begin
  undefined_in_child.instance_method(:label)
rescue NameError => error
  puts(error.name.inspect)
end

Output:

:from_module
:from_base
:from_base
1
:missing
42 is not a symbol nor a string
:label