Module: DatabaseValidations::Helpers

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

Class Method Summary collapse

Class Method Details

.each_options_storage(klass) ⇒ Object



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

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

.each_validator(klass) ⇒ Object



26
27
28
29
30
# File 'lib/database_validations/validations/helpers.rb', line 26

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

.generate_key(*columns) ⇒ Object



36
37
38
# File 'lib/database_validations/validations/helpers.rb', line 36

def generate_key(*columns)
  unify_columns(columns).join('__')
end

.handle_unique_error!(instance, error) ⇒ Object



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)
  adapter = Adapters.factory(instance.class)
  index_key = adapter.index_name(error.message)
  column_key = generate_key(adapter.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



32
33
34
# File 'lib/database_validations/validations/helpers.rb', line 32

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