class ActiveModel::EachValidator

All Active Model validations are built on top of this Validator.
record, attribute and value.
in the options hash invoking the validate_each method passing in the
EachValidator is a validator which iterates through the attributes given

def check_validity!

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

def initialize(options)

and instead be made available through the +attributes+ reader.
+options+ reader, however the :attributes option will be removed
Returns a new validator instance. All options will be available via the
def initialize(options)
  @attributes = Array.wrap(options.delete(:attributes))
  raise ":attributes cannot be blank" if @attributes.empty?
  super
  check_validity!
end

def validate(record)

override +validates_each+ with validation logic.
+validates_each+ to determine validity therefore subclasses should
Performs validation on the supplied record. By default this will call
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])
    validate_each(record, attribute, value)
  end
end

def validate_each(record, attribute, value)

errors to the records +errors+ array where necessary.
Override this method in subclasses with the validation logic, adding
def validate_each(record, attribute, value)
  raise NotImplementedError
end