Sha256: 74ee5fa93f5f27e2b403239b83bff512843fb4ada27fa2d7c9b83202283f9721

Contents?: true

Size: 1.7 KB

Versions: 5

Compression:

Stored size: 1.7 KB

Contents

# From http://gist.github.com/62943
# Author http://github.com/trotter
module Spec
  module Mocks
    module ArgumentMatchers

      class ArrayIncludingMatcher
        # We'll allow an array of arguments to be passed in, so that you can do
        # things like obj.should_receive(:blah).with(array_including('a', 'b'))
        def initialize(*expected)
          @expected = expected
        end

        # actual is the array (hopefully) passed to the method by the user.
        # We'll check that it includes all the expected values, and return false
        # if it doesn't or if we blow up because #include? is not defined.
        def ==(actual)
          @expected.each do |expected|
            return false unless actual.include?(expected)
          end
          true
        rescue NoMethodError => ex
          return false
        end

        def description
          "array_including(#{@expected.join(', ')})"
        end
      end

      class ArrayNotIncludingMatcher
        def initialize(*expected)
          @expected = expected
        end

        def ==(actual)
          @expected.each do |expected|
            return false if actual.include?(expected)
          end
          true
        rescue NoMethodError => ex
          return false
        end

        def description
          "array_not_including(#{@expected.join(', ')})"
        end
      end

      # array_including is a helpful wrapper that allows us to actually type
      # #with(array_including(...)) instead of ArrayIncludingMatcher.new(...)
      def array_including(*args)
        ArrayIncludingMatcher.new(*args)
      end

      def array_not_including(*args)
        ArrayNotIncludingMatcher.new(*args)
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
mongo_doc-0.6.1 spec/array_including_argument_matcher.rb
mongo_doc-0.6.0 spec/array_including_argument_matcher.rb
mongo_doc_rails2-0.6.1 spec/array_including_argument_matcher.rb
mongo_doc-0.5.5 spec/array_including_argument_matcher.rb
mongo_doc-0.4.2 spec/array_including_argument_matcher.rb