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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +11 -0
- data/lib/rspec/multicore/rails/database_manager.rb +28 -9
- data/lib/rspec/multicore/rails/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3c3050617c4ec5b96ff57ac77a08a685e24c0a056d9c029464ec4f950d894369
|
|
4
|
+
data.tar.gz: f87be93f0ba0d16fd7b55200bd8a955ff9f334d06a327c2970701204998694ba
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d01bc7b6b71ee1e1d6287f5b66ff075f10df202bd2abb69b566d91d89915a5c43c6e1645f7b55edeaa34808330b089689e08cc2cc4d85e31efad2abdbecfc61b
|
|
7
|
+
data.tar.gz: c423d5130794d5b5feef994b6b82a4a1aac9dea321352fe44106b6135a8c44cda8a5ebaa688f78c0689190bc0584a7a322146caaf93685daa2b5f1e2433a87d8
|
data/CHANGELOG.md
CHANGED
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
|
-
@
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
40
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
65
|
+
version: 0.2.0.pre3
|
|
66
66
|
- !ruby/object:Gem::Dependency
|
|
67
67
|
name: rake
|
|
68
68
|
requirement: !ruby/object:Gem::Requirement
|