module RR::Injections
Public Instance Methods
dispatch_method(subject, subject_class, method_name, arguments, block)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 34 def dispatch_method(subject, subject_class, method_name, arguments, block) subject_eigenclass = (class << subject; self; end) if ( exists?(subject_class, method_name) && (subject_class == subject_eigenclass) || !subject.is_a?(Class) ) find(subject_class, method_name.to_sym).dispatch_method(subject, arguments, block) else new(subject_class, method_name.to_sym).dispatch_original_method(subject, arguments, block) end end
exists?(subject_class, method_name)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 26 def exists?(subject_class, method_name) !!find(subject_class, method_name) end
exists_by_subject?(subject, method_name)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 30 def exists_by_subject?(subject, method_name) exists?((class << subject; self; end), method_name) end
find(subject_class, method_name)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 18 def find(subject_class, method_name) instances[subject_class] && instances[subject_class][method_name.to_sym] end
find_by_subject(subject, method_name)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 22 def find_by_subject(subject, method_name) find(class << subject; self; end, method_name) end
find_or_create_by_subject(subject, method_name)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 14 def find_or_create_by_subject(subject, method_name) find_or_create(class << subject; self; end, method_name) end
instances()
click to toggle source
# File lib/rr/injections/double_injection.rb, line 83 def instances @instances ||= HashWithObjectIdKey.new do |hash, subject_class| hash.set_with_object_id(subject_class, {}) end end
reset()
click to toggle source
# File lib/rr/injections/double_injection.rb, line 46 def reset instances.each do |subject_class, method_double_map| SingletonMethodAddedInjection.find(subject_class) && SingletonMethodAddedInjection.find(subject_class).reset method_double_map.keys.each do |method_name| reset_double(subject_class, method_name) end Injections::DoubleInjection.instances.delete(subject_class) if Injections::DoubleInjection.instances.has_key?(subject_class) end end
reset_double(subject_class, method_name)
click to toggle source
Resets the DoubleInjection for the passed in subject and method_name.
# File lib/rr/injections/double_injection.rb, line 77 def reset_double(subject_class, method_name) double_injection = Injections::DoubleInjection.instances[subject_class].delete(method_name) double_injection.reset Injections::DoubleInjection.instances.delete(subject_class) if Injections::DoubleInjection.instances[subject_class].empty? end
verify(*subjects)
click to toggle source
# File lib/rr/injections/double_injection.rb, line 56 def verify(*subjects) subject_classes = subjects.empty? ? Injections::DoubleInjection.instances.keys : subjects.map {|subject| class << subject; self; end} subject_classes.each do |subject_class| instances.include?(subject_class) && instances[subject_class].keys.each do |method_name| verify_double(subject_class, method_name) end && instances.delete(subject_class) end end
verify_double(subject_class, method_name)
click to toggle source
Verifies the DoubleInjection for the passed in subject and method_name.
# File lib/rr/injections/double_injection.rb, line 70 def verify_double(subject_class, method_name) Injections::DoubleInjection.find(subject_class, method_name).verify ensure reset_double subject_class, method_name end