Module: DatabaseValidations::Rescuer

Defined in:
lib/database_validations/lib/rescuer.rb

Class Method Summary collapse

Class Method Details

.handled?(instance, error, validate) ⇒ Boolean

Returns:

  • (Boolean)


5
6
7
8
9
10
11
12
13
14
15
# File 'lib/database_validations/lib/rescuer.rb', line 5

def handled?(instance, error, validate)
  Storage.prepare(instance.class) unless Storage.prepared?(instance.class)

  case error
  when ActiveRecord::RecordNotUnique
    process(validate, instance, error, for_unique_index: :unique_index_name, for_db_uniqueness: :unique_error_columns)
  when ActiveRecord::InvalidForeignKey
    process(validate, instance, error, for_db_presence: :foreign_key_error_column)
  else false
  end
end

.process(validate, instance, error, key_types) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/database_validations/lib/rescuer.rb', line 17

def process(validate, instance, error, key_types)
  adapter = Adapters.factory(instance.class)

  keys = key_types.map do |key_generator, error_processor|
    KeyGenerator.public_send(key_generator, adapter.public_send(error_processor, error.message))
  end

  keys.each do |key|
    attribute_validator = instance._db_validators[key]

    next unless attribute_validator

    return process_validator(validate, instance, attribute_validator)
  end

  false
end

.process_validator(validate, instance, attribute_validator) ⇒ Object



35
36
37
38
39
40
# File 'lib/database_validations/lib/rescuer.rb', line 35

def process_validator(validate, instance, attribute_validator)
  return false unless attribute_validator.validator.perform_rescue?(validate)

  attribute_validator.validator.apply_error(instance, attribute_validator.attribute)
  true
end