class ConsistencyFail::Introspectors::ValidatesUniquenessOf

Public Instance Methods

instances(model) click to toggle source
# File lib/consistency_fail/introspectors/validates_uniqueness_of.rb, line 6
def instances(model)
  model.validators.select do |v|
    v.class == ActiveRecord::Validations::UniquenessValidator
  end
end
missing_indexes(model) click to toggle source
# File lib/consistency_fail/introspectors/validates_uniqueness_of.rb, line 24
def missing_indexes(model)
  return [] unless model.connection.tables.include? model.table_name
  existing_indexes = TableData.new.unique_indexes(model)

  desired_indexes(model).reject do |index|
    existing_indexes.include?(index)
  end
end

Private Instance Methods

desired_indexes(model) click to toggle source
# File lib/consistency_fail/introspectors/validates_uniqueness_of.rb, line 12
def desired_indexes(model)
  instances(model).map do |v|
    v.attributes.map do |attribute|
      scoped_columns = v.options[:scope] || []
      ConsistencyFail::Index.new(model,
                                 model.table_name,
                                 [attribute, *scoped_columns])
    end
  end.flatten
end