Module: DatabaseValidations::UniquenessKeyExtractor

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

Class Method Summary collapse

Class Method Details

.attribute_by_columns_keys(validator) ⇒ Hash

Parameters:

Returns:

  • (Hash)


8
9
10
11
12
# File 'lib/database_validations/lib/uniqueness_key_extractor.rb', line 8

def attribute_by_columns_keys(validator)
  validator.attributes.map do |attribute|
    [KeyGenerator.for_db_uniqueness(attribute, Array.wrap(validator.options[:scope])), attribute]
  end.to_h
end

.attribute_by_indexes_keys(validator) ⇒ Hash

Parameters:

Returns:

  • (Hash)


17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/database_validations/lib/uniqueness_key_extractor.rb', line 17

def attribute_by_indexes_keys(validator) # rubocop:disable Metrics/AbcSize
  adapter = Adapters::BaseAdapter.new(validator.klass)

  if validator.index_name
    [[KeyGenerator.for_unique_index(validator.index_name), validator.attributes[0]]].to_h
  else
    validator.attributes.map do |attribute|
      columns = KeyGenerator.unify_columns(attribute, validator.options[:scope])
      index = adapter.find_unique_index(columns, validator.where)
      [KeyGenerator.for_unique_index(index.name), attribute]
    end.to_h
  end
end

.attribute_by_key(validator) ⇒ Hash

Parameters:

Returns:

  • (Hash)


34
35
36
# File 'lib/database_validations/lib/uniqueness_key_extractor.rb', line 34

def attribute_by_key(validator)
  attribute_by_columns_keys(validator).merge(attribute_by_indexes_keys(validator))
end