| Class | RR::MethodDispatches::MethodDispatch |
| In: |
lib/rr/method_dispatches/method_dispatch.rb
|
| Parent: | BaseMethodDispatch |
| double_injection | [R] | |
| subject | [R] |
# File lib/rr/method_dispatches/method_dispatch.rb, line 5 5: def initialize(double_injection, subject, args, block) 6: @double_injection, @subject, @args, @block = double_injection, subject, args, block 7: @double = find_double_to_attempt 8: end
# File lib/rr/method_dispatches/method_dispatch.rb, line 10
10: def call
11: space.record_call(subject, method_name, args, block)
12: if double
13: double.method_call(args)
14: call_yields
15: return_value_1 = call_implementation
16: return_value_2 = extract_subject_from_return_value(return_value_1)
17: if after_call_proc
18: extract_subject_from_return_value(after_call_proc.call(return_value_2))
19: else
20: return_value_2
21: end
22: else
23: double_not_found_error
24: end
25: end
# File lib/rr/method_dispatches/method_dispatch.rb, line 27
27: def call_original_method
28: if subject_has_original_method?
29: subject.__send__(original_method_alias_name, *args, &block)
30: elsif subject_has_original_method_missing?
31: call_original_method_missing
32: else
33: subject.__send__(:method_missing, method_name, *args, &block)
34: end
35: end
# File lib/rr/method_dispatches/method_dispatch.rb, line 38
38: def call_implementation
39: if implementation_is_original_method?
40: call_original_method
41: else
42: if implementation
43: if implementation.is_a?(Method)
44: implementation.call(*args, &block)
45: else
46: call_args = block ? args + [ProcFromBlock.new(&block)] : args
47: implementation.call(*call_args)
48: end
49: else
50: nil
51: end
52: end
53: end