diff --git a/bin/veksel b/bin/veksel index 2176d4e..8c27d1c 100755 --- a/bin/veksel +++ b/bin/veksel @@ -2,8 +2,6 @@ require 'veksel/cli' case ARGV[0] -when 'suffix' - Veksel::CLI.suffix when 'fork' Veksel::CLI.fork end diff --git a/lib/veksel.rb b/lib/veksel.rb index 8fe5bac..80a8277 100644 --- a/lib/veksel.rb +++ b/lib/veksel.rb @@ -38,9 +38,5 @@ def skip_fork? def suffix Suffix.new(current_branch).to_s end - - def prefix(dbname) - dbname.sub(%r[#{Veksel.suffix}$], '_') - end end end diff --git a/lib/veksel/cli.rb b/lib/veksel/cli.rb index 70003b6..1c5e816 100644 --- a/lib/veksel/cli.rb +++ b/lib/veksel/cli.rb @@ -2,18 +2,15 @@ module Veksel module CLI - class << self - def suffix - print Veksel.suffix - end + DbConfig = Struct.new('DbConfig', :configuration_hash) + class << self def fork return if Veksel.skip_fork? t1 = Time.now.to_f require 'veksel/commands/fork' require 'psych' - require 'ostruct' require 'fileutils' config = read_config('config/database.yml')[:development] @@ -23,7 +20,7 @@ def fork end target_database = config[:database] + Veksel.suffix - db = OpenStruct.new(configuration_hash: config, database: target_database) + db = DbConfig.new(config) if Veksel::Commands::Fork.new(db).perform duration = ((Time.now.to_f - t1) * 1000).to_i FileUtils.touch('tmp/restart.txt') diff --git a/lib/veksel/commands/clean.rb b/lib/veksel/commands/clean.rb index cdbe28f..d08df79 100644 --- a/lib/veksel/commands/clean.rb +++ b/lib/veksel/commands/clean.rb @@ -11,10 +11,10 @@ def perform active_branches = Veksel.active_branches stale_databases = all_databases.filter do |database| - active_branches.none? { |branch| database.end_with?("_#{branch}") } + active_branches.none? { |branch| database.branch == branch } end stale_databases.each do |database| - @adapter.drop_database(database, dry_run: @dry_run) + @adapter.drop_database(database.name, dry_run: @dry_run) end end end diff --git a/lib/veksel/commands/fork.rb b/lib/veksel/commands/fork.rb index b30576c..732721c 100644 --- a/lib/veksel/commands/fork.rb +++ b/lib/veksel/commands/fork.rb @@ -5,8 +5,8 @@ class Fork def initialize(db) @adapter = Veksel.adapter_for(db.configuration_hash) - @source_db = db.database.sub(%r[#{Veksel.suffix}$], '') - @target_db = db.database + @source_db = adapter.main_database + @target_db = adapter.db_name_with_suffix(Veksel.suffix) raise "Source and target databases cannot be the same" if source_db == target_db end diff --git a/lib/veksel/commands/list.rb b/lib/veksel/commands/list.rb index af78a20..dab2da6 100644 --- a/lib/veksel/commands/list.rb +++ b/lib/veksel/commands/list.rb @@ -18,8 +18,8 @@ def perform hash = {} databases.each do |database| - branch = database.sub(adapter.forked_database_prefix, '') - hash[branch] = database + branch = database.branch + hash[branch] = database.name end longest_branch_name = hash.keys.max_by(&:length).length diff --git a/lib/veksel/pg_cluster.rb b/lib/veksel/pg_cluster.rb index a08d2db..9c9fb4b 100644 --- a/lib/veksel/pg_cluster.rb +++ b/lib/veksel/pg_cluster.rb @@ -1,5 +1,7 @@ module Veksel class PgCluster + Database = Struct.new(:name, :branch) + attr_reader :configuration_hash def initialize(configuration_hash) @@ -11,11 +13,13 @@ def main_database end def forked_databases - list_databases(prefix: forked_database_prefix) + list_databases(prefix: forked_database_prefix).map do |name| + Database.new(name, name.sub(forked_database_prefix, '')) + end end - def forked_database_prefix - "#{main_database}_" + def db_name_with_suffix(suffix) + "#{forked_database_prefix}#{suffix}" end def target_populated?(dbname) @@ -54,6 +58,10 @@ def drop_database(dbname, dry_run: false) private + def forked_database_prefix + "#{main_database}_" + end + def pg_connection_args(dbname) "-d #{dbname} --no-password" end diff --git a/lib/veksel/railtie.rb b/lib/veksel/railtie.rb index 72b60be..1eac745 100644 --- a/lib/veksel/railtie.rb +++ b/lib/veksel/railtie.rb @@ -12,8 +12,10 @@ class Railtie < ::Rails::Railtie next if url.present? next unless env_name == 'development' || env_name == 'test' veksel_adapter = Veksel.adapter_for(config, exception: false) - database_name = "#{config[:database]}#{Veksel.suffix}" - next unless veksel_adapter&.target_populated?(database_name) + next unless veksel_adapter + + database_name = veksel_adapter.db_name_with_suffix(Veksel.suffix) + next unless veksel_adapter.target_populated?(database_name) ActiveRecord::DatabaseConfigurations::HashConfig.new(env_name, name, config.merge({ database: database_name, diff --git a/lib/veksel/suffix.rb b/lib/veksel/suffix.rb index 5a6d9dc..72ca2aa 100644 --- a/lib/veksel/suffix.rb +++ b/lib/veksel/suffix.rb @@ -11,7 +11,7 @@ def to_s when *PROTECTED_BRANCHES "" else - "_#{@branch_name}" + @branch_name end end end