Class | RR::Injections::MethodMissingInjection |
In: |
lib/rr/injections/method_missing_injection.rb
|
Parent: | Injection |
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 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