Sha256: dad66cb12052d2ea6b69aa5d23be8201735cbd73ece09d9a72c99b017a14ff43

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

module Mongoid
  module Matchers
    module Validations  
      
      class HaveValidationMatcher
      
        def initialize(field, validation_type)
          @field = field.to_s
          @type = validation_type.to_s
          @options = {}
        end
                
        def matches?(actual)
          @klass = actual.is_a?(Class) ? actual : actual.class
          
          @validator = @klass.validators_on(@field).detect{|v| v.kind.to_s == @type}
          
          if @validator
            @negative_result_message = "#{@type.inspect} validator on #{@field.inspect}"
            @positive_result_message = "#{@type.inspect} validator on #{@field.inspect}"
          else
            @negative_result_message = "no #{@type.inspect} validator on #{@field.inspect}"
            return false
          end
          @result = true
          check_on if @options[:on]          
          @result
        end
        
        def failure_message_for_should  
          "Expected #{@klass.inspect} to #{description}; instead got #{@negative_result_message}"  
        end
      
        def failure_message_for_should_not  
          "Expected #{@klass.inspect} to not #{description}; instead got #{@positive_result_message}"  
        end
        
        def description
          "validate #{@type} of #{@field.inspect}"
        end
        
        def on(*on_method)
          @options[:on] = on_method.flatten
          self
        end  
        
        def check_on
          message = " on methods: #{@validator.options[:on]}"
          if [@validator.options[:on]].flatten == @options[:on]
            @positive_result_message << message
          else
            @negative_result_message << message
            @result = false
          end
        end
      end     
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongoid-rspec-1.5.0 lib/matchers/validations.rb
mongoid-rspec-1.4.6 lib/matchers/validations.rb
mongoid-rspec-1.4.5 lib/matchers/validations.rb