thoughtbot--shoulda-matchers/lib/shoulda/matchers/doublespeak/world.rb

68 lines
1.6 KiB
Ruby

module Shoulda
module Matchers
module Doublespeak
# @private
class World
def initialize
@doubles_activated = false
end
def double_collection_for(klass)
double_collections_by_class[klass] ||=
DoubleCollection.new(self, klass)
end
def store_original_method_for(klass, method_name)
original_methods_for_class(klass)[method_name] ||=
klass.instance_method(method_name)
end
def original_method_for(klass, method_name)
if original_methods_by_class.key?(klass)
original_methods_by_class[klass][method_name]
end
end
def with_doubles_activated
@doubles_activated = true
activate
yield
ensure
@doubles_activated = false
deactivate
end
def doubles_activated?
@doubles_activated
end
private
def activate
double_collections_by_class.each do |klass, double_collection|
double_collection.activate
end
end
def deactivate
double_collections_by_class.each do |klass, double_collection|
double_collection.deactivate
end
end
def double_collections_by_class
@_double_collections_by_class ||= {}
end
def original_methods_by_class
@_original_methods_by_class ||= {}
end
def original_methods_for_class(klass)
original_methods_by_class[klass] ||= {}
end
end
end
end
end