statesman 12.1.0 → 13.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/devcontainer.json +31 -0
  3. data/.devcontainer/docker-compose.yml +39 -0
  4. data/.github/workflows/tests.yml +42 -24
  5. data/.gitignore +1 -0
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +1 -4
  8. data/.rubocop_todo.yml +23 -38
  9. data/.ruby-version +1 -1
  10. data/CHANGELOG.md +31 -7
  11. data/Gemfile +15 -1
  12. data/README.md +47 -26
  13. data/docs/COMPATIBILITY.md +1 -1
  14. data/lib/generators/statesman/active_record_transition_generator.rb +4 -5
  15. data/lib/generators/statesman/generator_helpers.rb +28 -14
  16. data/lib/generators/statesman/migration_generator.rb +4 -8
  17. data/lib/generators/statesman/templates/active_record_transition_model.rb.erb +3 -3
  18. data/lib/generators/statesman/templates/create_migration.rb.erb +3 -2
  19. data/lib/generators/statesman/templates/update_migration.rb.erb +3 -2
  20. data/lib/statesman/adapters/active_record.rb +9 -5
  21. data/lib/statesman/adapters/active_record_transition.rb +6 -0
  22. data/lib/statesman/adapters/memory.rb +1 -1
  23. data/lib/statesman/adapters/memory_transition.rb +3 -1
  24. data/lib/statesman/exceptions.rb +2 -0
  25. data/lib/statesman/guard.rb +1 -1
  26. data/lib/statesman/machine.rb +16 -0
  27. data/lib/statesman/version.rb +1 -1
  28. data/spec/generators/statesman/active_record_transition_generator_spec.rb +18 -9
  29. data/spec/generators/statesman/migration_generator_spec.rb +20 -13
  30. data/spec/spec_helper.rb +1 -0
  31. data/spec/statesman/adapters/active_record_queries_spec.rb +2 -2
  32. data/spec/statesman/adapters/active_record_spec.rb +8 -6
  33. data/spec/statesman/adapters/memory_transition_spec.rb +4 -2
  34. data/spec/statesman/adapters/shared_examples.rb +4 -3
  35. data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +1 -1
  36. data/spec/statesman/exceptions_spec.rb +10 -0
  37. data/spec/statesman/machine_spec.rb +46 -12
  38. data/spec/support/active_record.rb +18 -2
  39. data/spec/support/generators_shared_examples.rb +2 -2
  40. data/statesman.gemspec +1 -15
  41. metadata +7 -202
@@ -32,7 +32,7 @@ class MyActiveRecordModel < ActiveRecord::Base
32
32
 
33
33
  include Statesman::Adapters::ActiveRecordQueries[
34
34
  transition_class: MyActiveRecordModelTransition,
35
- initial_state: :initial
35
+ initial_state: :initial,
36
36
  ]
37
37
 
38
38
  def state_machine
@@ -70,6 +70,7 @@ end
70
70
  class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
71
71
  def change
72
72
  create_table :my_active_record_model_transitions do |t|
73
+ t.string :from_state
73
74
  t.string :to_state
74
75
  t.integer :my_active_record_model_id
75
76
  t.integer :sort_key
@@ -162,7 +163,7 @@ class SecondaryActiveRecordModel < SecondaryRecord
162
163
 
163
164
  include Statesman::Adapters::ActiveRecordQueries[
164
165
  transition_class: SecondaryActiveRecordModelTransition,
165
- initial_state: :initial
166
+ initial_state: :initial,
166
167
  ]
167
168
 
168
169
  def state_machine
@@ -189,6 +190,7 @@ end
189
190
  class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
190
191
  def change
191
192
  create_table :other_active_record_model_transitions do |t|
193
+ t.string :from_state
192
194
  t.string :to_state
193
195
  t.integer :other_active_record_model_id
194
196
  t.integer :sort_key
@@ -284,6 +286,7 @@ end
284
286
  class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
285
287
  def change
286
288
  create_table :my_namespace_my_active_record_model_transitions do |t|
289
+ t.string :from_state
287
290
  t.string :to_state
288
291
  t.integer :my_active_record_model_id
289
292
  t.integer :sort_key
@@ -411,3 +414,16 @@ class CreateStiActiveRecordModelTransitionMigration < MIGRATION_CLASS
411
414
  end
412
415
  end
413
416
  end
417
+
418
+ def postgres?
419
+ ActiveRecord::Base.connection.adapter_name.match?(/postgres/i)
420
+ end
421
+
422
+ def mysql?
423
+ ActiveRecord::Base.connection.adapter_name.match?(/mysql/i) ||
424
+ ActiveRecord::Base.connection.adapter_name.match?(/trilogy/i)
425
+ end
426
+
427
+ def sqlite?
428
+ ActiveRecord::Base.connection.adapter_name.match?(/sqlite/i)
429
+ end
@@ -12,8 +12,8 @@ shared_examples "a generator" do
12
12
 
13
13
  let(:gen) { generator %w[Yummy::Bacon Yummy::BaconTransition] }
14
14
 
15
- it "invokes create_model_file method" do
16
- expect(gen).to receive(:create_model_file)
15
+ it "invokes create_migration_file method" do
16
+ expect(gen).to receive(:create_migration_file)
17
17
  gen.invoke_all
18
18
  end
19
19
 
data/statesman.gemspec CHANGED
@@ -20,21 +20,7 @@ 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 = ">= 3.0"
24
-
25
- spec.add_development_dependency "ammeter", "~> 1.1"
26
- spec.add_development_dependency "bundler", "~> 2"
27
- spec.add_development_dependency "gc_ruboconfig", "~> 4.4.1"
28
- spec.add_development_dependency "mysql2", ">= 0.4", "< 0.6"
29
- spec.add_development_dependency "pg", ">= 0.18", "<= 1.6"
30
- spec.add_development_dependency "rails", ">= 5.2"
31
- spec.add_development_dependency "rake", "~> 13.1.0"
32
- spec.add_development_dependency "rspec", "~> 3.1"
33
- spec.add_development_dependency "rspec-github", "~> 2.4.0"
34
- spec.add_development_dependency "rspec-its", "~> 1.1"
35
- spec.add_development_dependency "rspec-rails", "~> 6.0"
36
- spec.add_development_dependency "sqlite3", "~> 1.7.0"
37
- spec.add_development_dependency "timecop", "~> 0.9.1"
23
+ spec.required_ruby_version = ">= 3.2"
38
24
 
39
25
  spec.metadata = {
40
26
  "bug_tracker_uri" => "#{GITHUB_URL}/issues",
metadata CHANGED
@@ -1,209 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statesman
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.1.0
4
+ version: 13.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-01-09 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: ammeter
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.1'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.1'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2'
41
- - !ruby/object:Gem::Dependency
42
- name: gc_ruboconfig
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 4.4.1
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 4.4.1
55
- - !ruby/object:Gem::Dependency
56
- name: mysql2
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0.4'
62
- - - "<"
63
- - !ruby/object:Gem::Version
64
- version: '0.6'
65
- type: :development
66
- prerelease: false
67
- version_requirements: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: '0.4'
72
- - - "<"
73
- - !ruby/object:Gem::Version
74
- version: '0.6'
75
- - !ruby/object:Gem::Dependency
76
- name: pg
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0.18'
82
- - - "<="
83
- - !ruby/object:Gem::Version
84
- version: '1.6'
85
- type: :development
86
- prerelease: false
87
- version_requirements: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: '0.18'
92
- - - "<="
93
- - !ruby/object:Gem::Version
94
- version: '1.6'
95
- - !ruby/object:Gem::Dependency
96
- name: rails
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: '5.2'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- version: '5.2'
109
- - !ruby/object:Gem::Dependency
110
- name: rake
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: 13.1.0
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: 13.1.0
123
- - !ruby/object:Gem::Dependency
124
- name: rspec
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '3.1'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '3.1'
137
- - !ruby/object:Gem::Dependency
138
- name: rspec-github
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - "~>"
142
- - !ruby/object:Gem::Version
143
- version: 2.4.0
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - "~>"
149
- - !ruby/object:Gem::Version
150
- version: 2.4.0
151
- - !ruby/object:Gem::Dependency
152
- name: rspec-its
153
- requirement: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - "~>"
156
- - !ruby/object:Gem::Version
157
- version: '1.1'
158
- type: :development
159
- prerelease: false
160
- version_requirements: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - "~>"
163
- - !ruby/object:Gem::Version
164
- version: '1.1'
165
- - !ruby/object:Gem::Dependency
166
- name: rspec-rails
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: '6.0'
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - "~>"
177
- - !ruby/object:Gem::Version
178
- version: '6.0'
179
- - !ruby/object:Gem::Dependency
180
- name: sqlite3
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - "~>"
184
- - !ruby/object:Gem::Version
185
- version: 1.7.0
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - "~>"
191
- - !ruby/object:Gem::Version
192
- version: 1.7.0
193
- - !ruby/object:Gem::Dependency
194
- name: timecop
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - "~>"
198
- - !ruby/object:Gem::Version
199
- version: 0.9.1
200
- type: :development
201
- prerelease: false
202
- version_requirements: !ruby/object:Gem::Requirement
203
- requirements:
204
- - - "~>"
205
- - !ruby/object:Gem::Version
206
- version: 0.9.1
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
207
12
  description: A statesman-like state machine library
208
13
  email:
209
14
  - developers@gocardless.com
@@ -211,6 +16,8 @@ executables: []
211
16
  extensions: []
212
17
  extra_rdoc_files: []
213
18
  files:
19
+ - ".devcontainer/devcontainer.json"
20
+ - ".devcontainer/docker-compose.yml"
214
21
  - ".github/dependabot.yml"
215
22
  - ".github/workflows/tests.yml"
216
23
  - ".gitignore"
@@ -281,7 +88,6 @@ metadata:
281
88
  homepage_uri: https://github.com/gocardless/statesman
282
89
  source_code_uri: https://github.com/gocardless/statesman
283
90
  rubygems_mfa_required: 'true'
284
- post_install_message:
285
91
  rdoc_options: []
286
92
  require_paths:
287
93
  - lib
@@ -289,15 +95,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
289
95
  requirements:
290
96
  - - ">="
291
97
  - !ruby/object:Gem::Version
292
- version: '3.0'
98
+ version: '3.2'
293
99
  required_rubygems_version: !ruby/object:Gem::Requirement
294
100
  requirements:
295
101
  - - ">="
296
102
  - !ruby/object:Gem::Version
297
103
  version: '0'
298
104
  requirements: []
299
- rubygems_version: 3.4.10
300
- signing_key:
105
+ rubygems_version: 3.6.9
301
106
  specification_version: 4
302
107
  summary: A statesman-like state machine library
303
108
  test_files: []