module DBCode

Constants

LoadError
VERSION

Attributes

code_schema_name[W]
env[W]
logger[W]
sql_file_path[W]

Public Instance Methods

build_graph() click to toggle source
# File lib/dbcode.rb, line 59
def build_graph
  Graph.new files.map &SQLFile.method(:new)
end
code_schema_name() click to toggle source
# File lib/dbcode.rb, line 12
def code_schema_name
  @code_schema_name || 'code'
end
env() click to toggle source
# File lib/dbcode.rb, line 30
def env
  @env ||= 'development'
end
files() click to toggle source
# File lib/dbcode.rb, line 63
def files
  Dir[sql_file_path.join('**/*.sql').expand_path].sort.map do |file_name|
    path = Pathname(file_name)
    {
      name: path.relative_path_from(sql_file_path).sub(/.sql$/,'').to_s,
      contents: path.read
    }
  end
end
logger() click to toggle source
# File lib/dbcode.rb, line 24
def logger
  @logger ||= Logger.new(STDOUT)
end
prepare() click to toggle source
# File lib/dbcode.rb, line 36
def prepare
  code = Schema.new connection: Base.connection, name: code_schema_name
  code.append_path!(Base.connection_config)

  return if Migrator.needs_migration?

  code.within_schema do
    graph = build_graph

    if code.digest != graph.digest
      if env == 'production'
        return logger.error "[dbcode] out of date, but refusing to reset #{code.name} in production."
      end
      logger.warn "[dbcode] Resetting schema #{code.name}"
      code.reset!
      code.execute graph.to_sql
      code.digest = graph.digest
    else
      logger.info "[dbcode] Schema #{code.name} is up to date"
    end
  end
end
sql_file_path() click to toggle source
# File lib/dbcode.rb, line 18
def sql_file_path
  @sql_file_path or raise "Configure sql file path. eg: #{self}.#{__method__} = Rails.root"
end