Sha256: eb025760db109956734f5012574f0ad08264b7fd4c0eab25cd686f79c0bfe8ae

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module RiotMongoid
  class HasValidationAssertion < Riot::AssertionMacro
    register :has_validation

    def evaluate(model, type, field, options = {})
      fail_msg = "expected #{model.class.to_s} to have validation '#{type} :#{field}'"
      pass_msg = "#{model.class.to_s} has validation '#{type} :#{field}'"
      opt_msg  = " with options #{options.inspect}"

      type = type.to_s.match(/validates_(.*)_of/)[1] rescue type.to_s

      validation = model._validators[field].detect { |v| v.class.name =~ /#{type.camelize}/ }

      return fail(fail_msg) if validation.nil?

      # special case to check for validates_length_of :within option
      if validation.class.name =~ %r{Length} and options[:within]
        range = options[:within].to_a
        if (validation.options[:minimum] == range.first) and (validation.options[:maximum] == range.last)
          return pass(pass_msg + opt_msg)
        else
          return fail(fail_msg + opt_msg)
        end
      end

      unless options.empty?
        return fail(fail_msg + opt_msg) unless options.all? { |k,v| validation.options[k] == v }
        return pass(pass_msg + opt_msg)
      end

      pass pass_msg
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
riot-mongoid-2.1.0 lib/riot-mongoid/has_validation.rb