statesman 10.0.0 → 10.2.3
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/workflows/tests.yml +106 -0
- data/.rubocop.yml +5 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +25 -0
- data/Gemfile +1 -0
- data/README.md +24 -0
- data/lib/generators/statesman/active_record_transition_generator.rb +1 -1
- data/lib/generators/statesman/generator_helpers.rb +1 -1
- data/lib/statesman/adapters/active_record.rb +32 -16
- data/lib/statesman/adapters/active_record_queries.rb +13 -5
- data/lib/statesman/adapters/memory.rb +1 -1
- data/lib/statesman/adapters/type_safe_active_record_queries.rb +21 -0
- data/lib/statesman/exceptions.rb +9 -7
- data/lib/statesman/guard.rb +1 -1
- data/lib/statesman/version.rb +1 -1
- data/lib/statesman.rb +2 -0
- data/lib/tasks/statesman.rake +3 -3
- data/spec/spec_helper.rb +11 -0
- data/spec/statesman/adapters/active_record_queries_spec.rb +5 -5
- data/spec/statesman/adapters/active_record_spec.rb +87 -19
- data/spec/statesman/adapters/shared_examples.rb +2 -2
- data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +208 -0
- data/spec/statesman/exceptions_spec.rb +7 -1
- data/spec/statesman/machine_spec.rb +16 -16
- data/spec/support/active_record.rb +105 -20
- data/statesman.gemspec +6 -7
- metadata +22 -53
- data/.circleci/config.yml +0 -127
@@ -20,10 +20,22 @@ 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
|
+
serialize :metadata, JSON
|
28
|
+
end
|
29
|
+
|
23
30
|
class MyActiveRecordModel < ActiveRecord::Base
|
24
31
|
has_many :my_active_record_model_transitions, autosave: false
|
25
32
|
alias_method :transitions, :my_active_record_model_transitions
|
26
33
|
|
34
|
+
include Statesman::Adapters::ActiveRecordQueries[
|
35
|
+
transition_class: MyActiveRecordModelTransition,
|
36
|
+
initial_state: :initial
|
37
|
+
]
|
38
|
+
|
27
39
|
def state_machine
|
28
40
|
@state_machine ||= MyStateMachine.new(
|
29
41
|
self, transition_class: MyActiveRecordModelTransition
|
@@ -33,18 +45,6 @@ class MyActiveRecordModel < ActiveRecord::Base
|
|
33
45
|
def metadata
|
34
46
|
super || {}
|
35
47
|
end
|
36
|
-
|
37
|
-
def reload(*)
|
38
|
-
state_machine.reset
|
39
|
-
super
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class MyActiveRecordModelTransition < ActiveRecord::Base
|
44
|
-
include Statesman::Adapters::ActiveRecordTransition
|
45
|
-
|
46
|
-
belongs_to :my_active_record_model
|
47
|
-
serialize :metadata, JSON
|
48
48
|
end
|
49
49
|
|
50
50
|
class MyActiveRecordModelTransitionWithoutInclude < ActiveRecord::Base
|
@@ -64,7 +64,6 @@ class CreateMyActiveRecordModelMigration < MIGRATION_CLASS
|
|
64
64
|
end
|
65
65
|
|
66
66
|
# TODO: make this a module we can extend from the app? Or a generator?
|
67
|
-
# rubocop:disable Metrics/MethodLength
|
68
67
|
class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
69
68
|
def change
|
70
69
|
create_table :my_active_record_model_transitions do |t|
|
@@ -110,7 +109,6 @@ class CreateMyActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
110
109
|
end
|
111
110
|
end
|
112
111
|
end
|
113
|
-
# rubocop:enable Metrics/MethodLength
|
114
112
|
|
115
113
|
class OtherActiveRecordModel < ActiveRecord::Base
|
116
114
|
has_many :other_active_record_model_transitions, autosave: false
|
@@ -144,7 +142,6 @@ class CreateOtherActiveRecordModelMigration < MIGRATION_CLASS
|
|
144
142
|
end
|
145
143
|
end
|
146
144
|
|
147
|
-
# rubocop:disable Metrics/MethodLength
|
148
145
|
class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
149
146
|
def change
|
150
147
|
create_table :other_active_record_model_transitions do |t|
|
@@ -177,18 +174,17 @@ class CreateOtherActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
|
177
174
|
%i[other_active_record_model_id most_recent],
|
178
175
|
unique: true,
|
179
176
|
where: "most_recent",
|
180
|
-
name: "index_other_active_record_model_transitions_"\
|
177
|
+
name: "index_other_active_record_model_transitions_" \
|
181
178
|
"parent_latest"
|
182
179
|
else
|
183
180
|
add_index :other_active_record_model_transitions,
|
184
181
|
%i[other_active_record_model_id most_recent],
|
185
182
|
unique: true,
|
186
|
-
name: "index_other_active_record_model_transitions_"\
|
183
|
+
name: "index_other_active_record_model_transitions_" \
|
187
184
|
"parent_latest"
|
188
185
|
end
|
189
186
|
end
|
190
187
|
end
|
191
|
-
# rubocop:enable Metrics/MethodLength
|
192
188
|
|
193
189
|
class DropMostRecentColumn < MIGRATION_CLASS
|
194
190
|
def change
|
@@ -242,7 +238,6 @@ class CreateNamespacedARModelMigration < MIGRATION_CLASS
|
|
242
238
|
end
|
243
239
|
end
|
244
240
|
|
245
|
-
# rubocop:disable Metrics/MethodLength
|
246
241
|
class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
247
242
|
def change
|
248
243
|
create_table :my_namespace_my_active_record_model_transitions do |t|
|
@@ -282,5 +277,95 @@ class CreateNamespacedARModelTransitionMigration < MIGRATION_CLASS
|
|
282
277
|
name: "index_namespace_model_transitions_parent_latest"
|
283
278
|
end
|
284
279
|
end
|
285
|
-
|
280
|
+
end
|
281
|
+
|
282
|
+
class StiActiveRecordModel < ActiveRecord::Base
|
283
|
+
has_many :sti_a_active_record_model_transitions, autosave: false
|
284
|
+
has_many :sti_b_active_record_model_transitions, autosave: false
|
285
|
+
|
286
|
+
def state_machine_a
|
287
|
+
@state_machine_a ||= MyStateMachine.new(
|
288
|
+
self, transition_class: StiAActiveRecordModelTransition
|
289
|
+
)
|
290
|
+
end
|
291
|
+
|
292
|
+
def state_machine_b
|
293
|
+
@state_machine_b ||= MyStateMachine.new(
|
294
|
+
self, transition_class: StiBActiveRecordModelTransition
|
295
|
+
)
|
296
|
+
end
|
297
|
+
|
298
|
+
def metadata
|
299
|
+
super || {}
|
300
|
+
end
|
301
|
+
|
302
|
+
def reload(*)
|
303
|
+
state_machine_a.reset
|
304
|
+
state_machine_b.reset
|
305
|
+
super
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
class StiActiveRecordModelTransition < ActiveRecord::Base
|
310
|
+
include Statesman::Adapters::ActiveRecordTransition
|
311
|
+
|
312
|
+
belongs_to :sti_active_record_model
|
313
|
+
serialize :metadata, JSON
|
314
|
+
end
|
315
|
+
|
316
|
+
class StiAActiveRecordModelTransition < StiActiveRecordModelTransition
|
317
|
+
end
|
318
|
+
|
319
|
+
class StiBActiveRecordModelTransition < StiActiveRecordModelTransition
|
320
|
+
end
|
321
|
+
|
322
|
+
class CreateStiActiveRecordModelMigration < MIGRATION_CLASS
|
323
|
+
def change
|
324
|
+
create_table :sti_active_record_models do |t|
|
325
|
+
t.timestamps null: false
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
class CreateStiActiveRecordModelTransitionMigration < MIGRATION_CLASS
|
331
|
+
def change
|
332
|
+
create_table :sti_active_record_model_transitions do |t|
|
333
|
+
t.string :to_state
|
334
|
+
t.integer :sti_active_record_model_id
|
335
|
+
t.integer :sort_key
|
336
|
+
t.string :type
|
337
|
+
|
338
|
+
# MySQL doesn't allow default values on text fields
|
339
|
+
if ActiveRecord::Base.connection.adapter_name == "Mysql2"
|
340
|
+
t.text :metadata
|
341
|
+
else
|
342
|
+
t.text :metadata, default: "{}"
|
343
|
+
end
|
344
|
+
|
345
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
346
|
+
t.boolean :most_recent, default: true, null: false
|
347
|
+
else
|
348
|
+
t.boolean :most_recent, default: true
|
349
|
+
end
|
350
|
+
|
351
|
+
t.timestamps null: false
|
352
|
+
end
|
353
|
+
|
354
|
+
add_index :sti_active_record_model_transitions,
|
355
|
+
%i[type sti_active_record_model_id sort_key],
|
356
|
+
unique: true, name: "sti_sort_key_index"
|
357
|
+
|
358
|
+
if Statesman::Adapters::ActiveRecord.database_supports_partial_indexes?
|
359
|
+
add_index :sti_active_record_model_transitions,
|
360
|
+
%i[type sti_active_record_model_id most_recent],
|
361
|
+
unique: true,
|
362
|
+
where: "most_recent",
|
363
|
+
name: "index_sti_active_record_model_transitions_parent_latest"
|
364
|
+
else
|
365
|
+
add_index :sti_active_record_model_transitions,
|
366
|
+
%i[type sti_active_record_model_id most_recent],
|
367
|
+
unique: true,
|
368
|
+
name: "index_sti_active_record_model_transitions_parent_latest"
|
369
|
+
end
|
370
|
+
end
|
286
371
|
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
23
|
spec.required_ruby_version = ">= 2.7"
|
25
24
|
|
26
25
|
spec.add_development_dependency "ammeter", "~> 1.1"
|
27
26
|
spec.add_development_dependency "bundler", "~> 2"
|
28
|
-
spec.add_development_dependency "gc_ruboconfig", "~>
|
27
|
+
spec.add_development_dependency "gc_ruboconfig", "~> 3.6.0"
|
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.5"
|
32
30
|
spec.add_development_dependency "rails", ">= 5.2"
|
33
31
|
spec.add_development_dependency "rake", "~> 13.0.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 "
|
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.6.1"
|
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: 10.
|
4
|
+
version: 10.2.3
|
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: 2023-08-04 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:
|
47
|
+
version: 3.6.0
|
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: 3.6.0
|
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.5'
|
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.5'
|
109
95
|
- !ruby/object:Gem::Dependency
|
110
96
|
name: rails
|
111
97
|
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:
|
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
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.6.1
|
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.6.1
|
207
193
|
- !ruby/object:Gem::Dependency
|
208
194
|
name: timecop
|
209
195
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,8 +211,8 @@ executables: []
|
|
225
211
|
extensions: []
|
226
212
|
extra_rdoc_files: []
|
227
213
|
files:
|
228
|
-
- ".circleci/config.yml"
|
229
214
|
- ".github/dependabot.yml"
|
215
|
+
- ".github/workflows/tests.yml"
|
230
216
|
- ".gitignore"
|
231
217
|
- ".rubocop.yml"
|
232
218
|
- ".rubocop_todo.yml"
|
@@ -251,6 +237,7 @@ files:
|
|
251
237
|
- lib/statesman/adapters/active_record_transition.rb
|
252
238
|
- lib/statesman/adapters/memory.rb
|
253
239
|
- lib/statesman/adapters/memory_transition.rb
|
240
|
+
- lib/statesman/adapters/type_safe_active_record_queries.rb
|
254
241
|
- lib/statesman/callback.rb
|
255
242
|
- lib/statesman/config.rb
|
256
243
|
- lib/statesman/exceptions.rb
|
@@ -272,6 +259,7 @@ files:
|
|
272
259
|
- spec/statesman/adapters/memory_spec.rb
|
273
260
|
- spec/statesman/adapters/memory_transition_spec.rb
|
274
261
|
- spec/statesman/adapters/shared_examples.rb
|
262
|
+
- spec/statesman/adapters/type_safe_active_record_queries_spec.rb
|
275
263
|
- spec/statesman/callback_spec.rb
|
276
264
|
- spec/statesman/config_spec.rb
|
277
265
|
- spec/statesman/exceptions_spec.rb
|
@@ -290,6 +278,7 @@ metadata:
|
|
290
278
|
documentation_uri: https://github.com/gocardless/statesman/blob/master/README.md
|
291
279
|
homepage_uri: https://github.com/gocardless/statesman
|
292
280
|
source_code_uri: https://github.com/gocardless/statesman
|
281
|
+
rubygems_mfa_required: 'true'
|
293
282
|
post_install_message:
|
294
283
|
rdoc_options: []
|
295
284
|
require_paths:
|
@@ -305,28 +294,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
305
294
|
- !ruby/object:Gem::Version
|
306
295
|
version: '0'
|
307
296
|
requirements: []
|
308
|
-
rubygems_version: 3.
|
297
|
+
rubygems_version: 3.4.1
|
309
298
|
signing_key:
|
310
299
|
specification_version: 4
|
311
300
|
summary: A statesman-like state machine library
|
312
|
-
test_files:
|
313
|
-
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions_with_partial_index.rb
|
314
|
-
- spec/fixtures/add_constraints_to_most_recent_for_bacon_transitions_without_partial_index.rb
|
315
|
-
- spec/fixtures/add_most_recent_to_bacon_transitions.rb
|
316
|
-
- spec/generators/statesman/active_record_transition_generator_spec.rb
|
317
|
-
- spec/generators/statesman/migration_generator_spec.rb
|
318
|
-
- spec/spec_helper.rb
|
319
|
-
- spec/statesman/adapters/active_record_queries_spec.rb
|
320
|
-
- spec/statesman/adapters/active_record_spec.rb
|
321
|
-
- spec/statesman/adapters/active_record_transition_spec.rb
|
322
|
-
- spec/statesman/adapters/memory_spec.rb
|
323
|
-
- spec/statesman/adapters/memory_transition_spec.rb
|
324
|
-
- spec/statesman/adapters/shared_examples.rb
|
325
|
-
- spec/statesman/callback_spec.rb
|
326
|
-
- spec/statesman/config_spec.rb
|
327
|
-
- spec/statesman/exceptions_spec.rb
|
328
|
-
- spec/statesman/guard_spec.rb
|
329
|
-
- spec/statesman/machine_spec.rb
|
330
|
-
- spec/statesman/utils_spec.rb
|
331
|
-
- spec/support/active_record.rb
|
332
|
-
- spec/support/generators_shared_examples.rb
|
301
|
+
test_files: []
|
data/.circleci/config.yml
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
---
|
2
|
-
version: 2.1
|
3
|
-
|
4
|
-
references:
|
5
|
-
bundle_install: &bundle_install
|
6
|
-
run:
|
7
|
-
name: Bundle
|
8
|
-
command: |
|
9
|
-
gem install bundler --no-document && \
|
10
|
-
bundle config set no-cache 'true' && \
|
11
|
-
bundle config set jobs '4' && \
|
12
|
-
bundle config set retry '3' && \
|
13
|
-
bundle install
|
14
|
-
|
15
|
-
cache_bundle: &cache_bundle
|
16
|
-
save_cache:
|
17
|
-
key: bundle-<< parameters.ruby_version >>-<< parameters.rails_version >>-{{ checksum "statesman.gemspec" }}-{{ checksum "Gemfile" }}
|
18
|
-
paths:
|
19
|
-
- vendor/bundle
|
20
|
-
|
21
|
-
restore_bundle: &restore_bundle
|
22
|
-
restore_cache:
|
23
|
-
key: bundle-<< parameters.ruby_version >>-<< parameters.rails_version >>-{{ checksum "statesman.gemspec" }}-{{ checksum "Gemfile" }}
|
24
|
-
|
25
|
-
steps: &steps
|
26
|
-
- add_ssh_keys
|
27
|
-
- checkout
|
28
|
-
- run:
|
29
|
-
name: "Add dependencies"
|
30
|
-
command: |
|
31
|
-
sudo apt-get update && sudo apt-get install -y sqlite3 libsqlite3-dev
|
32
|
-
- *restore_bundle
|
33
|
-
- *bundle_install
|
34
|
-
- *cache_bundle
|
35
|
-
- run: dockerize -wait tcp://localhost:$DATABASE_DEPENDENCY_PORT -timeout 1m
|
36
|
-
- run:
|
37
|
-
name: Run specs
|
38
|
-
command: |
|
39
|
-
bundle exec rspec $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) --profile --format progress --format RspecJunitFormatter -o /tmp/circle_artifacts/rspec.xml
|
40
|
-
- run:
|
41
|
-
name: "Rubocop"
|
42
|
-
command: bundle exec rubocop --extra-details --display-style-guide --parallel --force-exclusion
|
43
|
-
- store_artifacts:
|
44
|
-
path: /tmp/circle_artifacts/
|
45
|
-
- store_test_results:
|
46
|
-
path: /tmp/circle_artifacts/
|
47
|
-
|
48
|
-
ruby_versions: &ruby_versions
|
49
|
-
- "2.7"
|
50
|
-
- "3.0"
|
51
|
-
- "3.1"
|
52
|
-
|
53
|
-
rails_versions: &rails_versions
|
54
|
-
- "5.2.7"
|
55
|
-
- "6.0.4"
|
56
|
-
- "6.1.5"
|
57
|
-
- "7.0.2"
|
58
|
-
- "main"
|
59
|
-
|
60
|
-
mysql_versions: &mysql_versions
|
61
|
-
- "5.7"
|
62
|
-
|
63
|
-
psql_versions: &psql_versions
|
64
|
-
- "9.6"
|
65
|
-
|
66
|
-
jobs:
|
67
|
-
rspec_mysql:
|
68
|
-
working_directory: /mnt/ramdisk
|
69
|
-
parameters:
|
70
|
-
ruby_version:
|
71
|
-
type: string
|
72
|
-
rails_version:
|
73
|
-
type: string
|
74
|
-
mysql_version:
|
75
|
-
type: string
|
76
|
-
docker:
|
77
|
-
- image: cimg/ruby:<< parameters.ruby_version >>
|
78
|
-
environment:
|
79
|
-
CIRCLE_TEST_REPORTS: /tmp/circle_artifacts/
|
80
|
-
DATABASE_URL: mysql2://foobar:password@127.0.0.1/statesman_test
|
81
|
-
DATABASE_DEPENDENCY_PORT: "3306"
|
82
|
-
- image: cimg/mysql:<< parameters.mysql_version >>
|
83
|
-
environment:
|
84
|
-
MYSQL_ROOT_PASSWORD: password
|
85
|
-
MYSQL_USER: foobar
|
86
|
-
MYSQL_PASSWORD: password
|
87
|
-
MYSQL_DATABASE: statesman_test
|
88
|
-
steps: *steps
|
89
|
-
|
90
|
-
rspec_postgres:
|
91
|
-
working_directory: /mnt/ramdisk
|
92
|
-
parameters:
|
93
|
-
ruby_version:
|
94
|
-
type: string
|
95
|
-
rails_version:
|
96
|
-
type: string
|
97
|
-
psql_version:
|
98
|
-
type: string
|
99
|
-
docker:
|
100
|
-
- image: cimg/ruby:<< parameters.ruby_version >>
|
101
|
-
environment:
|
102
|
-
CIRCLE_TEST_REPORTS: /tmp/circle_artifacts/
|
103
|
-
DATABASE_URL: postgres://postgres@localhost/statesman_test
|
104
|
-
DATABASE_DEPENDENCY_PORT: "5432"
|
105
|
-
- image: circleci/postgres:<< parameters.psql_version >>
|
106
|
-
environment:
|
107
|
-
POSTGRES_USER: postgres
|
108
|
-
POSTGRES_DB: statesman_test
|
109
|
-
POSTGRES_PASSWORD: statesman
|
110
|
-
steps: *steps
|
111
|
-
|
112
|
-
workflows:
|
113
|
-
version: 2
|
114
|
-
tests:
|
115
|
-
jobs:
|
116
|
-
- rspec_mysql:
|
117
|
-
matrix:
|
118
|
-
parameters:
|
119
|
-
mysql_version: *mysql_versions
|
120
|
-
ruby_version: *ruby_versions
|
121
|
-
rails_version: *rails_versions
|
122
|
-
- rspec_postgres:
|
123
|
-
matrix:
|
124
|
-
parameters:
|
125
|
-
psql_version: *psql_versions
|
126
|
-
ruby_version: *ruby_versions
|
127
|
-
rails_version: *rails_versions
|