rspec-multicore-rails 0.2.0.pre2 → 0.2.0.pre3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cab0db5c29ef823bd0106eae9fe429e50ff913d399735be5eaa3b1ed0ae766f0
4
- data.tar.gz: a889a51713b6715cdd19f0793025b0c1a74997f20666458760d8a0e33e275d45
3
+ metadata.gz: 3c3050617c4ec5b96ff57ac77a08a685e24c0a056d9c029464ec4f950d894369
4
+ data.tar.gz: f87be93f0ba0d16fd7b55200bd8a955ff9f334d06a327c2970701204998694ba
5
5
  SHA512:
6
- metadata.gz: 693239e0fa3955ffad52dea7a694a4ef12d2a63b5ceba3863f5550eed736719cc2c2fe99b4b00564e9c78ef4656e1694feb73ca6207eff7b0a4d9e48bcdfb9dc
7
- data.tar.gz: 6452f0e220cf4f0911112ecc248910f001a067611cb4ba7aa30ce5983c05891e621be1e406e0eafc6efcbe078e517c05eee523644034cf686dce3e7783610e4f
6
+ metadata.gz: d01bc7b6b71ee1e1d6287f5b66ff075f10df202bd2abb69b566d91d89915a5c43c6e1645f7b55edeaa34808330b089689e08cc2cc4d85e31efad2abdbecfc61b
7
+ data.tar.gz: c423d5130794d5b5feef994b6b82a4a1aac9dea321352fe44106b6135a8c44cda8a5ebaa688f78c0689190bc0584a7a322146caaf93685daa2b5f1e2433a87d8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0.pre3
4
+
5
+ - (#11) Fix Rails database lifecycle and parallel coverage for pre3
6
+
3
7
  ## 0.2.0.pre2
4
8
 
5
9
  - Uses Rails' standard database tasks to manage worker test databases and
data/README.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  `rspec-multicore-rails` loads `rspec-multicore` and automatically isolates ActiveRecord connections for Rails test workers.
4
4
 
5
+ ## Installation
6
+
7
+ ```ruby
8
+ group :test do
9
+ gem "rspec-multicore-rails", "0.2.0.pre3"
10
+ end
11
+ ```
12
+
13
+ Normal `Bundler.require` loading requires no `require: false`, initializer, or
14
+ manual require. The adapter loads the matching core gem automatically.
15
+
5
16
  Worker 1 uses the base test database. Later workers use `_2`, `_3`, and so on;
6
17
  SQLite suffixes are placed before the extension. The adapter refuses to connect
7
18
  workers outside test and clears inherited connections before connecting.
@@ -11,8 +11,9 @@ module RSpec
11
11
  TEST_ENV = "test"
12
12
 
13
13
  def initialize
14
- @primary_config = ActiveRecord::Base.connection_db_config
14
+ @original_config = ActiveRecord::Base.connection_db_config
15
15
  @configs = test_configs
16
+ @primary_config = canonical_config(@original_config) || @configs.first || @original_config
16
17
  @configs << @primary_config unless @configs.include?(@primary_config)
17
18
  @base_databases = {}.compare_by_identity
18
19
  @configs.each { @base_databases[_1] = _1.database }
@@ -25,19 +26,24 @@ module RSpec
25
26
  ActiveRecord::Base.establish_connection(@primary_config)
26
27
  end
27
28
 
28
- def create_workers(name: nil) = each_worker_config(name:) { database_tasks.create(_1) }
29
+ def create_workers(name: nil) = preserve_connection { each_worker_config(name:) { database_tasks.create(_1) } }
29
30
 
30
31
  def purge_workers(name: nil)
31
- each_worker_config(name:) do |config|
32
- database_tasks.purge(config)
33
- rescue ActiveRecord::NoDatabaseError
34
- database_tasks.create(config)
32
+ preserve_connection do
33
+ each_worker_config(name:) do |config|
34
+ database_tasks.purge(config)
35
+ rescue ActiveRecord::NoDatabaseError
36
+ database_tasks.create(config)
37
+ end
35
38
  end
36
39
  end
37
40
 
38
41
  def load_schema_workers(name: nil)
39
- each_worker_config(name:) do |config|
40
- database_tasks.load_schema(config, schema_format(config))
42
+ preserve_connection do
43
+ each_worker_config(name:) do |config|
44
+ establish_connection(config)
45
+ database_tasks.load_schema(config, schema_format(config))
46
+ end
41
47
  end
42
48
  end
43
49
 
@@ -46,7 +52,7 @@ module RSpec
46
52
  load_schema_workers(name:)
47
53
  end
48
54
 
49
- def drop_workers(name: nil) = each_worker_config(name:) { database_tasks.drop(_1) }
55
+ def drop_workers(name: nil) = preserve_connection { each_worker_config(name:) { database_tasks.drop(_1) } }
50
56
 
51
57
  def workers = RSpec::Multicore.workers
52
58
 
@@ -67,6 +73,8 @@ module RSpec
67
73
  Array(configurations.configs_for(env_name: TEST_ENV, include_hidden: true))
68
74
  end
69
75
 
76
+ def canonical_config(config) = @configs.find { _1.env_name == config.env_name && _1.name == config.name }
77
+
70
78
  def task_configs(name: nil)
71
79
  @configs.select do |config|
72
80
  config.env_name == TEST_ENV && config.database_tasks? && (!name || config.name == name)
@@ -92,6 +100,17 @@ module RSpec
92
100
  def base_database(config) = @base_databases.fetch(config)
93
101
  def database_tasks = ActiveRecord::Tasks::DatabaseTasks
94
102
 
103
+ def preserve_connection
104
+ yield
105
+ ensure
106
+ establish_connection(@original_config)
107
+ end
108
+
109
+ def establish_connection(config)
110
+ handler = ActiveRecord::Base.connection_handler
111
+ handler.establish_connection(config, clobber: true)
112
+ end
113
+
95
114
  def schema_format(config)
96
115
  return config.schema_format if config.respond_to?(:schema_format)
97
116
 
@@ -3,7 +3,7 @@
3
3
  module RSpec
4
4
  module Multicore
5
5
  module Rails
6
- VERSION = "0.2.0.pre2"
6
+ VERSION = "0.2.0.pre3"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-multicore-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre2
4
+ version: 0.2.0.pre3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sveta Markovic
@@ -55,14 +55,14 @@ dependencies:
55
55
  requirements:
56
56
  - - '='
57
57
  - !ruby/object:Gem::Version
58
- version: 0.2.0.pre2
58
+ version: 0.2.0.pre3
59
59
  type: :runtime
60
60
  prerelease: false
61
61
  version_requirements: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - '='
64
64
  - !ruby/object:Gem::Version
65
- version: 0.2.0.pre2
65
+ version: 0.2.0.pre3
66
66
  - !ruby/object:Gem::Dependency
67
67
  name: rake
68
68
  requirement: !ruby/object:Gem::Requirement