module Mimi::DB::Dictate

Public Class Methods

diff_schema(opts = {}) click to toggle source

Diff existing DB schema and the target schema

@param opts [Hash] @return [Hash]

# File lib/mimi/db/dictate.rb, line 57
def self.diff_schema(opts = {})
  logger = opts[:logger] || Mimi::DB.logger
  diff = { add_tables: [], change_tables: [], drop_tables: [] }
  Mimi::DB.all_table_names.each do |t|
    m = Mimi::DB::Dictate::Migrator.new(t, opts)
    if m.from_schema && m.to_schema.nil?
      diff[:drop_tables] << t
    elsif m.from_schema && m.to_schema
      logger.debug "DB::Dictate comparing '#{t}'"
      t_diff = Mimi::DB::Dictate::SchemaDiff.diff(m.from_schema, m.to_schema)
      diff[:change_tables] << t_diff unless t_diff[:columns].empty? && t_diff[:indexes].empty?
    elsif m.from_schema.nil? && m.to_schema
      diff[:add_tables] << m.to_schema
    end
  end
  diff
rescue StandardError => e
  logger.error "DB::Dictate failed to compare schema: #{e}"
  raise
end
included(base) click to toggle source
# File lib/mimi/db/dictate.rb, line 13
def self.included(base)
  base.extend Mimi::DB::Dictate::DSL
end
schema_definitions() click to toggle source

Returns all registered schema definitions

@return [Hash] a map of <table_name> -> <schema_definition>

# File lib/mimi/db/dictate.rb, line 24
def self.schema_definitions
  @schema_definitions ||= {}
end
start() click to toggle source
# File lib/mimi/db/dictate.rb, line 17
def self.start
end
update_schema!(opts = {}) click to toggle source

Updates the DB schema to the target schema defined in models

Default options from Migrator::DEFAULTS:

destructive: {
  tables: false,
  columns: false,
  indexes: false
},
dry_run: false,
logger: nil # will use Mimi::DB.logger

@param opts [Hash]

# File lib/mimi/db/dictate.rb, line 41
def self.update_schema!(opts = {})
  logger = opts[:logger] || Mimi::DB.logger
  logger.debug 'Mimi::DB::Dictate started updating DB schema'
  t_start = Time.now
  Mimi::DB.all_table_names.each { |t| Mimi::DB::Dictate::Migrator.new(t, opts).run! }
  logger.debug 'Mimi::DB::Dictate finished updating DB schema (%.3fs)' % [Time.now - t_start]
rescue StandardError => e
  logger.error "Mimi::DB::Dictate failed to update DB schema: #{e}"
  raise
end