module Magic
class Mock
def self.method instance, method_name, &new_method
mock_alias = Class.new
(instance.methods).each do |method|
mock_alias.send(:define_method, method) do |*args|
instance.send(method, *args)
end
end
mock = Class.new(mock_alias) do
define_method(method_name, &new_method)
end
mock.new
end
end
end
# usage
hello = "hello"
mock = Magic::Mock.method(hello , :to_s) do
super + " from mock"
end
puts mock.to_s # hello from mock
puts hello.to_s # hello