Class: Riveter::DateRangeValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/riveter/date_range_validator.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ DateRangeValidator

Returns a new instance of DateRangeValidator.



3
4
5
6
7
8
# File 'lib/riveter/date_range_validator.rb', line 3

def initialize(options={})
  @date_from_attr = options.delete(:date_from_attr)
  @date_to_attr = options.delete(:date_to_attr)

  super
end

Instance Method Details

#validate_each(record, attribute, value) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/riveter/date_range_validator.rb', line 10

def validate_each(record, attribute, value)
  # NOTE: validate_each usually isn't called when the value is nil
  #  however it is possible to have a nil..nil range, so check for this
  if value.is_a?(Range) && value.first && value.last
    date_from = value.first
    date_to = value.last
    if date_from > date_to
      record.errors.add(attribute, :date_range)
      record.errors.add(@date_from_attr || :"#{attribute}_from", :date_range_date_from, :date_to => date_to)
      record.errors.add(@date_to_attr || :"#{attribute}_to", :date_range_date_to, :date_from => date_from)
    end
  else
    unless options[:allow_nil] || options[:allow_blank]
      record.errors.add(attribute, :blank)
      record.errors.add(@date_from_attr || :"#{attribute}_from", :blank)
      record.errors.add(@date_to_attr || :"#{attribute}_to", :blank)
    end
  end
end