Parent

Namespace

Class Index [+]

Quicksearch

Spec::Mocks::Proxy

Constants

DEFAULT_OPTIONS

Public Class Methods

allow_message_expectations_on_nil() click to toggle source
    # File lib/spec/mocks/proxy.rb, line 10
10:       def self.allow_message_expectations_on_nil
11:         @@warn_about_expectations_on_nil = false
12:         
13:         # ensure nil.rspec_verify is called even if an expectation is not set in the example
14:         # otherwise the allowance would effect subsequent examples
15:         $rspec_mocks.add(nil) unless $rspec_mocks.nil?
16:       end
new(target, name=nil, options={}) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 18
18:       def initialize(target, name=nil, options={})
19:         @target = target
20:         @name = name
21:         @error_generator = ErrorGenerator.new target, name, options
22:         @expectation_ordering = OrderGroup.new @error_generator
23:         @expectations = []
24:         @messages_received = []
25:         @stubs = []
26:         @proxied_methods = []
27:         @options = options ? DEFAULT_OPTIONS.dup.merge(options) : DEFAULT_OPTIONS
28:         @already_proxied_respond_to = false
29:       end

Public Instance Methods

add_message_expectation(expected_from, sym, opts={}, &block) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 40
40:       def add_message_expectation(expected_from, sym, opts={}, &block)        
41:         __add sym
42:         warn_if_nil_class sym
43:         @expectations << build_expectation(expected_from, sym, opts, &block)
44:         @expectations.last
45:       end
add_negative_message_expectation(expected_from, sym, &block) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 55
55:       def add_negative_message_expectation(expected_from, sym, &block)
56:         __add sym
57:         warn_if_nil_class sym
58:         @expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
59:         @expectations.last
60:       end
add_stub(expected_from, sym, opts={}, &implementation) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 62
62:       def add_stub(expected_from, sym, opts={}, &implementation)
63:         __add sym
64:         @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts, &implementation)
65:         @stubs.first
66:       end
as_null_object() click to toggle source
    # File lib/spec/mocks/proxy.rb, line 35
35:       def as_null_object
36:         @options[:null_object] = true
37:         @target
38:       end
build_expectation(expected_from, sym, opts, &block) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 47
47:       def build_expectation(expected_from, sym, opts, &block)
48:         if stub = find_matching_method_stub(sym) 
49:           stub.build_child(expected_from, block_given?? block : nil, 1, opts)
50:         else
51:           MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
52:         end
53:       end
find_matching_method_stub(sym, *args) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 149
149:       def find_matching_method_stub(sym, *args)
150:         @stubs.find {|stub| stub.matches(sym, args)}
151:       end
has_negative_expectation?(sym) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 96
96:       def has_negative_expectation?(sym)
97:         @expectations.any? {|expectation| expectation.negative_expectation_for?(sym)}
98:       end
invoke_expectation(expectation, *args, &block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 126
126:       def invoke_expectation(expectation, *args, &block)
127:         expectation.invoke(*args, &block)
128:       end
message_received(sym, *args, &block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 104
104:       def message_received(sym, *args, &block)
105:         expectation = find_matching_expectation(sym, *args)
106:         stub = find_matching_method_stub(sym, *args)
107: 
108:         if ok_to_invoke_stub?(stub, expectation)
109:           record_stub(stub, sym, args, &block)
110:         elsif expectation
111:           invoke_expectation(expectation, *args, &block)
112:         elsif expectation = find_almost_matching_expectation(sym, *args)
113:           record_almost_matching_expectation(expectation, sym, *args, &block)
114:         else
115:           @target.__send__ :method_missing, sym, *args, &block
116:         end
117:       end
null_object?() click to toggle source
    # File lib/spec/mocks/proxy.rb, line 31
31:       def null_object?
32:         @options[:null_object]
33:       end
ok_to_invoke_stub?(stub, expectation) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 137
137:       def ok_to_invoke_stub?(stub, expectation)
138:         stub && (!expectation || expectation.called_max_times?)
139:       end
raise_unexpected_message_args_error(expectation, *args) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 141
141:       def raise_unexpected_message_args_error(expectation, *args)
142:         @error_generator.raise_unexpected_message_args_error expectation, *args
143:       end
raise_unexpected_message_error(sym, *args) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 145
145:       def raise_unexpected_message_error(sym, *args)
146:         @error_generator.raise_unexpected_message_error sym, *args
147:       end
received_message?(sym, *args, &block) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 92
92:       def received_message?(sym, *args, &block)
93:         @messages_received.any? {|array| array == [sym, args, block]}
94:       end
record_almost_matching_expectation(expectation, sym, *args, &block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 130
130:       def record_almost_matching_expectation(expectation, sym, *args, &block)
131:         expectation.advise(args, block)
132:         unless (null_object? or has_negative_expectation?(sym))
133:           raise_unexpected_message_args_error(expectation, *args)
134:         end
135:       end
record_message_received(sym, args, block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 100
100:       def record_message_received(sym, args, block)
101:         @messages_received << [sym, args, block]
102:       end
record_stub(stub, sym, args, &block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 119
119:       def record_stub(stub, sym, args, &block)
120:         almost_matching_expectation(sym, *args) do |e|
121:           e.advise(args, block)
122:         end
123:         stub.invoke(*args, &block)
124:       end
remove_stub(message) click to toggle source
    # File lib/spec/mocks/proxy.rb, line 68
68:       def remove_stub(message)
69:         message = message.to_sym
70:         if stub_to_remove = @stubs.detect { |s| s.matches_name?(message) }
71:           reset_proxied_method(message)
72:           @stubs.delete(stub_to_remove)
73:         else
74:           raise MockExpectationError, "The method `#{message}` was not stubbed or was already unstubbed"
75:         end
76:       end
reset() click to toggle source
    # File lib/spec/mocks/proxy.rb, line 84
84:       def reset
85:         clear_expectations
86:         clear_stubs
87:         reset_proxied_methods
88:         clear_proxied_methods
89:         reset_nil_expectations_warning
90:       end

Private Instance Methods

__add(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 155
155:       def __add(sym)
156:         $rspec_mocks.add(@target) unless $rspec_mocks.nil?
157:         define_expected_method(sym)
158:       end
almost_matching_expectation(sym, *args, &block) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 255
255:       def almost_matching_expectation(sym, *args, &block)
256:         if e = find_almost_matching_expectation(sym, *args)
257:           yield e
258:         end
259:       end
clear_expectations() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 207
207:       def clear_expectations
208:         @expectations.clear
209:       end
clear_proxied_methods() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 215
215:       def clear_proxied_methods
216:         @proxied_methods.clear
217:       end
clear_stubs() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 211
211:       def clear_stubs
212:         @stubs.clear
213:       end
define_expected_method(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 166
166:       def define_expected_method(sym)
167:         unless @proxied_methods.include?(sym)
168:           visibility_string = "#{visibility(sym)} :#{sym}"
169:           if target_responds_to?(sym)
170:             munged_sym = munge(sym)
171:             target_metaclass.instance_eval do
172:               alias_method munged_sym, sym if method_defined?(sym)
173:             end
174:             @proxied_methods << sym
175:           end
176:           target_metaclass.class_eval(            def #{sym}(*args, &block)              __mock_proxy.message_received :#{sym}, *args, &block            end            #{visibility_string}, __FILE__, __LINE__)
177:         end
178:       end
find_almost_matching_expectation(sym, *args) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 261
261:       def find_almost_matching_expectation(sym, *args)
262:         @expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
263:       end
find_matching_expectation(sym, *args) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 250
250:       def find_matching_expectation(sym, *args)
251:         @expectations.find {|expectation| expectation.matches(sym, args) && !expectation.called_max_times?} || 
252:         @expectations.find {|expectation| expectation.matches(sym, args)}
253:       end
munge(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 203
203:       def munge(sym)
204:         "proxied_by_rspec__#{sym}"
205:       end
proxy_for_nil_class?() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 242
242:       def proxy_for_nil_class?
243:         @target.nil?
244:       end
reset_nil_expectations_warning() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 246
246:       def reset_nil_expectations_warning
247:         @@warn_about_expectations_on_nil = true if proxy_for_nil_class?
248:       end
reset_proxied_method(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 231
231:       def reset_proxied_method(sym)
232:         munged_sym = munge(sym)
233:         target_metaclass.instance_eval do
234:           remove_method sym
235:           if method_defined?(munged_sym)
236:             alias_method sym, munged_sym
237:             remove_method munged_sym
238:           end
239:         end
240:       end
reset_proxied_methods() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 227
227:       def reset_proxied_methods
228:         @proxied_methods.map {|sym| reset_proxied_method(sym)}
229:       end
target_metaclass() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 219
219:       def target_metaclass
220:         class << @target; self; end
221:       end
target_responds_to?(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 185
185:       def target_responds_to?(sym)
186:         return @target.__send__(munge(:respond_to?),sym) if @already_proxied_respond_to
187:         return @already_proxied_respond_to = true if sym == :respond_to?
188:         return @target.respond_to?(sym, true)
189:       end
verify_expectations() click to toggle source
     # File lib/spec/mocks/proxy.rb, line 223
223:       def verify_expectations
224:         @expectations.map {|e| e.verify_messages_received}
225:       end
visibility(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 191
191:       def visibility(sym)
192:         if Mock === @target
193:           'public'
194:         elsif target_metaclass.private_method_defined?(sym)
195:           'private'
196:         elsif target_metaclass.protected_method_defined?(sym)
197:           'protected'
198:         else
199:           'public'
200:         end
201:       end
warn_if_nil_class(sym) click to toggle source
     # File lib/spec/mocks/proxy.rb, line 160
160:       def warn_if_nil_class(sym)
161:         if proxy_for_nil_class? & @@warn_about_expectations_on_nil          
162:           Kernel.warn("An expectation of :#{sym} was set on nil. Called from #{caller[2]}. Use allow_message_expectations_on_nil to disable warnings.")
163:         end
164:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.