Class: Facon::Proxy

Inherits:
Object show all
Extended by:
Forwardable
Defined in:
lib/facon/proxy.rb

Overview

A proxy for mock objects. Stubs and expectations are set on this proxy.

Instance Method Summary collapse

Constructor Details

#initialize(target, name) ⇒ Proxy

Returns a new instance of Proxy.



9
10
11
12
13
14
15
16
# File 'lib/facon/proxy.rb', line 9

def initialize(target, name)
  @target, @name = target, name
  @expectations = []
  @stubs = []
  @proxied_methods = []
  @error_generator = ErrorGenerator.new(target, name)
  @expectation_ordering = nil unless defined?(@expectation_ordering)
end

Instance Method Details

#add_expectation(expected_from, method, &block) ⇒ Object



26
27
28
29
30
31
# File 'lib/facon/proxy.rb', line 26

def add_expectation(expected_from, method, &block)
  add_method(method)

  @expectations << Expectation.new(@error_generator, @expectation_ordering, expected_from, method, (block_given? ? block : nil), 1)
  @expectations.last
end

#add_negative_expectation(expected_from, method, &block) ⇒ Object



33
34
35
36
37
38
# File 'lib/facon/proxy.rb', line 33

def add_negative_expectation(expected_from, method, &block)
  add_method(method)

  @expectations << NegativeExpectation.new(@error_generator, @expectation_ordering, expected_from, method, (block_given? ? block : nil))
  @expectations.last
end

#add_stub(expected_from, method) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/facon/proxy.rb', line 18

def add_stub(expected_from, method)
  add_method(method)

  # A stub is really an expectation that can be called any number of times.
  @stubs.unshift(Expectation.new(@error_generator, @expectation_ordering, expected_from, method, nil, :any))
  @stubs.first
end

#message_received(method, *args, &block) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/facon/proxy.rb', line 40

def message_received(method, *args, &block)
  if expectation = find_matching_expectation(method, *args)
    expectation.invoke(args, block)
  elsif stub = find_matching_method_stub(method, *args)
    stub.invoke([], block)
  elsif expectation = find_almost_matching_expectation(method, *args)
    raise_unexpected_message_args_error(expectation, *args) unless has_negative_expectation?(method)
  else
    @target.send(:method_missing, method, *args, &block)
  end
end

#resetObject



58
59
60
61
62
63
# File 'lib/facon/proxy.rb', line 58

def reset
  @expectations.clear
  @stubs.clear
  reset_proxied_methods
  @proxied_methods.clear
end

#verifyObject



52
53
54
55
56
# File 'lib/facon/proxy.rb', line 52

def verify
  @expectations.each { |expectation| expectation.met? }
ensure
  reset
end