class YeetDba::Table

Attributes

table_name[RW]
tables[RW]

Public Class Methods

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

Public Instance Methods

invalid_columns() click to toggle source
# File lib/yeet_dba/table.rb, line 10
def invalid_columns
  missing_keys_array = []
  columns.each do |db_column|
    column = Column.new(db_column: db_column, table_name: table_name, tables: tables)
    next unless column.is_association?
    next if column.polymorphic_association?
    next if column.foreign_key_exists?
    next if column.association_table_name.blank?
    verify_data = VerifyData.new(column: column)
    next unless verify_data.orphaned_rows?

    invalid_column = InvalidColumn.new(table_name: table_name,
                                       column: column,
                                       verify_data: verify_data)
    missing_keys_array.push(invalid_column)

  end
  missing_keys_array
end
missing_keys() click to toggle source
# File lib/yeet_dba/table.rb, line 30
def missing_keys
  missing_keys_array = []
  columns.each do |db_column|
    column = Column.new(db_column: db_column, table_name: table_name, tables: tables)
    next unless column.is_association?

    unless column.model
      puts "WARNING - cannot find a model for #{table_name} . #{db_column.name} | #{column&.association_table_name}"
    end

    unless column.association
      puts "WARNING - cannot find an association for #{table_name} . #{db_column.name} | #{column&.association_table_name}"
    end

    next if column.polymorphic_association?
    next if column.foreign_key_exists?
    next if column.association_table_name.blank?

    if VerifyData.new(column: column).orphaned_rows?
      puts "YeetDba - orphaned rows. Skipping #{table_name} . #{db_column.name} | #{column&.association_table_name}"
      next
    end

    foreign_key = ForeignKey.new(table_a: table_name,
                                 table_b: column&.association_table_name,
                                 column: db_column.name)
    missing_keys_array.push(foreign_key)
  end
  missing_keys_array
end

Private Instance Methods

columns() click to toggle source
# File lib/yeet_dba/table.rb, line 63
def columns
  ActiveRecord::Base.connection.columns(table_name)
end