Class: RSpec::Multicore::Rails::DatabaseManager
- Inherits:
-
Object
- Object
- RSpec::Multicore::Rails::DatabaseManager
- 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
- #connect_worker(slot) ⇒ Object
- #create_workers(name: nil) ⇒ Object
- #database_for(slot, config = @primary_config) ⇒ Object
- #drop_workers(name: nil) ⇒ Object
-
#initialize ⇒ DatabaseManager
constructor
A new instance of DatabaseManager.
- #load_schema_workers(name: nil) ⇒ Object
- #prepare_workers(name: nil) ⇒ Object
- #purge_workers(name: nil) ⇒ Object
- #workers ⇒ Object
Constructor Details
#initialize ⇒ DatabaseManager
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 |