methods/bound_call_inside_rescue.rb
tests/_examples/methods/bound_call_inside_rescue.rb in the metorex repository.
class Ledger
def record(entry, amount = 0) = [entry, amount]
end
class Finder
attr_reader :object
def initialize(object) = @object = object
def handle_for(message)
if Comparable === object
nil
else
::Kernel.instance_method(:method).bind(object).call(message)
end
rescue NameError
nil
end
end
class Caller
def initialize(finder) = @finder = finder
def look_up(name) = @finder.handle_for(name)
end
finder = Finder.new(Ledger.new)
p finder.handle_for(:record).arity
p Caller.new(finder).look_up(:record).arity
p finder.handle_for(:missing)
Output:
-2
-2
nil