Class RR::Injections::MethodMissingInjection
In: lib/rr/injections/method_missing_injection.rb
Parent: Injection

Methods

Included Modules

ClassInstanceMethodDefined

Attributes

subject_class  [R] 

Public Class methods

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 18
18:       def initialize(subject_class)
19:         @subject_class = subject_class
20:         @placeholder_method_defined = false
21:       end

Public Instance methods

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 23
23:       def bind
24:         unless class_instance_method_defined(subject_class, original_method_alias_name)
25:           unless class_instance_method_defined(subject_class, :method_missing)
26:             @placeholder_method_defined = true
27:             subject_class.class_eval do
28:               def method_missing(method_name, *args, &block)
29:                 super
30:               end
31:             end
32:           end
33:           subject_class.__send__(:alias_method, original_method_alias_name, :method_missing)
34:           bind_method
35:         end
36:         self
37:       end

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 11
11:         def exists?(subject)
12:           instances.include?(subject)
13:         end

[Source]

   # File lib/rr/injections/method_missing_injection.rb, line 5
5:         def find_or_create(subject_class)
6:           instances[subject_class] ||= begin
7:             new(subject_class).bind
8:           end
9:         end

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 28
28:               def method_missing(method_name, *args, &block)
29:                 super
30:               end

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 39
39:       def reset
40:         if subject_has_method_defined?(original_method_alias_name)
41:           memoized_original_method_alias_name = original_method_alias_name
42:           placeholder_method_defined = @placeholder_method_defined
43:           subject_class.class_eval do
44:             remove_method :method_missing
45:             unless placeholder_method_defined
46:               alias_method :method_missing, memoized_original_method_alias_name
47:             end
48:             remove_method memoized_original_method_alias_name
49:           end
50:         end
51:       end

Protected Instance methods

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 54
54:       def bind_method
55:         subject_class_object_id = subject_class.object_id
56:         subject_class.class_eval(("def method_missing(method_name, *args, &block)\nMethodDispatches::MethodMissingDispatch.new(self, ObjectSpace._id2ref(\#{subject_class_object_id}), method_name, args, block).call\nend\n"), __FILE__, __LINE__ + 1)
57:       end

[Source]

    # File lib/rr/injections/method_missing_injection.rb, line 64
64:       def original_method_alias_name
65:         MethodDispatches::MethodMissingDispatch.original_method_missing_alias_name
66:       end

[Validate]