stepper_motor 0.1.8 → 0.1.10
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/CHANGELOG.md +14 -6
- data/README.md +2 -4
- data/lib/generators/stepper_motor_migration_004.rb.erb +2 -4
- data/lib/stepper_motor/version.rb +1 -1
- data/manual/MANUAL.md +0 -11
- data/rbi/stepper_motor.rbi +1 -1
- data/stepper_motor.gemspec +0 -3
- data/test/dummy/config/initializers/stepper_motor.rb +0 -2
- data/test/dummy/db/migrate/{20250520094921_stepper_motor_migration_001.rb → 20250525132523_stepper_motor_migration_001.rb} +4 -4
- data/test/dummy/db/migrate/{20250520094922_stepper_motor_migration_002.rb → 20250525132524_stepper_motor_migration_002.rb} +0 -2
- data/test/dummy/db/migrate/{20250522212312_stepper_motor_migration_003.rb → 20250525132525_stepper_motor_migration_003.rb} +1 -2
- data/test/dummy/db/migrate/{20250525110812_stepper_motor_migration_004.rb → 20250528141038_stepper_motor_migration_004.rb} +9 -13
- data/test/dummy/db/schema.rb +2 -3
- metadata +10 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 649ad16d1e0831632a111b96f7435d66e2f601f6c301631252420876f6d2045a
|
4
|
+
data.tar.gz: 6f09feace77d276184ad9e43e466c11aaf2b3df9fa295d11cf934d1ae719742f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 265c265164a0330f2de6f75012146dbe179147d7b808c2003b00aced6f9599709648384104fb8cd3a3f41d3211320e871dcc29b34f0faba07867296c8beda561
|
7
|
+
data.tar.gz: 8275f9be10d01974d1aa9541d5d3784a056785c9e4412dbec74edbd95cfd4aa9fffad4d9fa08fc60f4621e75d81fc90af4e2893c8a944c7d4a6d399ab5e069d5
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.1.10] - 2025-05-28
|
4
|
+
|
5
|
+
- Remove `algorithm: :concurrently` from migrations. If a user needs to conform with strong_migrations
|
6
|
+
they can always edit the migration themselves.
|
7
|
+
|
8
|
+
## [0.1.9] - 2025-05-25
|
9
|
+
|
10
|
+
- Repair bodged migration from the previous release
|
11
|
+
|
3
12
|
## [0.1.8] - 2025-05-25
|
4
13
|
|
5
|
-
- Add ability to pause and resume journeys (
|
6
|
-
- Add basic exception rescue during steps (
|
7
|
-
- Add idempotency keys when performing steps (
|
8
|
-
- Add support for blockless step definitions (
|
9
|
-
- Migrate from RSpec to Minitest (
|
14
|
+
- Add ability to pause and resume journeys (https://github.com/stepper-motor/stepper_motor/pull/24)
|
15
|
+
- Add basic exception rescue during steps (https://github.com/stepper-motor/stepper_motor/pull/23)
|
16
|
+
- Add idempotency keys when performing steps (https://github.com/stepper-motor/stepper_motor/pull/21)
|
17
|
+
- Add support for blockless step definitions (https://github.com/stepper-motor/stepper_motor/pull/22)
|
18
|
+
- Migrate from RSpec to Minitest (https://github.com/stepper-motor/stepper_motor/pull/19)
|
10
19
|
- Add Rake task for recovery
|
11
20
|
- Add proper Rails engine tests
|
12
21
|
- Improve test organization and coverage
|
@@ -37,7 +46,6 @@
|
|
37
46
|
- Refactor PerformStepJob to use Journey class in job arguments
|
38
47
|
- Remove GlobalID dependency
|
39
48
|
- Add ability to resolve Journey from base class using `find()`
|
40
|
-
- Prepare groundwork for future improvements (#12)
|
41
49
|
|
42
50
|
## [0.1.4] - 2025-03-11
|
43
51
|
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ end
|
|
24
24
|
SignupJourney.create!(hero: current_user)
|
25
25
|
```
|
26
26
|
|
27
|
-
Want to know more? Dive into the [manual](
|
27
|
+
Want to know more? Dive into the [manual](/manual/MANUAL.md) we provide.
|
28
28
|
|
29
29
|
## Installation
|
30
30
|
|
@@ -47,9 +47,7 @@ Starting with versions 0.2.x and up, stepper_motor will make the best possible e
|
|
47
47
|
|
48
48
|
## Development
|
49
49
|
|
50
|
-
After checking out the repo, run `
|
51
|
-
|
52
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
50
|
+
After checking out the repo, run `bundle` to install dependencies. The development process from there on is like any other gem.
|
53
51
|
|
54
52
|
## Is it any good?
|
55
53
|
|
@@ -7,13 +7,11 @@ class StepperMotorMigration004 < ActiveRecord::Migration[<%= migration_version %
|
|
7
7
|
name: :idx_journeys_one_per_hero_with_paused
|
8
8
|
|
9
9
|
# Remove old indexes that only include 'ready' state
|
10
|
-
remove_index :stepper_motor_journeys, [:
|
11
|
-
remove_index :stepper_motor_journeys, [:type, :hero_id, :hero_type], name: :one_per_hero_index, where: "allow_multiple = '0' AND state IN ('ready', 'performing')"
|
10
|
+
remove_index :stepper_motor_journeys, [:type, :hero_id, :hero_type], name: :one_per_hero_index, where: "allow_multiple = '0' AND state IN ('ready', 'performing')"
|
12
11
|
end
|
13
12
|
|
14
13
|
def down
|
15
14
|
# Recreate old indexes
|
16
|
-
add_index :stepper_motor_journeys, [:next_step_to_be_performed_at], where: "state = 'ready'"
|
17
15
|
quoted_false = connection.quote(false)
|
18
16
|
add_index :stepper_motor_journeys, [:type, :hero_id, :hero_type],
|
19
17
|
where: "allow_multiple = '#{quoted_false}' AND state IN ('ready', 'performing')",
|
@@ -23,4 +21,4 @@ class StepperMotorMigration004 < ActiveRecord::Migration[<%= migration_version %
|
|
23
21
|
# Remove new indexes
|
24
22
|
remove_index :stepper_motor_journeys, name: :idx_journeys_one_per_hero_with_paused
|
25
23
|
end
|
26
|
-
end
|
24
|
+
end
|
data/manual/MANUAL.md
CHANGED
@@ -1,14 +1,3 @@
|
|
1
|
-
|
2
|
-
## Installation
|
3
|
-
|
4
|
-
Add the gem to the application's Gemfile, and then generate and run the migration
|
5
|
-
|
6
|
-
$ bundle add stepper_motor
|
7
|
-
$ bundle install
|
8
|
-
$ bin/rails g stepper_motor:install --uuid # Pass "uuid" if you are using UUID for your primary and foreign keys
|
9
|
-
$ bin/rails db:migrate
|
10
|
-
|
11
|
-
|
12
1
|
## Intro
|
13
2
|
|
14
3
|
`stepper_motor` solves a real, tangible problem in Rails apps - tracking activities over long periods of time. It does so in a durable, reentrant and consistent manner, utilizing the guarantees provided by your relational database you already have.
|
data/rbi/stepper_motor.rbi
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# StepperMotor is a module for building multi-step flows where steps are sequential and only
|
3
3
|
# ever progress forward. The building block of StepperMotor is StepperMotor::Journey
|
4
4
|
module StepperMotor
|
5
|
-
VERSION = T.let("0.1.
|
5
|
+
VERSION = T.let("0.1.10", T.untyped)
|
6
6
|
|
7
7
|
class Error < StandardError
|
8
8
|
end
|
data/stepper_motor.gemspec
CHANGED
@@ -33,14 +33,11 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_dependency "activerecord", ">= 7"
|
34
34
|
spec.add_dependency "activejob"
|
35
35
|
spec.add_dependency "railties"
|
36
|
-
spec.add_dependency "globalid"
|
37
36
|
|
38
37
|
spec.add_development_dependency "minitest"
|
39
38
|
spec.add_development_dependency "rails", "~> 7.0"
|
40
39
|
spec.add_development_dependency "sqlite3"
|
41
40
|
spec.add_development_dependency "rake", "~> 13.0"
|
42
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
43
|
-
spec.add_development_dependency "rspec-rails"
|
44
41
|
spec.add_development_dependency "standard"
|
45
42
|
spec.add_development_dependency "magic_frozen_string_literal"
|
46
43
|
spec.add_development_dependency "yard"
|
@@ -1,14 +1,14 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class StepperMotorMigration001 < ActiveRecord::Migration[7.2]
|
4
2
|
def change
|
3
|
+
|
5
4
|
create_table :stepper_motor_journeys do |t|
|
5
|
+
|
6
6
|
t.string :type, null: false, index: true
|
7
7
|
t.string :state, default: "ready"
|
8
8
|
t.string :hero_type, null: true
|
9
|
-
|
9
|
+
|
10
10
|
t.bigint :hero_id
|
11
|
-
|
11
|
+
|
12
12
|
t.boolean :allow_multiple, default: false
|
13
13
|
t.string :previous_step_name
|
14
14
|
t.string :next_step_name
|
@@ -1,26 +1,22 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class StepperMotorMigration004 < ActiveRecord::Migration[7.2]
|
4
2
|
def up
|
5
3
|
quoted_false = connection.quote(false)
|
6
|
-
add_index :stepper_motor_journeys, [:type, :hero_id, :hero_type],
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
add_index :stepper_motor_journeys, [:type, :hero_id, :hero_type],
|
5
|
+
where: "allow_multiple = '#{quoted_false}' AND state IN ('ready', 'performing', 'paused')",
|
6
|
+
unique: true,
|
7
|
+
name: :idx_journeys_one_per_hero_with_paused
|
10
8
|
|
11
9
|
# Remove old indexes that only include 'ready' state
|
12
|
-
remove_index :stepper_motor_journeys, [:
|
13
|
-
remove_index :stepper_motor_journeys, [:type, :hero_id, :hero_type], name: :one_per_hero_index, where: "allow_multiple = '0' AND state IN ('ready', 'performing')"
|
10
|
+
remove_index :stepper_motor_journeys, [:type, :hero_id, :hero_type], name: :one_per_hero_index, where: "allow_multiple = '0' AND state IN ('ready', 'performing')"
|
14
11
|
end
|
15
12
|
|
16
13
|
def down
|
17
14
|
# Recreate old indexes
|
18
|
-
add_index :stepper_motor_journeys, [:next_step_to_be_performed_at], where: "state = 'ready'"
|
19
15
|
quoted_false = connection.quote(false)
|
20
|
-
add_index :stepper_motor_journeys, [:type, :hero_id, :hero_type],
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
add_index :stepper_motor_journeys, [:type, :hero_id, :hero_type],
|
17
|
+
where: "allow_multiple = '#{quoted_false}' AND state IN ('ready', 'performing')",
|
18
|
+
unique: true,
|
19
|
+
name: :one_per_hero_index
|
24
20
|
|
25
21
|
# Remove new indexes
|
26
22
|
remove_index :stepper_motor_journeys, name: :idx_journeys_one_per_hero_with_paused
|
data/test/dummy/db/schema.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# This file is auto-generated from the current state of the database. Instead
|
4
2
|
# of editing this file, please use the migrations feature of Active Record to
|
5
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -12,7 +10,7 @@
|
|
12
10
|
#
|
13
11
|
# It's strongly recommended that you check this file into your version control system.
|
14
12
|
|
15
|
-
ActiveRecord::Schema[7.2].define(version:
|
13
|
+
ActiveRecord::Schema[7.2].define(version: 2025_05_28_141038) do
|
16
14
|
create_table "stepper_motor_journeys", force: :cascade do |t|
|
17
15
|
t.string "type", null: false
|
18
16
|
t.string "state", default: "ready"
|
@@ -28,6 +26,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_05_25_110812) do
|
|
28
26
|
t.datetime "updated_at", null: false
|
29
27
|
t.string "idempotency_key"
|
30
28
|
t.index ["hero_type", "hero_id"], name: "index_stepper_motor_journeys_on_hero_type_and_hero_id"
|
29
|
+
t.index ["next_step_to_be_performed_at"], name: "index_stepper_motor_journeys_on_next_step_to_be_performed_at", where: "state = 'ready' /*application='Dummy'*/"
|
31
30
|
t.index ["type", "hero_id", "hero_type"], name: "idx_journeys_one_per_hero_with_paused", unique: true, where: "allow_multiple = '0' AND state IN ('ready', 'performing', 'paused') /*application='Dummy'*/"
|
32
31
|
t.index ["type", "hero_type", "hero_id"], name: "index_stepper_motor_journeys_on_type_and_hero_type_and_hero_id"
|
33
32
|
t.index ["type"], name: "index_stepper_motor_journeys_on_type"
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julik Tarkhanov
|
8
|
+
autorequire:
|
8
9
|
bindir: exe
|
9
10
|
cert_chain: []
|
10
|
-
date: 2025-05-
|
11
|
+
date: 2025-05-28 00:00:00.000000000 Z
|
11
12
|
dependencies:
|
12
13
|
- !ruby/object:Gem::Dependency
|
13
14
|
name: activerecord
|
@@ -51,20 +52,6 @@ dependencies:
|
|
51
52
|
- - ">="
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: globalid
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
61
|
-
type: :runtime
|
62
|
-
prerelease: false
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '0'
|
68
55
|
- !ruby/object:Gem::Dependency
|
69
56
|
name: minitest
|
70
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,34 +108,6 @@ dependencies:
|
|
121
108
|
- - "~>"
|
122
109
|
- !ruby/object:Gem::Version
|
123
110
|
version: '13.0'
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: rspec
|
126
|
-
requirement: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - "~>"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '3.0'
|
131
|
-
type: :development
|
132
|
-
prerelease: false
|
133
|
-
version_requirements: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '3.0'
|
138
|
-
- !ruby/object:Gem::Dependency
|
139
|
-
name: rspec-rails
|
140
|
-
requirement: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - ">="
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: '0'
|
145
|
-
type: :development
|
146
|
-
prerelease: false
|
147
|
-
version_requirements: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - ">="
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: '0'
|
152
111
|
- !ruby/object:Gem::Dependency
|
153
112
|
name: standard
|
154
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -292,10 +251,10 @@ files:
|
|
292
251
|
- test/dummy/config/puma.rb
|
293
252
|
- test/dummy/config/routes.rb
|
294
253
|
- test/dummy/config/storage.yml
|
295
|
-
- test/dummy/db/migrate/
|
296
|
-
- test/dummy/db/migrate/
|
297
|
-
- test/dummy/db/migrate/
|
298
|
-
- test/dummy/db/migrate/
|
254
|
+
- test/dummy/db/migrate/20250525132523_stepper_motor_migration_001.rb
|
255
|
+
- test/dummy/db/migrate/20250525132524_stepper_motor_migration_002.rb
|
256
|
+
- test/dummy/db/migrate/20250525132525_stepper_motor_migration_003.rb
|
257
|
+
- test/dummy/db/migrate/20250528141038_stepper_motor_migration_004.rb
|
299
258
|
- test/dummy/db/schema.rb
|
300
259
|
- test/dummy/public/400.html
|
301
260
|
- test/dummy/public/404.html
|
@@ -326,6 +285,7 @@ metadata:
|
|
326
285
|
homepage_uri: https://steppermotor.dev
|
327
286
|
source_code_uri: https://github.com/stepper-motor/stepper_motor
|
328
287
|
changelog_uri: https://github.com/stepper-motor/stepper_motor/blob/main/CHANGELOG.md
|
288
|
+
post_install_message:
|
329
289
|
rdoc_options: []
|
330
290
|
require_paths:
|
331
291
|
- lib
|
@@ -340,7 +300,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
340
300
|
- !ruby/object:Gem::Version
|
341
301
|
version: '0'
|
342
302
|
requirements: []
|
343
|
-
rubygems_version: 3.
|
303
|
+
rubygems_version: 3.4.10
|
304
|
+
signing_key:
|
344
305
|
specification_version: 4
|
345
306
|
summary: Effortless step workflows that embed nicely inside Rails
|
346
307
|
test_files: []
|