statesman 7.4.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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +7 -0
- data/.github/workflows/tests.yml +112 -0
- data/.gitignore +65 -15
- data/.rspec +1 -0
- data/.rubocop.yml +14 -1
- data/.rubocop_todo.yml +37 -28
- data/.ruby-version +1 -0
- data/CHANGELOG.md +262 -41
- data/CONTRIBUTING.md +23 -4
- data/Gemfile +4 -6
- data/README.md +243 -43
- data/docs/COMPATIBILITY.md +2 -2
- data/lib/generators/statesman/active_record_transition_generator.rb +1 -1
- data/lib/generators/statesman/generator_helpers.rb +12 -4
- data/lib/statesman/adapters/active_record.rb +84 -55
- data/lib/statesman/adapters/active_record_queries.rb +19 -7
- data/lib/statesman/adapters/active_record_transition.rb +5 -1
- data/lib/statesman/adapters/memory.rb +5 -1
- data/lib/statesman/adapters/type_safe_active_record_queries.rb +21 -0
- data/lib/statesman/callback.rb +2 -2
- data/lib/statesman/config.rb +3 -10
- data/lib/statesman/exceptions.rb +13 -7
- data/lib/statesman/guard.rb +1 -1
- data/lib/statesman/machine.rb +68 -0
- data/lib/statesman/version.rb +1 -1
- data/lib/statesman.rb +5 -5
- data/lib/tasks/statesman.rake +5 -5
- data/spec/generators/statesman/active_record_transition_generator_spec.rb +7 -1
- data/spec/generators/statesman/migration_generator_spec.rb +5 -1
- data/spec/spec_helper.rb +44 -7
- data/spec/statesman/adapters/active_record_queries_spec.rb +34 -12
- data/spec/statesman/adapters/active_record_spec.rb +176 -51
- data/spec/statesman/adapters/active_record_transition_spec.rb +5 -2
- data/spec/statesman/adapters/memory_spec.rb +0 -1
- data/spec/statesman/adapters/memory_transition_spec.rb +0 -1
- data/spec/statesman/adapters/shared_examples.rb +3 -4
- data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +206 -0
- data/spec/statesman/callback_spec.rb +0 -2
- data/spec/statesman/config_spec.rb +0 -2
- data/spec/statesman/exceptions_spec.rb +17 -4
- data/spec/statesman/guard_spec.rb +0 -2
- data/spec/statesman/machine_spec.rb +252 -15
- data/spec/statesman/utils_spec.rb +0 -2
- data/spec/support/active_record.rb +156 -24
- data/spec/support/exactly_query_databases.rb +35 -0
- data/statesman.gemspec +9 -10
- metadata +32 -59
- data/.circleci/config.yml +0 -187
@@ -20,10 +20,21 @@ class MyStateMachine
|
|
20
20
|
transition from: :failed, to: :initial
|
21
21
|
end
|
22
22
|
|
23
|
+
class MyActiveRecordModelTransition < ActiveRecord::Base
|
24
|
+
include Statesman::Adapters::ActiveRecordTransition
|
25
|
+
|
26
|
+
belongs_to :my_active_record_model
|
27
|
+
end
|
28
|
+
|
23
29
|
class MyActiveRecordModel < ActiveRecord::Base
|
24
30
|
has_many :my_active_record_model_transitions, autosave: false
|
25
31
|
alias_method :transitions, :my_active_record_model_transitions
|
26
32
|
|
33
|
+
include Statesman::Adapters::ActiveRecordQueries[
|
34
|
+
transition_class: MyActiveRecordModelTransition,
|
35
|
+
initial_state: :initial
|
36
|
+
]
|
37
|
+
|
27
38
|
def state_machine
|
28
39
|
@state_machine ||= MyStateMachine.new(
|
29
40
|
self, transition_class: MyActiveRecordModelTransition
|
@@ -35,18 +46,15 @@ class MyActiveRecordModel < ActiveRecord::Base
|
|
35
46
|
end
|
36
47
|
end
|
37
48
|
|
38
|
-
class MyActiveRecordModelTransition < ActiveRecord::Base
|
39
|
-
include Statesman::Adapters::ActiveRecordTransition
|
40
|
-
|
41
|
-
belongs_to :my_active_record_model
|
42
|
-
serialize :metadata, JSON
|
43
|
-
end
|
44
|
-
|
45
49
|
class MyActiveRecordModelTransitionWithoutInclude < ActiveRecord::Base
|
46
50
|
self.table_name = "my_active_record_model_transitions"
|
47
51
|
|
48
52
|
belongs_to :my_active_record_model
|
49
|
-
|
53
|
+
if ::ActiveRecord.gem_version >= Gem::Version.new("7.1")
|
54
|
+
serialize :metadata, coder: JSON
|
55
|
+
else
|
56
|
+
serialize :metadata, JSON
|
57
|
+
end
|
50
58
|
end
|
51
59
|
|
52
60
|
class CreateMyActiveRecordModelMigration < MIGRATION_CLASS
|
@@ -59,7 +67,6 @@ class CreateMyActiveRecordModelMigration < MIGRATION_CLASS
|
|
59
67
|
end
|
60
68
|
|
61
69
|
# TODO: make this a module we can extend from the app? Or a generator?
|
62
|
-
# rubocop:disable MethodLength, Metrics/AbcSize
|
63
70
|
class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
64
71
|
def change
|
65
72
|
create_table :my_active_record_model_transitions do |t|
|
@@ -74,7 +81,7 @@ class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
74
81
|
t.text :metadata, default: "{}"
|
75
82
|
end
|
76
83
|
|
77
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
84
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
78
85
|
t.boolean :most_recent, default: true, null: false
|
79
86
|
else
|
80
87
|
t.boolean :most_recent, default: true
|
@@ -91,7 +98,7 @@ class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
91
98
|
%i[my_active_record_model_id sort_key],
|
92
99
|
unique: true, name: "sort_key_index"
|
93
100
|
|
94
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
101
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
95
102
|
add_index :my_active_record_model_transitions,
|
96
103
|
%i[my_active_record_model_id most_recent],
|
97
104
|
unique: true,
|
@@ -105,7 +112,6 @@ class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
105
112
|
end
|
106
113
|
end
|
107
114
|
end
|
108
|
-
# rubocop:enable MethodLength, Metrics/AbcSize
|
109
115
|
|
110
116
|
class OtherActiveRecordModel < ActiveRecord::Base
|
111
117
|
has_many :other_active_record_model_transitions, autosave: false
|
@@ -126,7 +132,48 @@ class OtherActiveRecordModelTransition < ActiveRecord::Base
|
|
126
132
|
include Statesman::Adapters::ActiveRecordTransition
|
127
133
|
|
128
134
|
belongs_to :other_active_record_model
|
129
|
-
|
135
|
+
end
|
136
|
+
|
137
|
+
class SecondaryRecord < ActiveRecord::Base
|
138
|
+
self.abstract_class = true
|
139
|
+
|
140
|
+
connects_to database: { writing: :secondary, reading: :secondary }
|
141
|
+
end
|
142
|
+
|
143
|
+
class SecondaryActiveRecordModelTransition < SecondaryRecord
|
144
|
+
self.table_name = "my_active_record_model_transitions"
|
145
|
+
|
146
|
+
include Statesman::Adapters::ActiveRecordTransition
|
147
|
+
|
148
|
+
belongs_to :my_active_record_model,
|
149
|
+
class_name: "SecondaryActiveRecordModel",
|
150
|
+
foreign_key: "my_active_record_model_transition_id"
|
151
|
+
end
|
152
|
+
|
153
|
+
class SecondaryActiveRecordModel < SecondaryRecord
|
154
|
+
self.table_name = "my_active_record_models"
|
155
|
+
|
156
|
+
has_many :my_active_record_model_transitions,
|
157
|
+
class_name: "SecondaryActiveRecordModelTransition",
|
158
|
+
foreign_key: "my_active_record_model_id",
|
159
|
+
autosave: false
|
160
|
+
|
161
|
+
alias_method :transitions, :my_active_record_model_transitions
|
162
|
+
|
163
|
+
include Statesman::Adapters::ActiveRecordQueries[
|
164
|
+
transition_class: SecondaryActiveRecordModelTransition,
|
165
|
+
initial_state: :initial
|
166
|
+
]
|
167
|
+
|
168
|
+
def state_machine
|
169
|
+
@state_machine ||= MyStateMachine.new(
|
170
|
+
self, transition_class: SecondaryActiveRecordModelTransition
|
171
|
+
)
|
172
|
+
end
|
173
|
+
|
174
|
+
def metadata
|
175
|
+
super || {}
|
176
|
+
end
|
130
177
|
end
|
131
178
|
|
132
179
|
class CreateOtherActiveRecordModelMigration < MIGRATION_CLASS
|
@@ -139,7 +186,6 @@ class CreateOtherActiveRecordModelMigration < MIGRATION_CLASS
|
|
139
186
|
end
|
140
187
|
end
|
141
188
|
|
142
|
-
# rubocop:disable MethodLength
|
143
189
|
class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
144
190
|
def change
|
145
191
|
create_table :other_active_record_model_transitions do |t|
|
@@ -154,7 +200,7 @@ class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
154
200
|
t.text :metadata, default: "{}"
|
155
201
|
end
|
156
202
|
|
157
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
203
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
158
204
|
t.boolean :most_recent, default: true, null: false
|
159
205
|
else
|
160
206
|
t.boolean :most_recent, default: true
|
@@ -167,23 +213,22 @@ class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
167
213
|
%i[other_active_record_model_id sort_key],
|
168
214
|
unique: true, name: "other_sort_key_index"
|
169
215
|
|
170
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
216
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
171
217
|
add_index :other_active_record_model_transitions,
|
172
218
|
%i[other_active_record_model_id most_recent],
|
173
219
|
unique: true,
|
174
220
|
where: "most_recent",
|
175
|
-
name: "index_other_active_record_model_transitions_"\
|
221
|
+
name: "index_other_active_record_model_transitions_" \
|
176
222
|
"parent_latest"
|
177
223
|
else
|
178
224
|
add_index :other_active_record_model_transitions,
|
179
225
|
%i[other_active_record_model_id most_recent],
|
180
226
|
unique: true,
|
181
|
-
name: "index_other_active_record_model_transitions_"\
|
227
|
+
name: "index_other_active_record_model_transitions_" \
|
182
228
|
"parent_latest"
|
183
229
|
end
|
184
230
|
end
|
185
231
|
end
|
186
|
-
# rubocop:enable MethodLength
|
187
232
|
|
188
233
|
class DropMostRecentColumn < MIGRATION_CLASS
|
189
234
|
def change
|
@@ -220,7 +265,6 @@ module MyNamespace
|
|
220
265
|
|
221
266
|
belongs_to :my_active_record_model,
|
222
267
|
class_name: "MyNamespace::MyActiveRecordModel"
|
223
|
-
serialize :metadata, JSON
|
224
268
|
|
225
269
|
def self.table_name_prefix
|
226
270
|
"my_namespace_"
|
@@ -237,7 +281,6 @@ class CreateNamespacedARModelMigration < MIGRATION_CLASS
|
|
237
281
|
end
|
238
282
|
end
|
239
283
|
|
240
|
-
# rubocop:disable MethodLength
|
241
284
|
class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
242
285
|
def change
|
243
286
|
create_table :my_namespace_my_active_record_model_transitions do |t|
|
@@ -252,7 +295,7 @@ class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
|
252
295
|
t.text :metadata, default: "{}"
|
253
296
|
end
|
254
297
|
|
255
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
298
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
256
299
|
t.boolean :most_recent, default: true, null: false
|
257
300
|
else
|
258
301
|
t.boolean :most_recent, default: true
|
@@ -264,7 +307,7 @@ class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
|
264
307
|
add_index :my_namespace_my_active_record_model_transitions, :sort_key,
|
265
308
|
unique: true, name: "my_namespaced_key"
|
266
309
|
|
267
|
-
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
310
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
268
311
|
add_index :my_namespace_my_active_record_model_transitions,
|
269
312
|
%i[my_active_record_model_id most_recent],
|
270
313
|
unique: true,
|
@@ -277,5 +320,94 @@ class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
|
277
320
|
name: "index_namespace_model_transitions_parent_latest"
|
278
321
|
end
|
279
322
|
end
|
280
|
-
|
323
|
+
end
|
324
|
+
|
325
|
+
class StiActiveRecordModel < ActiveRecord::Base
|
326
|
+
has_many :sti_a_active_record_model_transitions, autosave: false
|
327
|
+
has_many :sti_b_active_record_model_transitions, autosave: false
|
328
|
+
|
329
|
+
def state_machine_a
|
330
|
+
@state_machine_a ||= MyStateMachine.new(
|
331
|
+
self, transition_class: StiAActiveRecordModelTransition
|
332
|
+
)
|
333
|
+
end
|
334
|
+
|
335
|
+
def state_machine_b
|
336
|
+
@state_machine_b ||= MyStateMachine.new(
|
337
|
+
self, transition_class: StiBActiveRecordModelTransition
|
338
|
+
)
|
339
|
+
end
|
340
|
+
|
341
|
+
def metadata
|
342
|
+
super || {}
|
343
|
+
end
|
344
|
+
|
345
|
+
def reload(*)
|
346
|
+
state_machine_a.reset
|
347
|
+
state_machine_b.reset
|
348
|
+
super
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
class StiActiveRecordModelTransition < ActiveRecord::Base
|
353
|
+
include Statesman::Adapters::ActiveRecordTransition
|
354
|
+
|
355
|
+
belongs_to :sti_active_record_model
|
356
|
+
end
|
357
|
+
|
358
|
+
class StiAActiveRecordModelTransition < StiActiveRecordModelTransition
|
359
|
+
end
|
360
|
+
|
361
|
+
class StiBActiveRecordModelTransition < StiActiveRecordModelTransition
|
362
|
+
end
|
363
|
+
|
364
|
+
class CreateStiActiveRecordModelMigration < MIGRATION_CLASS
|
365
|
+
def change
|
366
|
+
create_table :sti_active_record_models do |t|
|
367
|
+
t.timestamps null: false
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
class CreateStiActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
373
|
+
def change
|
374
|
+
create_table :sti_active_record_model_transitions do |t|
|
375
|
+
t.string :to_state
|
376
|
+
t.integer :sti_active_record_model_id
|
377
|
+
t.integer :sort_key
|
378
|
+
t.string :type
|
379
|
+
|
380
|
+
# MySQL doesn't allow default values on text fields
|
381
|
+
if ActiveRecord::Base.connection.adapter_name == "Mysql2"
|
382
|
+
t.text :metadata
|
383
|
+
else
|
384
|
+
t.text :metadata, default: "{}"
|
385
|
+
end
|
386
|
+
|
387
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
388
|
+
t.boolean :most_recent, default: true, null: false
|
389
|
+
else
|
390
|
+
t.boolean :most_recent, default: true
|
391
|
+
end
|
392
|
+
|
393
|
+
t.timestamps null: false
|
394
|
+
end
|
395
|
+
|
396
|
+
add_index :sti_active_record_model_transitions,
|
397
|
+
%i[type sti_active_record_model_id sort_key],
|
398
|
+
unique: true, name: "sti_sort_key_index"
|
399
|
+
|
400
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?(ActiveRecord::Base)
|
401
|
+
add_index :sti_active_record_model_transitions,
|
402
|
+
%i[type sti_active_record_model_id most_recent],
|
403
|
+
unique: true,
|
404
|
+
where: "most_recent",
|
405
|
+
name: "index_sti_active_record_model_transitions_parent_latest"
|
406
|
+
else
|
407
|
+
add_index :sti_active_record_model_transitions,
|
408
|
+
%i[type sti_active_record_model_id most_recent],
|
409
|
+
unique: true,
|
410
|
+
name: "index_sti_active_record_model_transitions_parent_latest"
|
411
|
+
end
|
412
|
+
end
|
281
413
|
end
|
@@ -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
@@ -18,24 +18,22 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
21
|
spec.require_paths = ["lib"]
|
23
22
|
|
24
|
-
spec.required_ruby_version = ">=
|
23
|
+
spec.required_ruby_version = ">= 3.0"
|
25
24
|
|
26
25
|
spec.add_development_dependency "ammeter", "~> 1.1"
|
27
|
-
spec.add_development_dependency "bundler", "~> 2
|
28
|
-
spec.add_development_dependency "gc_ruboconfig", "~>
|
26
|
+
spec.add_development_dependency "bundler", "~> 2"
|
27
|
+
spec.add_development_dependency "gc_ruboconfig", "~> 4.4.1"
|
29
28
|
spec.add_development_dependency "mysql2", ">= 0.4", "< 0.6"
|
30
|
-
spec.add_development_dependency "pg", ">= 0.18", "<= 1.
|
31
|
-
spec.add_development_dependency "pry"
|
29
|
+
spec.add_development_dependency "pg", ">= 0.18", "<= 1.6"
|
32
30
|
spec.add_development_dependency "rails", ">= 5.2"
|
33
|
-
spec.add_development_dependency "rake", "~> 13.
|
31
|
+
spec.add_development_dependency "rake", "~> 13.1.0"
|
34
32
|
spec.add_development_dependency "rspec", "~> 3.1"
|
33
|
+
spec.add_development_dependency "rspec-github", "~> 2.4.0"
|
35
34
|
spec.add_development_dependency "rspec-its", "~> 1.1"
|
36
|
-
spec.add_development_dependency "rspec-rails", "~>
|
37
|
-
spec.add_development_dependency "
|
38
|
-
spec.add_development_dependency "sqlite3", "~> 1.4.2"
|
35
|
+
spec.add_development_dependency "rspec-rails", "~> 6.0"
|
36
|
+
spec.add_development_dependency "sqlite3", "~> 1.7.0"
|
39
37
|
spec.add_development_dependency "timecop", "~> 0.9.1"
|
40
38
|
|
41
39
|
spec.metadata = {
|
@@ -44,5 +42,6 @@ Gem::Specification.new do |spec|
|
|
44
42
|
"documentation_uri" => "#{GITHUB_URL}/blob/master/README.md",
|
45
43
|
"homepage_uri" => GITHUB_URL,
|
46
44
|
"source_code_uri" => GITHUB_URL,
|
45
|
+
"rubygems_mfa_required" => "true",
|
47
46
|
}
|
48
47
|
end
|
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:
|
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:
|
11
|
+
date: 2024-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ammeter
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2
|
33
|
+
version: '2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2
|
40
|
+
version: '2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: gc_ruboconfig
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
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:
|
54
|
+
version: 4.4.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mysql2
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
version: '0.18'
|
82
82
|
- - "<="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: '1.
|
84
|
+
version: '1.6'
|
85
85
|
type: :development
|
86
86
|
prerelease: false
|
87
87
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -91,21 +91,7 @@ dependencies:
|
|
91
91
|
version: '0.18'
|
92
92
|
- - "<="
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: '1.
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: pry
|
97
|
-
requirement: !ruby/object:Gem::Requirement
|
98
|
-
requirements:
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
requirements:
|
106
|
-
- - ">="
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
version: '0'
|
94
|
+
version: '1.6'
|
109
95
|
- !ruby/object:Gem::Dependency
|
110
96
|
name: rails
|
111
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,14 +112,14 @@ dependencies:
|
|
126
112
|
requirements:
|
127
113
|
- - "~>"
|
128
114
|
- !ruby/object:Gem::Version
|
129
|
-
version: 13.
|
115
|
+
version: 13.1.0
|
130
116
|
type: :development
|
131
117
|
prerelease: false
|
132
118
|
version_requirements: !ruby/object:Gem::Requirement
|
133
119
|
requirements:
|
134
120
|
- - "~>"
|
135
121
|
- !ruby/object:Gem::Version
|
136
|
-
version: 13.
|
122
|
+
version: 13.1.0
|
137
123
|
- !ruby/object:Gem::Dependency
|
138
124
|
name: rspec
|
139
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,61 +135,61 @@ dependencies:
|
|
149
135
|
- !ruby/object:Gem::Version
|
150
136
|
version: '3.1'
|
151
137
|
- !ruby/object:Gem::Dependency
|
152
|
-
name: rspec-
|
138
|
+
name: rspec-github
|
153
139
|
requirement: !ruby/object:Gem::Requirement
|
154
140
|
requirements:
|
155
141
|
- - "~>"
|
156
142
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
143
|
+
version: 2.4.0
|
158
144
|
type: :development
|
159
145
|
prerelease: false
|
160
146
|
version_requirements: !ruby/object:Gem::Requirement
|
161
147
|
requirements:
|
162
148
|
- - "~>"
|
163
149
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
150
|
+
version: 2.4.0
|
165
151
|
- !ruby/object:Gem::Dependency
|
166
|
-
name: rspec-
|
152
|
+
name: rspec-its
|
167
153
|
requirement: !ruby/object:Gem::Requirement
|
168
154
|
requirements:
|
169
155
|
- - "~>"
|
170
156
|
- !ruby/object:Gem::Version
|
171
|
-
version: '
|
157
|
+
version: '1.1'
|
172
158
|
type: :development
|
173
159
|
prerelease: false
|
174
160
|
version_requirements: !ruby/object:Gem::Requirement
|
175
161
|
requirements:
|
176
162
|
- - "~>"
|
177
163
|
- !ruby/object:Gem::Version
|
178
|
-
version: '
|
164
|
+
version: '1.1'
|
179
165
|
- !ruby/object:Gem::Dependency
|
180
|
-
name:
|
166
|
+
name: rspec-rails
|
181
167
|
requirement: !ruby/object:Gem::Requirement
|
182
168
|
requirements:
|
183
169
|
- - "~>"
|
184
170
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
171
|
+
version: '6.0'
|
186
172
|
type: :development
|
187
173
|
prerelease: false
|
188
174
|
version_requirements: !ruby/object:Gem::Requirement
|
189
175
|
requirements:
|
190
176
|
- - "~>"
|
191
177
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
178
|
+
version: '6.0'
|
193
179
|
- !ruby/object:Gem::Dependency
|
194
180
|
name: sqlite3
|
195
181
|
requirement: !ruby/object:Gem::Requirement
|
196
182
|
requirements:
|
197
183
|
- - "~>"
|
198
184
|
- !ruby/object:Gem::Version
|
199
|
-
version: 1.
|
185
|
+
version: 1.7.0
|
200
186
|
type: :development
|
201
187
|
prerelease: false
|
202
188
|
version_requirements: !ruby/object:Gem::Requirement
|
203
189
|
requirements:
|
204
190
|
- - "~>"
|
205
191
|
- !ruby/object:Gem::Version
|
206
|
-
version: 1.
|
192
|
+
version: 1.7.0
|
207
193
|
- !ruby/object:Gem::Dependency
|
208
194
|
name: timecop
|
209
195
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,10 +211,13 @@ executables: []
|
|
225
211
|
extensions: []
|
226
212
|
extra_rdoc_files: []
|
227
213
|
files:
|
228
|
-
- ".
|
214
|
+
- ".github/dependabot.yml"
|
215
|
+
- ".github/workflows/tests.yml"
|
229
216
|
- ".gitignore"
|
217
|
+
- ".rspec"
|
230
218
|
- ".rubocop.yml"
|
231
219
|
- ".rubocop_todo.yml"
|
220
|
+
- ".ruby-version"
|
232
221
|
- CHANGELOG.md
|
233
222
|
- CONTRIBUTING.md
|
234
223
|
- Gemfile
|
@@ -249,6 +238,7 @@ files:
|
|
249
238
|
- lib/statesman/adapters/active_record_transition.rb
|
250
239
|
- lib/statesman/adapters/memory.rb
|
251
240
|
- lib/statesman/adapters/memory_transition.rb
|
241
|
+
- lib/statesman/adapters/type_safe_active_record_queries.rb
|
252
242
|
- lib/statesman/callback.rb
|
253
243
|
- lib/statesman/config.rb
|
254
244
|
- lib/statesman/exceptions.rb
|
@@ -270,6 +260,7 @@ files:
|
|
270
260
|
- spec/statesman/adapters/memory_spec.rb
|
271
261
|
- spec/statesman/adapters/memory_transition_spec.rb
|
272
262
|
- spec/statesman/adapters/shared_examples.rb
|
263
|
+
- spec/statesman/adapters/type_safe_active_record_queries_spec.rb
|
273
264
|
- spec/statesman/callback_spec.rb
|
274
265
|
- spec/statesman/config_spec.rb
|
275
266
|
- spec/statesman/exceptions_spec.rb
|
@@ -277,6 +268,7 @@ files:
|
|
277
268
|
- spec/statesman/machine_spec.rb
|
278
269
|
- spec/statesman/utils_spec.rb
|
279
270
|
- spec/support/active_record.rb
|
271
|
+
- spec/support/exactly_query_databases.rb
|
280
272
|
- spec/support/generators_shared_examples.rb
|
281
273
|
- statesman.gemspec
|
282
274
|
homepage: https://github.com/gocardless/statesman
|
@@ -288,6 +280,7 @@ metadata:
|
|
288
280
|
documentation_uri: https://github.com/gocardless/statesman/blob/master/README.md
|
289
281
|
homepage_uri: https://github.com/gocardless/statesman
|
290
282
|
source_code_uri: https://github.com/gocardless/statesman
|
283
|
+
rubygems_mfa_required: 'true'
|
291
284
|
post_install_message:
|
292
285
|
rdoc_options: []
|
293
286
|
require_paths:
|
@@ -296,35 +289,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
296
289
|
requirements:
|
297
290
|
- - ">="
|
298
291
|
- !ruby/object:Gem::Version
|
299
|
-
version: '
|
292
|
+
version: '3.0'
|
300
293
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
301
294
|
requirements:
|
302
295
|
- - ">="
|
303
296
|
- !ruby/object:Gem::Version
|
304
297
|
version: '0'
|
305
298
|
requirements: []
|
306
|
-
rubygems_version: 3.
|
299
|
+
rubygems_version: 3.4.10
|
307
300
|
signing_key:
|
308
301
|
specification_version: 4
|
309
302
|
summary: A statesman-like state machine library
|
310
|
-
test_files:
|
311
|
-
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions_with_partial_index.rb
|
312
|
-
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions_without_partial_index.rb
|
313
|
-
- spec/fixtures/add_most_recent_to_bacon_transitions.rb
|
314
|
-
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
315
|
-
- spec/generators/statesman/migration_generator_spec.rb
|
316
|
-
- spec/spec_helper.rb
|
317
|
-
- spec/statesman/adapters/active_record_queries_spec.rb
|
318
|
-
- spec/statesman/adapters/active_record_spec.rb
|
319
|
-
- spec/statesman/adapters/active_record_transition_spec.rb
|
320
|
-
- spec/statesman/adapters/memory_spec.rb
|
321
|
-
- spec/statesman/adapters/memory_transition_spec.rb
|
322
|
-
- spec/statesman/adapters/shared_examples.rb
|
323
|
-
- spec/statesman/callback_spec.rb
|
324
|
-
- spec/statesman/config_spec.rb
|
325
|
-
- spec/statesman/exceptions_spec.rb
|
326
|
-
- spec/statesman/guard_spec.rb
|
327
|
-
- spec/statesman/machine_spec.rb
|
328
|
-
- spec/statesman/utils_spec.rb
|
329
|
-
- spec/support/active_record.rb
|
330
|
-
- spec/support/generators_shared_examples.rb
|
303
|
+
test_files: []
|