Sha256: 30a20094b4c09739721c41e8b10cf760e5c2b8489b9f424f24b6f499a2fde87a

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

module Mongoid
  module Matchers
    class HaveIndexForMatcher # :nodoc:
      def initialize(index_fields)
        @index_fields = index_fields.symbolize_keys!
      end

      def with_options(options = { })
        @options = options
        self
      end

      def matches?(klass)
        @klass  = klass.is_a?(Class) ? klass : klass.class
        @errors = []

        unless @klass.index_options[@index_fields]
          @errors.push "no index for #{@index_fields}"
        else
          if !@options.nil? && !@options.empty?
            @options.each do |option, option_value|
              if @klass.index_options[@index_fields][option] != option_value
                @errors.push "index for #{@index_fields.inspect} with options of #{@klass.index_options[@index_fields].inspect}"
              end
            end
          end
        end

        @errors.empty?
      end

      def failure_message_for_should
        "Expected #{@klass.inspect} to #{description}, got #{@errors.to_sentence}"
      end

      def failure_message_for_should_not
        "Expected #{@klass.inspect} to not #{description}, got #{@klass.inspect} to #{description}"
      end

      def description
        desc = "have an index for #{@index_fields.inspect}"
        desc << " with options of #{@options.inspect}" if @options
        desc
      end
    end

    def have_index_for(index_fields)
      HaveIndexForMatcher.new(index_fields)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mongoid-rspec-1.10.0 lib/matchers/indexes.rb
mongoid-rspec-1.9.0 lib/matchers/indexes.rb