statesman 11.0.0 → 12.1.0

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +7 -3
  3. data/.gitignore +0 -3
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +1 -1
  6. data/.ruby-version +1 -1
  7. data/CHANGELOG.md +174 -43
  8. data/CONTRIBUTING.md +14 -13
  9. data/README.md +120 -62
  10. data/docs/COMPATIBILITY.md +2 -2
  11. data/lib/generators/statesman/generator_helpers.rb +1 -1
  12. data/lib/statesman/adapters/active_record.rb +24 -26
  13. data/lib/statesman/adapters/active_record_queries.rb +2 -2
  14. data/lib/statesman/callback.rb +2 -2
  15. data/lib/statesman/config.rb +3 -10
  16. data/lib/statesman/machine.rb +8 -0
  17. data/lib/statesman/version.rb +1 -1
  18. data/lib/statesman.rb +3 -5
  19. data/lib/tasks/statesman.rake +2 -2
  20. data/spec/generators/statesman/active_record_transition_generator_spec.rb +7 -1
  21. data/spec/generators/statesman/migration_generator_spec.rb +5 -1
  22. data/spec/spec_helper.rb +33 -5
  23. data/spec/statesman/adapters/active_record_queries_spec.rb +0 -2
  24. data/spec/statesman/adapters/active_record_spec.rb +48 -13
  25. data/spec/statesman/adapters/active_record_transition_spec.rb +0 -1
  26. data/spec/statesman/adapters/memory_spec.rb +0 -1
  27. data/spec/statesman/adapters/memory_transition_spec.rb +0 -1
  28. data/spec/statesman/adapters/shared_examples.rb +0 -2
  29. data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +0 -2
  30. data/spec/statesman/callback_spec.rb +0 -2
  31. data/spec/statesman/config_spec.rb +0 -2
  32. data/spec/statesman/exceptions_spec.rb +0 -2
  33. data/spec/statesman/guard_spec.rb +0 -2
  34. data/spec/statesman/machine_spec.rb +71 -2
  35. data/spec/statesman/utils_spec.rb +0 -2
  36. data/spec/support/active_record.rb +50 -8
  37. data/spec/support/exactly_query_databases.rb +35 -0
  38. data/statesman.gemspec +4 -4
  39. metadata +11 -9
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # `expected_dbs` should be a Hash of the form:
4
+ # {
5
+ # primary: [:writing, :reading],
6
+ # replica: [:reading],
7
+ # }
8
+ RSpec::Matchers.define :exactly_query_databases do |expected_dbs|
9
+ match do |block|
10
+ @expected_dbs = expected_dbs.transform_values(&:to_set).with_indifferent_access
11
+ @actual_dbs = Hash.new { |h, k| h[k] = Set.new }.with_indifferent_access
12
+
13
+ ActiveSupport::Notifications.
14
+ subscribe("sql.active_record") do |_name, _start, _finish, _id, payload|
15
+ pool = payload.fetch(:connection).pool
16
+
17
+ next if pool.is_a?(ActiveRecord::ConnectionAdapters::NullPool)
18
+
19
+ name = pool.db_config.name
20
+ role = pool.role
21
+
22
+ @actual_dbs[name] << role
23
+ end
24
+
25
+ block.call
26
+
27
+ @actual_dbs == @expected_dbs
28
+ end
29
+
30
+ failure_message do |_block|
31
+ "expected to query exactly #{@expected_dbs}, but queried #{@actual_dbs}"
32
+ end
33
+
34
+ supports_block_expectations
35
+ end
data/statesman.gemspec CHANGED
@@ -20,20 +20,20 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.required_ruby_version = ">= 2.7"
23
+ spec.required_ruby_version = ">= 3.0"
24
24
 
25
25
  spec.add_development_dependency "ammeter", "~> 1.1"
26
26
  spec.add_development_dependency "bundler", "~> 2"
27
- spec.add_development_dependency "gc_ruboconfig", "~> 4.3.0"
27
+ spec.add_development_dependency "gc_ruboconfig", "~> 4.4.1"
28
28
  spec.add_development_dependency "mysql2", ">= 0.4", "< 0.6"
29
29
  spec.add_development_dependency "pg", ">= 0.18", "<= 1.6"
30
30
  spec.add_development_dependency "rails", ">= 5.2"
31
- spec.add_development_dependency "rake", "~> 13.0.0"
31
+ spec.add_development_dependency "rake", "~> 13.1.0"
32
32
  spec.add_development_dependency "rspec", "~> 3.1"
33
33
  spec.add_development_dependency "rspec-github", "~> 2.4.0"
34
34
  spec.add_development_dependency "rspec-its", "~> 1.1"
35
35
  spec.add_development_dependency "rspec-rails", "~> 6.0"
36
- spec.add_development_dependency "sqlite3", "~> 1.6.1"
36
+ spec.add_development_dependency "sqlite3", "~> 1.7.0"
37
37
  spec.add_development_dependency "timecop", "~> 0.9.1"
38
38
 
39
39
  spec.metadata = {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statesman
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.0.0
4
+ version: 12.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-03 00:00:00.000000000 Z
11
+ date: 2024-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ammeter
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 4.3.0
47
+ version: 4.4.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 4.3.0
54
+ version: 4.4.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mysql2
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +112,14 @@ dependencies:
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: 13.0.0
115
+ version: 13.1.0
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: 13.0.0
122
+ version: 13.1.0
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: rspec
125
125
  requirement: !ruby/object:Gem::Requirement
@@ -182,14 +182,14 @@ dependencies:
182
182
  requirements:
183
183
  - - "~>"
184
184
  - !ruby/object:Gem::Version
185
- version: 1.6.1
185
+ version: 1.7.0
186
186
  type: :development
187
187
  prerelease: false
188
188
  version_requirements: !ruby/object:Gem::Requirement
189
189
  requirements:
190
190
  - - "~>"
191
191
  - !ruby/object:Gem::Version
192
- version: 1.6.1
192
+ version: 1.7.0
193
193
  - !ruby/object:Gem::Dependency
194
194
  name: timecop
195
195
  requirement: !ruby/object:Gem::Requirement
@@ -214,6 +214,7 @@ files:
214
214
  - ".github/dependabot.yml"
215
215
  - ".github/workflows/tests.yml"
216
216
  - ".gitignore"
217
+ - ".rspec"
217
218
  - ".rubocop.yml"
218
219
  - ".rubocop_todo.yml"
219
220
  - ".ruby-version"
@@ -267,6 +268,7 @@ files:
267
268
  - spec/statesman/machine_spec.rb
268
269
  - spec/statesman/utils_spec.rb
269
270
  - spec/support/active_record.rb
271
+ - spec/support/exactly_query_databases.rb
270
272
  - spec/support/generators_shared_examples.rb
271
273
  - statesman.gemspec
272
274
  homepage: https://github.com/gocardless/statesman
@@ -287,7 +289,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
287
289
  requirements:
288
290
  - - ">="
289
291
  - !ruby/object:Gem::Version
290
- version: '2.7'
292
+ version: '3.0'
291
293
  required_rubygems_version: !ruby/object:Gem::Requirement
292
294
  requirements:
293
295
  - - ">="