1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Bogus::RecordingProxy < BasicObject
extend ::Bogus::Takes
takes :instance, :fake_name, :interactions_repository
def method_missing(name, *args, &block)
returned_value = @instance.__send__(name, *args, &block)
@interactions_repository.record(@fake_name, name, *args) { returned_value }
returned_value
rescue => e
@interactions_repository.record(@fake_name, name, *args) { ::Kernel.raise(e) }
::Kernel.raise
end
# apparently even BasicObject has an equality operator
def ==(other)
method_missing(:==, other)
end
def respond_to?(name)
@instance.respond_to?(name)
end
end
|