stepper_motor 0.1.7 → 0.1.9
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 +12 -0
- data/.github/workflows/ci.yml +51 -0
- data/CHANGELOG.md +81 -2
- data/Gemfile +11 -0
- data/README.md +13 -374
- data/Rakefile +21 -3
- data/bin/test +5 -0
- data/lib/generators/install_generator.rb +6 -1
- data/lib/generators/stepper_motor_migration_003.rb.erb +6 -0
- data/lib/generators/stepper_motor_migration_004.rb.erb +24 -0
- data/lib/stepper_motor/forward_scheduler.rb +8 -4
- data/lib/stepper_motor/journey/flow_control.rb +58 -0
- data/lib/stepper_motor/journey/recovery.rb +34 -0
- data/lib/stepper_motor/journey.rb +85 -84
- data/lib/stepper_motor/perform_step_job_v2.rb +2 -2
- data/lib/stepper_motor/recover_stuck_journeys_job_v1.rb +3 -1
- data/lib/stepper_motor/step.rb +70 -5
- data/lib/stepper_motor/version.rb +1 -1
- data/lib/stepper_motor.rb +0 -1
- data/lib/tasks/stepper_motor_tasks.rake +8 -0
- data/manual/MANUAL.md +538 -0
- data/rbi/stepper_motor.rbi +459 -0
- data/sig/stepper_motor.rbs +406 -3
- data/stepper_motor.gemspec +46 -0
- data/test/dummy/Rakefile +8 -0
- data/test/dummy/app/assets/stylesheets/application.css +1 -0
- data/test/dummy/app/controllers/application_controller.rb +6 -0
- data/test/dummy/app/helpers/application_helper.rb +4 -0
- data/test/dummy/app/jobs/application_job.rb +9 -0
- data/test/dummy/app/mailers/application_mailer.rb +6 -0
- data/test/dummy/app/models/application_record.rb +5 -0
- data/test/dummy/app/views/layouts/application.html.erb +27 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/app/views/pwa/manifest.json.erb +22 -0
- data/test/dummy/app/views/pwa/service-worker.js +26 -0
- data/test/dummy/bin/dev +2 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/config/application.rb +28 -0
- data/test/dummy/config/boot.rb +7 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/database.yml +32 -0
- data/test/dummy/config/environment.rb +7 -0
- data/test/dummy/config/environments/development.rb +71 -0
- data/test/dummy/config/environments/production.rb +91 -0
- data/test/dummy/config/environments/test.rb +55 -0
- data/test/dummy/config/initializers/content_security_policy.rb +27 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +10 -0
- data/test/dummy/config/initializers/inflections.rb +18 -0
- data/test/dummy/config/initializers/stepper_motor.rb +1 -0
- data/test/dummy/config/locales/en.yml +31 -0
- data/test/dummy/config/puma.rb +40 -0
- data/test/dummy/config/routes.rb +16 -0
- data/test/dummy/config/storage.yml +34 -0
- data/test/dummy/config.ru +8 -0
- data/test/dummy/db/migrate/20250525132523_stepper_motor_migration_001.rb +38 -0
- data/test/dummy/db/migrate/20250525132524_stepper_motor_migration_002.rb +6 -0
- data/test/dummy/db/migrate/20250525132525_stepper_motor_migration_003.rb +6 -0
- data/test/dummy/db/migrate/20250525132526_stepper_motor_migration_004.rb +24 -0
- data/test/dummy/db/schema.rb +36 -0
- data/test/dummy/public/400.html +114 -0
- data/test/dummy/public/404.html +114 -0
- data/test/dummy/public/406-unsupported-browser.html +114 -0
- data/test/dummy/public/422.html +114 -0
- data/test/dummy/public/500.html +114 -0
- data/test/dummy/public/icon.png +0 -0
- data/test/dummy/public/icon.svg +3 -0
- data/test/side_effects_helper.rb +67 -0
- data/test/stepper_motor/cyclic_scheduler_test.rb +77 -0
- data/{spec/stepper_motor/forward_scheduler_spec.rb → test/stepper_motor/forward_scheduler_test.rb} +9 -10
- data/test/stepper_motor/journey/exception_handling_test.rb +89 -0
- data/test/stepper_motor/journey/flow_control_test.rb +78 -0
- data/test/stepper_motor/journey/idempotency_test.rb +65 -0
- data/test/stepper_motor/journey/step_definition_test.rb +187 -0
- data/test/stepper_motor/journey/uniqueness_test.rb +48 -0
- data/test/stepper_motor/journey_test.rb +352 -0
- data/{spec/stepper_motor/recover_stuck_journeys_job_spec.rb → test/stepper_motor/recover_stuck_journeys_job_test.rb} +14 -14
- data/{spec/stepper_motor/recovery_spec.rb → test/stepper_motor/recovery_test.rb} +27 -27
- data/test/stepper_motor/test_helper_test.rb +44 -0
- data/test/stepper_motor_test.rb +9 -0
- data/test/test_helper.rb +46 -0
- metadata +98 -44
- data/.rspec +0 -3
- data/.ruby-version +0 -1
- data/.standard.yml +0 -4
- data/.yardopts +0 -1
- data/spec/helpers/side_effects.rb +0 -85
- data/spec/spec_helper.rb +0 -90
- data/spec/stepper_motor/cyclic_scheduler_spec.rb +0 -68
- data/spec/stepper_motor/generator_spec.rb +0 -16
- data/spec/stepper_motor/journey_spec.rb +0 -401
- data/spec/stepper_motor/test_helper_spec.rb +0 -48
- data/spec/stepper_motor_spec.rb +0 -7
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stepper_motor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julik Tarkhanov
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-05-
|
10
|
+
date: 2025-05-25 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: activerecord
|
@@ -53,13 +52,13 @@ dependencies:
|
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
55
|
+
name: minitest
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - ">="
|
60
59
|
- !ruby/object:Gem::Version
|
61
60
|
version: '0'
|
62
|
-
type: :
|
61
|
+
type: :development
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
@@ -67,49 +66,49 @@ dependencies:
|
|
67
66
|
- !ruby/object:Gem::Version
|
68
67
|
version: '0'
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
69
|
+
name: rails
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
72
71
|
requirements:
|
73
|
-
- - "
|
72
|
+
- - "~>"
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
74
|
+
version: '7.0'
|
76
75
|
type: :development
|
77
76
|
prerelease: false
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
|
-
- - "
|
79
|
+
- - "~>"
|
81
80
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
81
|
+
version: '7.0'
|
83
82
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
83
|
+
name: sqlite3
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
|
-
- - "
|
86
|
+
- - ">="
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
88
|
+
version: '0'
|
90
89
|
type: :development
|
91
90
|
prerelease: false
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
|
-
- - "
|
93
|
+
- - ">="
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
95
|
+
version: '0'
|
97
96
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
97
|
+
name: rake
|
99
98
|
requirement: !ruby/object:Gem::Requirement
|
100
99
|
requirements:
|
101
100
|
- - "~>"
|
102
101
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
102
|
+
version: '13.0'
|
104
103
|
type: :development
|
105
104
|
prerelease: false
|
106
105
|
version_requirements: !ruby/object:Gem::Requirement
|
107
106
|
requirements:
|
108
107
|
- - "~>"
|
109
108
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
109
|
+
version: '13.0'
|
111
110
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
111
|
+
name: standard
|
113
112
|
requirement: !ruby/object:Gem::Requirement
|
114
113
|
requirements:
|
115
114
|
- - ">="
|
@@ -123,21 +122,21 @@ dependencies:
|
|
123
122
|
- !ruby/object:Gem::Version
|
124
123
|
version: '0'
|
125
124
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
125
|
+
name: magic_frozen_string_literal
|
127
126
|
requirement: !ruby/object:Gem::Requirement
|
128
127
|
requirements:
|
129
|
-
- -
|
128
|
+
- - ">="
|
130
129
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
130
|
+
version: '0'
|
132
131
|
type: :development
|
133
132
|
prerelease: false
|
134
133
|
version_requirements: !ruby/object:Gem::Requirement
|
135
134
|
requirements:
|
136
|
-
- -
|
135
|
+
- - ">="
|
137
136
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
137
|
+
version: '0'
|
139
138
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
139
|
+
name: yard
|
141
140
|
requirement: !ruby/object:Gem::Requirement
|
142
141
|
requirements:
|
143
142
|
- - ">="
|
@@ -151,7 +150,7 @@ dependencies:
|
|
151
150
|
- !ruby/object:Gem::Version
|
152
151
|
version: '0'
|
153
152
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
153
|
+
name: redcarpet
|
155
154
|
requirement: !ruby/object:Gem::Requirement
|
156
155
|
requirements:
|
157
156
|
- - ">="
|
@@ -165,7 +164,7 @@ dependencies:
|
|
165
164
|
- !ruby/object:Gem::Version
|
166
165
|
version: '0'
|
167
166
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
167
|
+
name: sord
|
169
168
|
requirement: !ruby/object:Gem::Requirement
|
170
169
|
requirements:
|
171
170
|
- - ">="
|
@@ -185,23 +184,27 @@ executables: []
|
|
185
184
|
extensions: []
|
186
185
|
extra_rdoc_files: []
|
187
186
|
files:
|
188
|
-
- ".
|
189
|
-
- ".
|
190
|
-
- ".standard.yml"
|
191
|
-
- ".yardopts"
|
187
|
+
- ".github/dependabot.yml"
|
188
|
+
- ".github/workflows/ci.yml"
|
192
189
|
- CHANGELOG.md
|
190
|
+
- Gemfile
|
193
191
|
- LICENSE.md
|
194
192
|
- README.md
|
195
193
|
- Rakefile
|
196
194
|
- bin/console
|
197
195
|
- bin/setup
|
196
|
+
- bin/test
|
198
197
|
- lib/generators/install_generator.rb
|
199
198
|
- lib/generators/stepper_motor_migration_001.rb.erb
|
200
199
|
- lib/generators/stepper_motor_migration_002.rb.erb
|
200
|
+
- lib/generators/stepper_motor_migration_003.rb.erb
|
201
|
+
- lib/generators/stepper_motor_migration_004.rb.erb
|
201
202
|
- lib/stepper_motor.rb
|
202
203
|
- lib/stepper_motor/cyclic_scheduler.rb
|
203
204
|
- lib/stepper_motor/forward_scheduler.rb
|
204
205
|
- lib/stepper_motor/journey.rb
|
206
|
+
- lib/stepper_motor/journey/flow_control.rb
|
207
|
+
- lib/stepper_motor/journey/recovery.rb
|
205
208
|
- lib/stepper_motor/perform_step_job.rb
|
206
209
|
- lib/stepper_motor/perform_step_job_v2.rb
|
207
210
|
- lib/stepper_motor/railtie.rb
|
@@ -209,17 +212,70 @@ files:
|
|
209
212
|
- lib/stepper_motor/step.rb
|
210
213
|
- lib/stepper_motor/test_helper.rb
|
211
214
|
- lib/stepper_motor/version.rb
|
215
|
+
- lib/tasks/stepper_motor_tasks.rake
|
216
|
+
- manual/MANUAL.md
|
217
|
+
- rbi/stepper_motor.rbi
|
212
218
|
- sig/stepper_motor.rbs
|
213
|
-
-
|
214
|
-
-
|
215
|
-
-
|
216
|
-
-
|
217
|
-
-
|
218
|
-
-
|
219
|
-
-
|
220
|
-
-
|
221
|
-
-
|
222
|
-
-
|
219
|
+
- stepper_motor.gemspec
|
220
|
+
- test/dummy/Rakefile
|
221
|
+
- test/dummy/app/assets/stylesheets/application.css
|
222
|
+
- test/dummy/app/controllers/application_controller.rb
|
223
|
+
- test/dummy/app/helpers/application_helper.rb
|
224
|
+
- test/dummy/app/jobs/application_job.rb
|
225
|
+
- test/dummy/app/mailers/application_mailer.rb
|
226
|
+
- test/dummy/app/models/application_record.rb
|
227
|
+
- test/dummy/app/views/layouts/application.html.erb
|
228
|
+
- test/dummy/app/views/layouts/mailer.html.erb
|
229
|
+
- test/dummy/app/views/layouts/mailer.text.erb
|
230
|
+
- test/dummy/app/views/pwa/manifest.json.erb
|
231
|
+
- test/dummy/app/views/pwa/service-worker.js
|
232
|
+
- test/dummy/bin/dev
|
233
|
+
- test/dummy/bin/rails
|
234
|
+
- test/dummy/bin/rake
|
235
|
+
- test/dummy/bin/setup
|
236
|
+
- test/dummy/config.ru
|
237
|
+
- test/dummy/config/application.rb
|
238
|
+
- test/dummy/config/boot.rb
|
239
|
+
- test/dummy/config/cable.yml
|
240
|
+
- test/dummy/config/database.yml
|
241
|
+
- test/dummy/config/environment.rb
|
242
|
+
- test/dummy/config/environments/development.rb
|
243
|
+
- test/dummy/config/environments/production.rb
|
244
|
+
- test/dummy/config/environments/test.rb
|
245
|
+
- test/dummy/config/initializers/content_security_policy.rb
|
246
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
247
|
+
- test/dummy/config/initializers/inflections.rb
|
248
|
+
- test/dummy/config/initializers/stepper_motor.rb
|
249
|
+
- test/dummy/config/locales/en.yml
|
250
|
+
- test/dummy/config/puma.rb
|
251
|
+
- test/dummy/config/routes.rb
|
252
|
+
- test/dummy/config/storage.yml
|
253
|
+
- test/dummy/db/migrate/20250525132523_stepper_motor_migration_001.rb
|
254
|
+
- test/dummy/db/migrate/20250525132524_stepper_motor_migration_002.rb
|
255
|
+
- test/dummy/db/migrate/20250525132525_stepper_motor_migration_003.rb
|
256
|
+
- test/dummy/db/migrate/20250525132526_stepper_motor_migration_004.rb
|
257
|
+
- test/dummy/db/schema.rb
|
258
|
+
- test/dummy/public/400.html
|
259
|
+
- test/dummy/public/404.html
|
260
|
+
- test/dummy/public/406-unsupported-browser.html
|
261
|
+
- test/dummy/public/422.html
|
262
|
+
- test/dummy/public/500.html
|
263
|
+
- test/dummy/public/icon.png
|
264
|
+
- test/dummy/public/icon.svg
|
265
|
+
- test/side_effects_helper.rb
|
266
|
+
- test/stepper_motor/cyclic_scheduler_test.rb
|
267
|
+
- test/stepper_motor/forward_scheduler_test.rb
|
268
|
+
- test/stepper_motor/journey/exception_handling_test.rb
|
269
|
+
- test/stepper_motor/journey/flow_control_test.rb
|
270
|
+
- test/stepper_motor/journey/idempotency_test.rb
|
271
|
+
- test/stepper_motor/journey/step_definition_test.rb
|
272
|
+
- test/stepper_motor/journey/uniqueness_test.rb
|
273
|
+
- test/stepper_motor/journey_test.rb
|
274
|
+
- test/stepper_motor/recover_stuck_journeys_job_test.rb
|
275
|
+
- test/stepper_motor/recovery_test.rb
|
276
|
+
- test/stepper_motor/test_helper_test.rb
|
277
|
+
- test/stepper_motor_test.rb
|
278
|
+
- test/test_helper.rb
|
223
279
|
homepage: https://steppermotor.dev
|
224
280
|
licenses:
|
225
281
|
- LGPL
|
@@ -228,7 +284,6 @@ metadata:
|
|
228
284
|
homepage_uri: https://steppermotor.dev
|
229
285
|
source_code_uri: https://github.com/stepper-motor/stepper_motor
|
230
286
|
changelog_uri: https://github.com/stepper-motor/stepper_motor/blob/main/CHANGELOG.md
|
231
|
-
post_install_message:
|
232
287
|
rdoc_options: []
|
233
288
|
require_paths:
|
234
289
|
- lib
|
@@ -243,8 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
298
|
- !ruby/object:Gem::Version
|
244
299
|
version: '0'
|
245
300
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
247
|
-
signing_key:
|
301
|
+
rubygems_version: 3.6.6
|
248
302
|
specification_version: 4
|
249
303
|
summary: Effortless step workflows that embed nicely inside Rails
|
250
304
|
test_files: []
|
data/.rspec
DELETED
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.1.1
|
data/.standard.yml
DELETED
data/.yardopts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--markup markdown - docs/MANUAL.md
|
@@ -1,85 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SideEffects
|
4
|
-
module SpecHelper
|
5
|
-
def self.included(into)
|
6
|
-
into.before(:each) { SideEffects.clear! }
|
7
|
-
into.after(:each) { SideEffects.clear! }
|
8
|
-
super
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.produced?(name)
|
13
|
-
Thread.current[:side_effects].to_h.key?(name.to_s)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.none?
|
17
|
-
Thread.current[:side_effects].to_h.empty?
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.names
|
21
|
-
Thread.current[:side_effects].to_h.keys.map(&:to_s)
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.clear!
|
25
|
-
Thread.current[:side_effects] = {}
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.touch!(name)
|
29
|
-
if Thread.current[:side_effects].nil?
|
30
|
-
raise <<~ERROR
|
31
|
-
The current thread locals do not contain :side_effects, which means that your job
|
32
|
-
is running on a different thread than the specs. This is probably due to bad configuration
|
33
|
-
of the ActiveJob test adapter.
|
34
|
-
ERROR
|
35
|
-
end
|
36
|
-
Thread.current[:side_effects][name.to_s] = true
|
37
|
-
end
|
38
|
-
|
39
|
-
RSpec::Matchers.define :have_produced_side_effects_named do |*side_effect_names|
|
40
|
-
match(notify_expectation_failures: true) do |actual|
|
41
|
-
SideEffects.clear!
|
42
|
-
actual.call
|
43
|
-
side_effect_names.each do |side_effect_name|
|
44
|
-
expect(SideEffects).to be_produced(side_effect_name), "The side effect named #{side_effect_name.inspect} should have been produced, but wasn't"
|
45
|
-
end
|
46
|
-
true
|
47
|
-
end
|
48
|
-
|
49
|
-
def supports_block_expectations?
|
50
|
-
true
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
RSpec::Matchers.define :not_have_produced_side_effects_named do |*side_effect_names|
|
55
|
-
match(notify_expectation_failures: true) do |actual|
|
56
|
-
expect(side_effect_names).not_to be_empty
|
57
|
-
|
58
|
-
SideEffects.clear!
|
59
|
-
actual.call
|
60
|
-
|
61
|
-
side_effect_names.each do |side_effect_name|
|
62
|
-
expect(SideEffects).not_to be_produced(side_effect_name), "The side effect named #{side_effect_name.inspect} should not have been produced, but was"
|
63
|
-
end
|
64
|
-
|
65
|
-
true
|
66
|
-
end
|
67
|
-
|
68
|
-
def supports_block_expectations?
|
69
|
-
true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
RSpec::Matchers.define :not_have_produced_any_side_effects do
|
74
|
-
match(notify_expectation_failures: true) do |actual|
|
75
|
-
SideEffects.clear!
|
76
|
-
actual.call
|
77
|
-
expect(SideEffects).to be_none
|
78
|
-
true
|
79
|
-
end
|
80
|
-
|
81
|
-
def supports_block_expectations?
|
82
|
-
true
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "stepper_motor"
|
4
|
-
require "active_support/testing/time_helpers"
|
5
|
-
require "active_job"
|
6
|
-
require "active_record"
|
7
|
-
require "globalid"
|
8
|
-
require_relative "helpers/side_effects"
|
9
|
-
require "fileutils"
|
10
|
-
|
11
|
-
module StepperMotorRailtieTestHelpers
|
12
|
-
def establish_test_connection
|
13
|
-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: fake_app_root + "/db.sqlite3")
|
14
|
-
StepperMotor::InstallGenerator.source_root(File.dirname(__FILE__) + "/../../lib")
|
15
|
-
end
|
16
|
-
|
17
|
-
def fake_app_root
|
18
|
-
File.dirname(__FILE__) + "/app"
|
19
|
-
end
|
20
|
-
|
21
|
-
def run_generator
|
22
|
-
generator = StepperMotor::InstallGenerator.new
|
23
|
-
generator.destination_root = fake_app_root
|
24
|
-
generator.create_migration_file
|
25
|
-
end
|
26
|
-
|
27
|
-
def run_migrations
|
28
|
-
# Before running the migrations we need to require the migration files, since there is no
|
29
|
-
# "full" Rails environment available
|
30
|
-
Dir.glob(fake_app_root + "/db/migrate/*.rb").sort.each do |migration_file_path|
|
31
|
-
require migration_file_path
|
32
|
-
end
|
33
|
-
|
34
|
-
ActiveRecord::Migrator.migrations_paths = [File.join(fake_app_root + "/db/migrate")]
|
35
|
-
ActiveRecord::Tasks::DatabaseTasks.root = fake_app_root
|
36
|
-
ActiveRecord::Tasks::DatabaseTasks.migrate
|
37
|
-
end
|
38
|
-
extend self
|
39
|
-
end
|
40
|
-
|
41
|
-
module ActiveSupportTestCaseMethodsStub
|
42
|
-
def self.included(into)
|
43
|
-
into.before(:each) { before_setup }
|
44
|
-
into.after(:each) { after_teardown }
|
45
|
-
end
|
46
|
-
|
47
|
-
def before_setup
|
48
|
-
# Blank implementation as TestCase modules super() into it
|
49
|
-
end
|
50
|
-
|
51
|
-
def after_teardown
|
52
|
-
# Blank implementation as TestCase modules super() into it
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
module JourneyDefinitionHelper
|
57
|
-
def create_journey_subclass(&blk)
|
58
|
-
# https://stackoverflow.com/questions/4113479/dynamic-class-definition-with-a-class-name
|
59
|
-
random_component = Random.hex(2)
|
60
|
-
random_name = "JourneySubclass#{random_component}"
|
61
|
-
klass = Class.new(StepperMotor::Journey, &blk)
|
62
|
-
Object.const_set(random_name, klass)
|
63
|
-
klass
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
RSpec.configure do |config|
|
68
|
-
# Enable flags like --only-failures and --next-failure
|
69
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
70
|
-
|
71
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
72
|
-
config.disable_monkey_patching!
|
73
|
-
|
74
|
-
config.expect_with :rspec do |c|
|
75
|
-
c.syntax = :expect
|
76
|
-
end
|
77
|
-
|
78
|
-
config.include ActiveSupport::Testing::TimeHelpers
|
79
|
-
config.include StepperMotorRailtieTestHelpers
|
80
|
-
config.include SideEffects::SpecHelper
|
81
|
-
config.include ActiveSupportTestCaseMethodsStub
|
82
|
-
config.include JourneyDefinitionHelper
|
83
|
-
|
84
|
-
config.before :suite do
|
85
|
-
StepperMotorRailtieTestHelpers.establish_test_connection
|
86
|
-
StepperMotorRailtieTestHelpers.run_generator
|
87
|
-
StepperMotorRailtieTestHelpers.run_migrations
|
88
|
-
ActiveJob::Base.logger.level = Logger::FATAL
|
89
|
-
end
|
90
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../spec_helper"
|
4
|
-
|
5
|
-
RSpec.describe "StepperMotor::CyclicScheduler" do
|
6
|
-
include ActiveJob::TestHelper
|
7
|
-
|
8
|
-
before do
|
9
|
-
@previous_scheduler = StepperMotor.scheduler
|
10
|
-
StepperMotor::Journey.delete_all
|
11
|
-
end
|
12
|
-
|
13
|
-
after do
|
14
|
-
StepperMotor.scheduler = @previous_scheduler
|
15
|
-
end
|
16
|
-
|
17
|
-
def far_future_journey_class
|
18
|
-
@klass ||= create_journey_subclass do
|
19
|
-
step :do_thing, wait: 40.minutes do
|
20
|
-
raise "We do not test this so it should never run"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it "does not schedule a journey which is too far in the future" do
|
26
|
-
scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 30.seconds)
|
27
|
-
StepperMotor.scheduler = scheduler
|
28
|
-
|
29
|
-
expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
|
30
|
-
_journey = far_future_journey_class.create!
|
31
|
-
|
32
|
-
expect(scheduler).not_to receive(:schedule)
|
33
|
-
scheduler.run_scheduling_cycle
|
34
|
-
end
|
35
|
-
|
36
|
-
it "only schedules journeys which are within its execution window" do
|
37
|
-
scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 40.minutes)
|
38
|
-
StepperMotor.scheduler = scheduler
|
39
|
-
|
40
|
-
expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
|
41
|
-
journey = far_future_journey_class.create!
|
42
|
-
|
43
|
-
expect(scheduler).to receive(:schedule).with(journey).and_call_original
|
44
|
-
scheduler.run_scheduling_cycle
|
45
|
-
end
|
46
|
-
|
47
|
-
it "also schedules journeys which had to run in the past" do
|
48
|
-
scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 10.seconds)
|
49
|
-
StepperMotor.scheduler = scheduler
|
50
|
-
|
51
|
-
expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
|
52
|
-
journey = far_future_journey_class.create!
|
53
|
-
journey.update!(next_step_to_be_performed_at: 10.minutes.ago)
|
54
|
-
|
55
|
-
expect(scheduler).to receive(:schedule).with(journey).and_call_original
|
56
|
-
scheduler.run_scheduling_cycle
|
57
|
-
end
|
58
|
-
|
59
|
-
it "performs the scheduling job" do
|
60
|
-
scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 10.seconds)
|
61
|
-
StepperMotor.scheduler = scheduler
|
62
|
-
job_class = StepperMotor::CyclicScheduler::RunSchedulingCycleJob
|
63
|
-
expect(scheduler).to receive(:run_scheduling_cycle).and_call_original
|
64
|
-
job_class.perform_now
|
65
|
-
end
|
66
|
-
|
67
|
-
it "does not perform the job if the configured scheduler is not the CyclicScheduler"
|
68
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../spec_helper"
|
4
|
-
|
5
|
-
RSpec.describe "StepperMotor::InstallGenerator" do
|
6
|
-
it "is able to set up a test database" do
|
7
|
-
expect {
|
8
|
-
establish_test_connection
|
9
|
-
run_generator
|
10
|
-
run_migrations
|
11
|
-
}.not_to raise_error
|
12
|
-
expect(ActiveRecord::Base.connection.tables).to include("stepper_motor_journeys")
|
13
|
-
ensure
|
14
|
-
FileUtils.rm_rf(fake_app_root)
|
15
|
-
end
|
16
|
-
end
|