Module: AssertSend

Defined in:
lib/assert_send.rb

Constant Summary collapse

ExpectationError =
Class.new(StandardError)

Instance Method Summary collapse

Instance Method Details

#assert_send(object, message, &block) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/assert_send.rb', line 4

def assert_send(object, message, &block)
  metaclass = object.singleton_class
  original = object.method(message)
  executed = nil

  metaclass.send(:define_method, message) do |*args|
    executed = true
    original.(*args)
  end

  res = yield

  executed ? res : (raise ExpectationError, "Expected #{object} to receive message :#{message}")
ensure
  metaclass.send(:undef_method, message)
  metaclass.send(:define_method, message, original)
end