Module: RescueFromDuplicate

Defined in:
lib/rescue_from_duplicate/rescuer.rb,
lib/rescue_from_duplicate/active_record.rb,
lib/rescue_from_duplicate/uniqueness_rescuer.rb,
lib/rescue_from_duplicate/missing_unique_index.rb

Defined Under Namespace

Modules: ActiveRecord Classes: MissingUniqueIndex, Rescuer, UniquenessRescuer

Class Method Summary collapse

Class Method Details

.missing_unique_indexesObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rescue_from_duplicate/active_record.rb', line 9

def self.missing_unique_indexes
  klasses = ::ActiveRecord::Base.descendants.select do |klass|
    klass.validators.any? { |v| v.is_a?(::ActiveRecord::Validations::UniquenessValidator) || klass._rescue_from_duplicates.any? }
  end

  missing_unique_indexes = []

  klasses.each do |klass|
    klass._rescue_from_duplicate_handlers.each do |handler|
      next unless klass.connection.table_exists?(klass.table_name)
      unique_indexes = klass.connection.indexes(klass.table_name).select(&:unique)

      unless unique_indexes.any? { |index| index.columns.map(&:to_s).sort == handler.columns }
        missing_unique_indexes << MissingUniqueIndex.new(klass, handler.attributes, handler.columns)
      end
    end
  end
  missing_unique_indexes
end