class Shoulda::Matchers::Doublespeak::World

@private

def activate

def activate
  double_collections_by_class.each_value(&:activate)
end

def deactivate

def deactivate
  double_collections_by_class.each_value(&:deactivate)
end

def double_collection_for(klass)

def double_collection_for(klass)
  double_collections_by_class[klass] ||=
    DoubleCollection.new(self, klass)
end

def double_collections_by_class

def double_collections_by_class
  @_double_collections_by_class ||= {}
end

def doubles_activated?

def doubles_activated?
  @doubles_activated
end

def initialize

def initialize
  @doubles_activated = false
end

def original_method_for(klass, method_name)

def original_method_for(klass, method_name)
  if original_methods_by_class.key?(klass)
    original_methods_by_class[klass][method_name]
  end
end

def original_methods_by_class

def original_methods_by_class
  @_original_methods_by_class ||= {}
end

def original_methods_for_class(klass)

def original_methods_for_class(klass)
  original_methods_by_class[klass] ||= {}
end

def store_original_method_for(klass, method_name)

def store_original_method_for(klass, method_name)
  original_methods_for_class(klass)[method_name] ||=
    klass.instance_method(method_name)
end

def with_doubles_activated

def with_doubles_activated
  @doubles_activated = true
  activate
  yield
ensure
  @doubles_activated = false
  deactivate
end