class DBA::Diff

Public Instance Methods

call(url) click to toggle source
# File lib/dba/diff.rb, line 4
def call(url)
  other_database = Sequel.connect(url)

  tables = database.tables

  other_tables = other_database.tables

  printer.print_diff tables, other_tables

  tables &= other_tables # only diff columns/indexes for tables that exist in both databases

  printer.print_diff list_columns(database, tables), list_columns(other_database, tables)

  printer.print_diff list_indexes(database, tables), list_indexes(other_database, tables)
end

Private Instance Methods

format_column(name, info_hash, table_name) click to toggle source
# File lib/dba/diff.rb, line 34
def format_column(name, info_hash, table_name)
  "#{table_name}.#{name} (#{info_hash.fetch(:type)})"
end
format_index(name, info_hash) click to toggle source
# File lib/dba/diff.rb, line 38
def format_index(name, info_hash)
  columns = info_hash.fetch(:columns).map(&:to_s).join(', ')

  "#{name} (#{columns})"
end
list_columns(database, tables) click to toggle source
# File lib/dba/diff.rb, line 22
def list_columns(database, tables)
  tables.inject([]) do |columns, table_name|
    columns + database.schema(table_name).map { |name, info| format_column(name, info, table_name) }
  end
end
list_indexes(database, tables) click to toggle source
# File lib/dba/diff.rb, line 28
def list_indexes(database, tables)
  tables.inject([]) do |indexes, table_name|
    indexes + database.indexes(table_name).map { |name, info| format_index(name, info) }
  end
end