module DatabaseValidations::UniquenessKeyExtractor

Public Instance Methods

attribute_by_columns_keys(validator) click to toggle source

@param [DatabaseValidations::DbUniquenessValidator]

@return [Hash]

# 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) click to toggle source

@param [DatabaseValidations::DbUniquenessValidator]

@return [Hash]

# 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) click to toggle source

@param [DatabaseValidations::DbUniquenessValidator]

@return [Hash]

# 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