Sha256: 33a875f3b823ae2a46f1ba7aaae5a33c356a6a5be5c4a70770c50805001c59d1

Contents?: true

Size: 1.45 KB

Versions: 5

Compression:

Stored size: 1.45 KB

Contents

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_value(&:activate)
        end

        def deactivate
          double_collections_by_class.each_value(&:deactivate)
        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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
shoulda-matchers-6.4.0 lib/shoulda/matchers/doublespeak/world.rb
shoulda-matchers-6.3.1 lib/shoulda/matchers/doublespeak/world.rb
shoulda-matchers-6.3.0 lib/shoulda/matchers/doublespeak/world.rb
shoulda-matchers-6.2.0 lib/shoulda/matchers/doublespeak/world.rb
shoulda-matchers-6.1.0 lib/shoulda/matchers/doublespeak/world.rb