Class: RSpec::Multicore::Rails::DatabaseManager

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/multicore/rails/database_manager.rb

Overview

Manages and connects worker-owned ActiveRecord test databases.

Constant Summary collapse

TEST_ENV =
"test"

Instance Method Summary collapse

Constructor Details

#initializeDatabaseManager

Returns a new instance of DatabaseManager.



13
14
15
16
17
18
19
20
# File 'lib/rspec/multicore/rails/database_manager.rb', line 13

def initialize
  @original_config = ActiveRecord::Base.connection_db_config
  @configs = test_configs
  @primary_config = canonical_config(@original_config) || @configs.first || @original_config
  @configs << @primary_config unless @configs.include?(@primary_config)
  @base_databases = {}.compare_by_identity
  @configs.each { @base_databases[_1] = _1.database }
end

Instance Method Details

#connect_worker(slot) ⇒ Object



22
23
24
25
26
27
# File 'lib/rspec/multicore/rails/database_manager.rb', line 22

def connect_worker(slot)
  ensure_test_environment!
  ActiveRecord::Base.connection_handler.clear_all_connections!
  @configs.each { _1._database = database_for(slot, _1) }
  ActiveRecord::Base.establish_connection(@primary_config)
end

#create_workers(name: nil) ⇒ Object



29
# File 'lib/rspec/multicore/rails/database_manager.rb', line 29

def create_workers(name: nil) = preserve_connection { each_worker_config(name:) { database_tasks.create(_1) } }

#database_for(slot, config = @primary_config) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/rspec/multicore/rails/database_manager.rb', line 59

def database_for(slot, config = @primary_config)
  return base_database(config) if slot == 1

  database = base_database(config)
  return "#{database}_#{slot}" unless config.adapter == "sqlite3"

  extension = File.extname(database)
  "#{database.delete_suffix(extension)}_#{slot}#{extension}"
end

#drop_workers(name: nil) ⇒ Object



55
# File 'lib/rspec/multicore/rails/database_manager.rb', line 55

def drop_workers(name: nil) = preserve_connection { each_worker_config(name:) { database_tasks.drop(_1) } }

#load_schema_workers(name: nil) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/rspec/multicore/rails/database_manager.rb', line 41

def load_schema_workers(name: nil)
  preserve_connection do
    each_worker_config(name:) do |config|
      establish_connection(config)
      database_tasks.load_schema(config, schema_format(config))
    end
  end
end

#prepare_workers(name: nil) ⇒ Object



50
51
52
53
# File 'lib/rspec/multicore/rails/database_manager.rb', line 50

def prepare_workers(name: nil)
  purge_workers(name:)
  load_schema_workers(name:)
end

#purge_workers(name: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/rspec/multicore/rails/database_manager.rb', line 31

def purge_workers(name: nil)
  preserve_connection do
    each_worker_config(name:) do |config|
      database_tasks.purge(config)
    rescue ActiveRecord::NoDatabaseError
      database_tasks.create(config)
    end
  end
end

#workersObject



57
# File 'lib/rspec/multicore/rails/database_manager.rb', line 57

def workers = RSpec::Multicore.workers