Class: ActiveRecord::Lint::Scanner
- Inherits:
-
Object
- Object
- ActiveRecord::Lint::Scanner
show all
- Includes:
- ActiveRecord::Lint, Memoize
- Defined in:
- lib/active_record/lint/scanner.rb
Instance Method Summary
collapse
Methods included from Memoize
included, #memoize_store_for
Constructor Details
#initialize(connection = nil) ⇒ Scanner
Returns a new instance of Scanner.
5
6
7
|
# File 'lib/active_record/lint/scanner.rb', line 5
def initialize(connection = nil)
@connection = connection || ActiveRecord::Base.connection
end
|
Instance Method Details
#classes ⇒ Object
56
57
58
|
# File 'lib/active_record/lint/scanner.rb', line 56
def classes
ActiveRecord::Base.send(:subclasses)
end
|
#columns ⇒ Object
33
34
35
36
37
38
39
40
41
|
# File 'lib/active_record/lint/scanner.rb', line 33
def columns
returning [] do |columns|
@connection.tables.each do |table|
@connection.columns(table).each do |column|
columns << TableColumnPair.new(table, column.name)
end
end
end.uniq
end
|
#foreign_keys ⇒ Object
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/active_record/lint/scanner.rb', line 21
def foreign_keys
returning [] do |foreign_keys|
classes.each do |klass|
table_name = klass.table_name
klass.reflect_on_all_associations(:belongs_to).map(&:primary_key_name).each do |foreign_key|
foreign_keys << TableColumnPair.new(table_name, foreign_key)
end
end
end.uniq
end
|
#indexes ⇒ Object
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/active_record/lint/scanner.rb', line 44
def indexes
returning [] do |indexes|
@connection.tables.each do |table|
column_sets = @connection.indexes(table).map(&:columns)
column_sets.select{|col| col.size == 1}.flatten.each do |index|
indexes << TableIndexPair.new(table, index)
end
end
end.uniq
end
|
#missing_foreign_keys ⇒ Object
17
18
19
|
# File 'lib/active_record/lint/scanner.rb', line 17
def missing_foreign_keys
foreign_keys - columns
end
|
#missing_indexes ⇒ Object
9
10
11
|
# File 'lib/active_record/lint/scanner.rb', line 9
def missing_indexes
foreign_keys - indexes
end
|
#missing_tables ⇒ Object
13
14
15
|
# File 'lib/active_record/lint/scanner.rb', line 13
def missing_tables
classes.map{|klass| klass.table_name } - @connection.tables
end
|