Class: RR::MethodDispatches::MethodMissingDispatch

Inherits:
BaseMethodDispatch show all
Defined in:
lib/rr/method_dispatches/method_missing_dispatch.rb

Instance Attribute Summary (collapse)

Attributes inherited from BaseMethodDispatch

#args, #block, #double

Instance Method Summary (collapse)

Methods included from Space::Reader

#space

Constructor Details

- (MethodMissingDispatch) initialize(subject, subject_class, method_name, args, block)

Returns a new instance of MethodMissingDispatch



11
12
13
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 11

def initialize(subject, subject_class, method_name, args, block)
  @subject, @subject_class, @method_name, @args, @block = subject, subject_class, method_name, args, block
end

Instance Attribute Details

- (Object) method_name (readonly)

Returns the value of attribute method_name



10
11
12
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 10

def method_name
  @method_name
end

- (Object) subject (readonly)

Returns the value of attribute subject



10
11
12
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 10

def subject
  @subject
end

- (Object) subject_class (readonly)

Returns the value of attribute subject_class



10
11
12
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 10

def subject_class
  @subject_class
end

Instance Method Details

- (Object) call



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 15

def call
  if Injections::DoubleInjection.exists?(subject_class, method_name)
    @double = find_double_to_attempt
    if double
      return_value = extract_subject_from_return_value(call_implementation)
      if after_call_proc
        extract_subject_from_return_value(after_call_proc.call(return_value))
      else
        return_value
      end
    else
      double_not_found_error
    end
  else
    call_original_method
  end
end

- (Object) call_original_method



33
34
35
36
37
# File 'lib/rr/method_dispatches/method_missing_dispatch.rb', line 33

def call_original_method
  Injections::DoubleInjection.find_or_create(subject_class, method_name).dispatch_method_delegates_to_dispatch_original_method do
    call_original_method_missing
  end
end