123456789_123456789_123456789_123456789_123456789_

Class: ActiveModel::EachValidator

Overview

EachValidator is a validator which iterates through the attributes given in the options hash invoking the #validate_each method passing in the record, attribute, and value.

All Active Model validations are built on top of this validator.

Class Method Summary

Validator - Inherited

.kind

Returns the kind of the validator.

.new

Accepts options that will be made available through the options reader.

Instance Attribute Summary

Validator - Inherited

Instance Method Summary

Validator - Inherited

#kind

Returns the kind for this validator.

#validate

Override this method in subclasses with validation logic, adding errors to the records errors array where necessary.

Constructor Details

.new(options) ⇒ EachValidator

Returns a new validator instance. All options will be available via the options reader, however the :attributes option will be removed and instead be made available through the #attributes reader.

Raises:

  • (ArgumentError)
[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 140

def initialize(options)
  @attributes = Array(options.delete(:attributes))
  raise ArgumentError, ":attributes cannot be blank" if @attributes.empty?
  super
  check_validity!
end

Instance Attribute Details

#attributes (readonly)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 135

attr_reader :attributes

Instance Method Details

#check_validity!

Hook method that gets called by the initializer allowing verification that the arguments supplied are valid. You could for example raise an ArgumentError when invalid options are supplied.

[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 168

def check_validity!
end

#prepare_value_for_validation(value, record, attr_name) (private)

[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 172

def prepare_value_for_validation(value, record, attr_name)
  value
end

#validate(record)

Performs validation on the supplied record. By default this will call #validate_each to determine validity therefore subclasses should override #validate_each with validation logic.

[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 150

def validate(record)
  attributes.each do |attribute|
    value = record.read_attribute_for_validation(attribute)
    next if (value.nil? && options[:allow_nil]) || (value.blank? && options[:allow_blank])
    value = prepare_value_for_validation(value, record, attribute)
    validate_each(record, attribute, value)
  end
end

#validate_each(record, attribute, value)

Override this method in subclasses with the validation logic, adding errors to the records errors array where necessary.

Raises:

  • (NotImplementedError)
[ GitHub ]

  
# File 'activemodel/lib/active_model/validator.rb', line 161

def validate_each(record, attribute, value)
  raise NotImplementedError, "Subclasses must implement a validate_each(record, attribute, value) method"
end