class YeetDba::Column

Attributes

db_column[RW]
table_name[RW]
tables[RW]

Public Class Methods

new(db_column:, table_name:, tables:) click to toggle source
# File lib/yeet_dba/column.rb, line 5
def initialize(db_column:, table_name:, tables:)
  @db_column = db_column
  @table_name = table_name
  @tables = tables
end

Public Instance Methods

association() click to toggle source
# File lib/yeet_dba/column.rb, line 31
def association
  model && model.reflections[association_name]
end
association_klass() click to toggle source
# File lib/yeet_dba/column.rb, line 15
def association_klass
  association&.klass
end
association_name() click to toggle source
# File lib/yeet_dba/column.rb, line 23
def association_name
  db_column.name.gsub(/_id\z/, '')
end
association_table_name() click to toggle source
# File lib/yeet_dba/column.rb, line 19
def association_table_name
  association_klass&.table_name || tables.detect { |table| table == guessed_table_name }
end
foreign_key_exists?() click to toggle source
# File lib/yeet_dba/column.rb, line 39
def foreign_key_exists?
  ActiveRecord::Migration.foreign_key_exists?(table_name, column: db_column.name)
end
guessed_table_name() click to toggle source
# File lib/yeet_dba/column.rb, line 43
def guessed_table_name
  @guessed_table_name ||= association_name.pluralize
end
is_association?() click to toggle source
# File lib/yeet_dba/column.rb, line 11
def is_association?
  db_column.name =~ /_id\z/
end
model() click to toggle source
# File lib/yeet_dba/column.rb, line 27
def model
  ActiveRecord::Base.descendants.detect { |c| c.table_name == table_name }
end
polymorphic_association?() click to toggle source
# File lib/yeet_dba/column.rb, line 35
def polymorphic_association?
  association && association.options[:polymorphic]
end