| Class | RR::Injections::MethodMissingInjection |
| In: |
lib/rr/injections/method_missing_injection.rb
|
| Parent: | Injection |
| BoundObjects | = | {} |
| subject_class | [R] |
# 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
# 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
# File lib/rr/injections/method_missing_injection.rb, line 11
11: def exists?(subject)
12: instances.include?(subject)
13: end
# 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
# File lib/rr/injections/method_missing_injection.rb, line 28
28: def method_missing(method_name, *args, &block)
29: super
30: end
# 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
# File lib/rr/injections/method_missing_injection.rb, line 56
56: def bind_method
57: id = BoundObjects.size
58: BoundObjects[id] = subject_class
59:
60: subject_class.class_eval(("def method_missing(method_name, *args, &block)\nobj = ::RR::Injections::MethodMissingInjection::BoundObjects[\#{id}]\nMethodDispatches::MethodMissingDispatch.new(self, obj, method_name, args, block).call\nend\n"), __FILE__, __LINE__ + 1)
61: end