Class: ActiveModel::EachValidator

Inherits:
Validator show all
Defined in:
activemodel/lib/active_model/validator.rb

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.

Instance Attribute Summary (collapse)

Attributes inherited from Validator

#options

Instance Method Summary (collapse)

Methods inherited from Validator

kind, #kind

Constructor Details

- (EachValidator) initialize(options)

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.



140
141
142
143
144
145
# File 'activemodel/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

Instance Attribute Details

- (Object) attributes (readonly)

Returns the value of attribute attributes



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

def attributes
  @attributes
end

Instance Method Details

- (Object) 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.



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

def check_validity!
end

- (Object) validate(record)

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.



150
151
152
153
154
155
156
# 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])
    validate_each(record, attribute, value)
  end
end

- (Object) 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)


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

def validate_each(record, attribute, value)
  raise NotImplementedError
end