Class RR::MethodDispatches::MethodMissingDispatch
In: lib/rr/method_dispatches/method_missing_dispatch.rb
Parent: BaseMethodDispatch

Methods

Attributes

method_name  [R] 
subject  [R] 
subject_class  [R] 

Public Class methods

[Source]

    # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 11
11:       def initialize(subject, subject_class, method_name, args, block)
12:         @subject, @subject_class, @method_name, @args, @block = subject, subject_class, method_name, args, block
13:       end

Public Instance methods

[Source]

    # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 15
15:       def call
16:         if Injections::DoubleInjection.exists?(subject_class, method_name)
17:           @double = find_double_to_attempt
18:           if double
19:             return_value = extract_subject_from_return_value(call_implementation)
20:             if after_call_proc
21:               extract_subject_from_return_value(after_call_proc.call(return_value))
22:             else
23:               return_value
24:             end
25:           else
26:             double_not_found_error
27:           end
28:         else
29:           call_original_method
30:         end
31:       end

[Source]

    # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 33
33:       def call_original_method
34:         Injections::DoubleInjection.find_or_create(subject_class, method_name).dispatch_method_delegates_to_dispatch_original_method do
35:           call_original_method_missing
36:         end
37:       end

[Source]

   # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 5
5:         def original_method_missing_alias_name
6:           "__rr__original_method_missing"
7:         end

Protected Instance methods

[Source]

    # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 40
40:       def call_implementation
41:         if implementation_is_original_method?
42:           space.record_call(subject, method_name, args, block)
43:           double.method_call(args)
44:           call_original_method
45:         else
46:           if double_injection = Injections::DoubleInjection.find(subject_class, method_name)
47:             double_injection.bind_method
48:             # The DoubleInjection takes care of calling double.method_call
49:             subject.__send__(method_name, *args, &block)
50:           else
51:             nil
52:           end
53:         end
54:       end

[Source]

    # File lib/rr/method_dispatches/method_missing_dispatch.rb, line 56
56:       def double_injection
57:         Injections::DoubleInjection.find_or_create(subject_class, method_name)
58:       end

[Validate]