Sha256: e48517f517c3c3d1bd164ff19a6febb778c1108113fb008ccaa6a906b107f3a3

Contents?: true

Size: 1.57 KB

Versions: 3

Compression:

Stored size: 1.57 KB

Contents

module Mongoid
  module Matchers
    module Validations  
      class ValidateInclusionOfMatcher < HaveValidationMatcher
        def initialize(name)
          super(name, :inclusion)
        end
        
        def to_allow(*values)
          @allowed_values = values.map(&:to_a).flatten
          self
        end
        
        def matches?(actual)
          return false unless result = super(actual)

          if @allowed_values
            raw_validator_allowed_values = @validator.options[:in]

            validator_allowed_values = case raw_validator_allowed_values 
            when Range then raw_validator_allowed_values.to_a
            when Proc then raw_validator_allowed_values.call(actual)
            else raw_validator_allowed_values end

            not_allowed_values = @allowed_values - validator_allowed_values
            if not_allowed_values.empty?
              @positive_result_message = @positive_result_message << " allowing all values mentioned"
            else
              @negative_result_message = @negative_result_message << " not allowing the following the ff. values: #{not_allowed_values.inspect}"
              result = false
            end
          end
          
          result          
        end
        
        def description
          options_desc = []
          options_desc << " allowing the ff. values: #{@allowed_values}" if @allowed_values                
          super << options_desc.to_sentence
        end 
      end

      def validate_inclusion_of(field)
        ValidateInclusionOfMatcher.new(field)
      end       
    end
  end
end  

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongoid-rspec-1.5.5 lib/matchers/validations/inclusion_of.rb
mongoid-rspec-1.5.4 lib/matchers/validations/inclusion_of.rb
mongoid-rspec-1.5.3 lib/matchers/validations/inclusion_of.rb