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.
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.
# File lib/active_model/validator.rb, line 167 def check_validity! end
Performs validation on the supplied record. By default this will call
validates_each
to determine validity therefore subclasses
should override validates_each
with validation logic.
# File 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]) validate_each(record, attribute, value) end end
Override this method in subclasses with the validation logic, adding errors
to the records errors
array where necessary.
# File lib/active_model/validator.rb, line 160 def validate_each(record, attribute, value) raise NotImplementedError end
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.
# File lib/active_model/validator.rb, line 140 def initialize(options) @attributes = Array.wrap(options.delete(:attributes)) raise ":attributes cannot be blank" if @attributes.empty? super check_validity! end