Module: DatabaseValidations::Helpers

Defined in:
lib/database_validations/validations/helpers.rb

Class Method Summary collapse

Class Method Details

.each_belongs_to_presence_validator(klass) ⇒ Object



43
44
45
46
47
# File 'lib/database_validations/validations/helpers.rb', line 43

def each_belongs_to_presence_validator(klass)
  each_options_storage(klass) do |storage|
    storage.each_belongs_to_presence_validator { |validator| yield(validator) }
  end
end

.each_options_storage(klass) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/database_validations/validations/helpers.rb', line 29

def each_options_storage(klass)
  while klass.respond_to?(:validates_db_uniqueness_of)
    storage = klass.instance_variable_get(:'@database_validations_opts')
    yield(storage) if storage
    klass = klass.superclass
  end
end

.each_uniqueness_validator(klass) ⇒ Object



37
38
39
40
41
# File 'lib/database_validations/validations/helpers.rb', line 37

def each_uniqueness_validator(klass)
  each_options_storage(klass) do |storage|
    storage.each_uniqueness_validator { |validator| yield(validator) }
  end
end

.generate_key(type, *columns) ⇒ Object



65
66
67
# File 'lib/database_validations/validations/helpers.rb', line 65

def generate_key(type, *columns)
  [type, *unify_columns(columns)].join('__')
end

.generate_key_for_belongs_to(column) ⇒ Object



61
62
63
# File 'lib/database_validations/validations/helpers.rb', line 61

def generate_key_for_belongs_to(column)
  generate_key(:belongs_to, column)
end

.generate_key_for_uniqueness(*columns) ⇒ Object



57
58
59
# File 'lib/database_validations/validations/helpers.rb', line 57

def generate_key_for_uniqueness(*columns)
  generate_key(:uniqueness, columns)
end

.generate_key_for_uniqueness_index(index_name) ⇒ Object



53
54
55
# File 'lib/database_validations/validations/helpers.rb', line 53

def generate_key_for_uniqueness_index(index_name)
  generate_key(:uniqueness_index, index_name)
end

.handle_foreign_key_error!(instance, error) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/database_validations/validations/helpers.rb', line 18

def handle_foreign_key_error!(instance, error)
  adapter = Adapters.factory(instance.class)
  column_key = generate_key_for_belongs_to(adapter.foreign_key_error_column(error.message))

  each_options_storage(instance.class) do |storage|
    return storage[column_key].handle_foreign_key_error(instance) if storage[column_key]
  end

  raise error
end

.handle_unique_error!(instance, error) ⇒ Object

rubocop:disable Metrics/AbcSize



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

def handle_unique_error!(instance, error) # rubocop:disable Metrics/AbcSize
  adapter = Adapters.factory(instance.class)
  index_key = generate_key_for_uniqueness_index(adapter.index_name(error.message))
  column_key = generate_key_for_uniqueness(adapter.unique_error_columns(error.message))

  each_options_storage(instance.class) do |storage|
    return storage[index_key].handle_unique_error(instance) if storage[index_key]
    return storage[column_key].handle_unique_error(instance) if storage[column_key]
  end

  raise error
end

.unify_columns(*columns) ⇒ Object



49
50
51
# File 'lib/database_validations/validations/helpers.rb', line 49

def unify_columns(*columns)
  columns.flatten.compact.map(&:to_s).sort
end