module Ardm::Ar::Validations::ClassMethods

Public Instance Methods

validates_belongs_to(*fields) click to toggle source
# File lib/ardm/ar/validations.rb, line 40
def validates_belongs_to(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields)
  validates *fields, presence: options
end
validates_length_of(*fields) click to toggle source
# File lib/ardm/ar/validations.rb, line 62
def validates_length_of(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields, :in, :within, :maximum, :minimum, :is)
  validates *fields, length: options
end
validates_presence_of(*fields) click to toggle source
# File lib/ardm/ar/validations.rb, line 45
def validates_presence_of(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields)

  boolean_fields, non_boolean_fields = fields.partition { |f| self.properties[f.to_sym].is_a?(Ardm::Property::Boolean) }

  if non_boolean_fields.any?
    validates(*non_boolean_fields, presence: options)
  end

  if boolean_fields.any?
    if options.any?
      $stderr.puts "validates_presence_of options ignored: #{options.inspect}"
    end
    validates(*boolean_fields, inclusion: {in: [true, false]})
  end
end
validates_uniqueness_of(*fields) click to toggle source
# File lib/ardm/ar/validations.rb, line 67
def validates_uniqueness_of(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields, :scope)
  fields = fields.map do |field|
    if property = properties[field]
      property.field
    elsif assoc = reflect_on_association(field)
      assoc.foreign_key
    else
      field
    end
  end

  if options[:scope]
    options[:scope] = Array(options[:scope]).map do |scope|
      assoc = reflect_on_association(scope)
      assoc ? assoc.foreign_key : scope
    end
  end

  validates *fields, uniqueness: options
end
validates_with_block(*args, &block) click to toggle source
# File lib/ardm/ar/validations.rb, line 116
def validates_with_block(*args, &block)
  options   = args.extract_options!
  attribute = args.shift

  validate(options) do |_|
    is_valid, message = instance_eval(&block)

    unless is_valid
      attribute ||= :base

      if attribute.to_sym == :base
        raise "message is blank #{args.inspect} #{self.inspect} #{block.inspect}" if message.blank?
      end

      errors.add(attribute, message)
    end
  end
end
validates_with_method(*fields) click to toggle source

Possible formats:

validates_with_method :attr, :method_name validates_with_method :attr, method: :method_name validates_with_method :method_name, options: “here”

# File lib/ardm/ar/validations.rb, line 99
def validates_with_method(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields, :method)

  # validates_with_method :attr, :method_name
  att, meth = *fields

  # validates_with_method :attr, method: :method_name
  meth = options[:method] if options[:method]

  # validates_with_method :method_name
  att, meth = :base, att if !meth

  validates_with_block(att) do
    self.send(meth)
  end
end
validates_within(*fields) click to toggle source
# File lib/ardm/ar/validations.rb, line 89
def validates_within(*fields)
  fields, options = Ardm::Ar::Validations.extract_options(fields, :in)
  validates *fields, inclusion: options
end