class ConsistencyFail::Introspectors::Polymorphic

Public Instance Methods

instances(model) click to toggle source
# File lib/consistency_fail/introspectors/polymorphic.rb, line 6
def instances(model)
  model.reflect_on_all_associations.select do |a|
    a.macro == :has_one && a.options[:as].to_s.length > 0
  end
end
missing_indexes(model) click to toggle source
# File lib/consistency_fail/introspectors/polymorphic.rb, line 27
def missing_indexes(model)
  desired = desired_indexes(model)

  existing_indexes = desired.inject([]) do |acc, d|
    acc += TableData.new.unique_indexes_by_table(d.model,
                                                 d.model.connection,
                                                 d.table_name)
  end

  desired.reject do |index|
    existing_indexes.include?(index)
  end
end

Private Instance Methods

desired_indexes(model) click to toggle source
# File lib/consistency_fail/introspectors/polymorphic.rb, line 12
def desired_indexes(model)
  instances(model).map do |a|
    as      = a.options[:as]
    as_type = "#{as}_type"
    as_id   = "#{as}_id"

    ConsistencyFail::Index.new(
      a.klass,
      a.table_name.to_s,
      [as_type, as_id]
    )
  end.compact
end