Class: Traceindex

Inherits:
Object
  • Object
show all
Defined in:
lib/traceindex.rb

Defined Under Namespace

Classes: Railtie

Constant Summary collapse

VERSION =
Gem.loaded_specs['traceindex'].version.to_s

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Traceindex

Returns a new instance of Traceindex.



10
11
12
13
14
15
16
# File 'lib/traceindex.rb', line 10

def initialize(app)
  @app                 = app
  @ignore_models       = (config["ignore_models"] || [])
  @ignore_columns      = (config["ignore_columns"] || [])
  @ignore_foreign_keys = (config["ignore_foreign_keys"] || [])
  @ignore_tables       = (config["ignore_tables"] || [])
end

Instance Method Details

#missing_foreign_keysObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/traceindex.rb', line 38

def missing_foreign_keys
  models.each.with_object([]) do |model, missing_columns|
    id_columns = model.columns.select {|column| column.name.end_with?("_id") }

    foreign_keys = ActiveRecord::Base.connection.foreign_keys(model.table_name)

    id_columns.each do |id_column|
      if @ignore_foreign_keys.include?("#{model.table_name}.#{id_column.name}")
        next
      end

      next unless foreign_keys.none? { |index| index.column == id_column.name }
      missing_columns << "#{model.table_name}.#{id_column.name}"
    end
  rescue => e
    puts e.message
  end
end

#missing_index_column_namesObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/traceindex.rb', line 18

def missing_index_column_names
  models.each.with_object([]) do |model, missing_index_columns|
    id_columns = model.columns.select {|column| column.name.end_with?("_id") }

    indexes = ActiveRecord::Base.connection.indexes(model.table_name)

    id_columns.each do |id_column|
      if @ignore_columns.include?("#{model.table_name}.#{id_column.name}")
        next
      end

      next unless indexes.none? {|index| index.columns.first == id_column.name }

      missing_index_columns << "#{model.table_name}.#{id_column.name}"
    end
  rescue => e
    puts e.message
  end
end