Class: OverlapValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/validates_overlap/overlap_validator.rb

Defined Under Namespace

Classes: UnsupportedColumnType

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ OverlapValidator

Returns a new instance of OverlapValidator.



10
11
12
13
14
# File 'lib/validates_overlap/overlap_validator.rb', line 10

def initialize(args)
  attributes_are_range(args[:attributes])

  super
end

Instance Method Details

#validate(record) ⇒ Object

NOTE: Rails registers ONE validator instance per model class, shared by every validation of that class (including concurrent ones) — so the query being built must never be stored on the validator itself (issue #50)



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/validates_overlap/overlap_validator.rb', line 19

def validate(record)
  reject_unsupported_column_types(record)
  relation, sql_conditions, sql_values = initialize_query(record, options)
  if overlapped_exists?(relation, sql_conditions, sql_values)
    if options[:load_overlapped]
      record.instance_variable_set(:@overlapped_records, get_overlapped(relation, sql_conditions, sql_values))
    end

    if record.respond_to? attributes.first
      if options[:message_title].is_a?(Array)
        options[:message_title].each do |key|
          record.errors.add(key, options[:message_content] || :overlap)
        end
      else
        record.errors.add(options[:message_title] || attributes.first, options[:message_content] || :overlap)
      end
    else
      record.errors.add(options[:message_title] || :base, options[:message_content] || :overlap)
    end
  end
end