class MigSql

Public Class Methods

new(migration) click to toggle source
# File lib/migsql/app.rb, line 3
def initialize(migration)
  @migration = migration || Migration.new('./db/config.yml')
  @migration.load
end

Public Instance Methods

calculate_migration_plan(migration_server, to, from) click to toggle source
# File lib/migsql/app.rb, line 84
def calculate_migration_plan(migration_server, to, from)
  @migration.get_migration_plan(
    migration_server,
    to,
    from
  )
end
enforce_arg(value, name) click to toggle source
# File lib/migsql/app.rb, line 25
def enforce_arg(value, name)
  if value.nil?
    puts "Error: You must specify a value for #{name}".red
    return true
  end
  false
end
get_migration_server(server_name) click to toggle source
# File lib/migsql/app.rb, line 102
def get_migration_server(server_name)
  if @migration.count_servers == 0
    puts 'Error: Please run migsql init first'.red
    server_name = nil
  elsif @migration.count_servers > 1 && server_name.nil?
    puts 'Error: Your config has multiple servers,
          please specify which server to create the migration on'.red
  elsif !server_name.nil? && @migration.get_server(server_name).nil?
    puts "Error: No server named #{server_name} found in your config".red
    server_name = nil
  elsif @migration.count_servers == 1
    server_name = @migration.get_first_server_name
  end
  server_name
end
get_migration_target(migration_server, migration_target) click to toggle source
# File lib/migsql/app.rb, line 92
def get_migration_target(migration_server, migration_target)
  if migration_target.nil?
    migration = @migration.get_latest_migration(migration_server)
  else
    migration = @migration.get_migration_by_name(migration_server, migration_target)
    puts "Error: No migration found with name: #{migration_target}".red if migration.nil?
  end
  migration
end
handle_apply(argv) click to toggle source
# File lib/migsql/app.rb, line 33
def handle_apply(argv)
  return if enforce_arg(argv[1], 'migration name')
  return if enforce_arg(argv[2], 'up/down')
  migration_server = get_migration_server(argv[4])
  migration_name = get_migration_target(migration_server, argv[1])
  return if migration_name.nil?
  migration_name = "db/#{migration_server}/#{migration_name}_#{argv[2]}.sql"
  @migration.apply_migration(migration_server, migration_name)\
    unless migration_server.nil? || migration_name.nil?
end
handle_argv(argv) click to toggle source
# File lib/migsql/app.rb, line 8
def handle_argv(argv)
  if argv.length == 0
    puts 'Usage: migsql {init|create-migration|migrate|apply}'.white
  else
    case argv[0]
    when 'init'
      handle_init
    when 'create-migration'
      handle_create_migration argv
    when 'migrate'
      handle_migrate argv
    when 'apply'
      handle_apply argv
    end
  end
end
handle_create_migration(argv) click to toggle source
# File lib/migsql/app.rb, line 60
def handle_create_migration(argv)
  migration_name = argv[1]
  migration_server = get_migration_server(argv[2])
  @migration.create_migration migration_server, migration_name\
    unless migration_server.nil?
end
handle_init() click to toggle source
# File lib/migsql/app.rb, line 44
def handle_init
  if File.directory?('./db')
    puts 'Error: the ./db directory already exists'.red
  else
    @migration.create_server(
     'example_database',
     '127.0.0.1',
     'dbname',
     'username',
     'password'
    )
    @migration.save
    puts 'Default configuration created in ./db/config.yml'.green
  end
end
handle_migrate(argv) click to toggle source
# File lib/migsql/app.rb, line 67
def handle_migrate(argv)
  if argv[1] == 'to'
    migration_server = @migration.get_first_server_name
    migration_target = argv[2]
  else
    migration_server = get_migration_server(argv[1])
    migration_target = argv[3]
  end
  return if migration_server.nil?
  migration_target = get_migration_target(migration_server, migration_target)
  return if migration_target.nil?
  from = @migration.get_migration_status(migration_server)
  plan = calculate_migration_plan(migration_server, migration_target, from)
  @migration.apply_migration_plan(migration_server, plan, migration_target)\
    unless plan.nil?
end