statesman 9.0.0 → 13.0.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/.devcontainer/devcontainer.json +31 -0
- data/.devcontainer/docker-compose.yml +39 -0
- data/.github/workflows/tests.yml +130 -0
- data/.gitignore +65 -15
- data/.rspec +2 -0
- data/.rubocop.yml +11 -1
- data/.rubocop_todo.yml +23 -38
- data/.ruby-version +1 -1
- data/CHANGELOG.md +229 -43
- data/CONTRIBUTING.md +14 -13
- data/Gemfile +18 -3
- data/README.md +203 -74
- data/docs/COMPATIBILITY.md +3 -3
- data/lib/generators/statesman/active_record_transition_generator.rb +1 -1
- data/lib/generators/statesman/generator_helpers.rb +2 -2
- data/lib/statesman/adapters/active_record.rb +69 -52
- data/lib/statesman/adapters/active_record_queries.rb +15 -7
- data/lib/statesman/adapters/active_record_transition.rb +5 -1
- data/lib/statesman/adapters/memory.rb +1 -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 +9 -7
- data/lib/statesman/guard.rb +1 -1
- data/lib/statesman/machine.rb +60 -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 +8 -10
- data/spec/statesman/adapters/active_record_spec.rb +144 -55
- 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 +6 -7
- 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 +8 -4
- data/spec/statesman/guard_spec.rb +0 -2
- data/spec/statesman/machine_spec.rb +231 -19
- data/spec/statesman/utils_spec.rb +0 -2
- data/spec/support/active_record.rb +156 -29
- data/spec/support/exactly_query_databases.rb +35 -0
- data/statesman.gemspec +2 -17
- metadata +14 -238
- data/.circleci/config.yml +0 -127
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,99 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
<!-- markdownlint-disable no-duplicate-heading -->
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## v13.0.0 29th August 2025
|
|
9
|
+
|
|
10
|
+
### Changes
|
|
11
|
+
|
|
12
|
+
- Remove support for Rails 6.1 and 7, add support for Rails 8
|
|
13
|
+
- Remove support for PostgreSQL < 13, add support for PostgreSQL 17
|
|
14
|
+
- Remove support for Ruby 3.0, 3.1, add support for Ruby 3.4 and 3.5
|
|
15
|
+
|
|
16
|
+
## v12.1.0 5th January 2024
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Fixed autoloading the VERSION constants
|
|
21
|
+
- Fixed Ensuring inheritance issues with STI tabled
|
|
22
|
+
- Enabled gaplock protection when using trilogy mysql adapter
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Added Ruby 3.3 to build matrix
|
|
27
|
+
- Added optional initial transition
|
|
28
|
+
|
|
29
|
+
## v12.0.0 30th November 2023
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- Added multi-database support [#522](https://github.com/gocardless/statesman/pull/522)
|
|
34
|
+
- This now uses the correct ActiveRecord connection for the model or transition in a multi-database environment
|
|
35
|
+
|
|
36
|
+
## v11.0.0 3rd November 2023
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- Updated to support ActiveRecord > 7.2
|
|
41
|
+
- Remove support for:
|
|
42
|
+
- Ruby; 2.7
|
|
43
|
+
- Postgres; 9.6, 10, 11
|
|
44
|
+
- MySQL; 5.7
|
|
45
|
+
|
|
46
|
+
## v10.2.3 2nd Aug 2023
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Fixed calls to reloading internal cache is the state_machine was made private / protected
|
|
51
|
+
|
|
52
|
+
## v10.2.2 21st April 2023
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- Calling `active_record.reload` resets the adapter's internal cache
|
|
57
|
+
|
|
58
|
+
## v10.2.1 3rd April 2023
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- Fixed an edge case where `adapter.reset` were failing if the cache is empty
|
|
63
|
+
|
|
64
|
+
## v10.2.0 3rd April 2023
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
|
|
68
|
+
- Fixed caching of `last_transition` [#505](https://github.com/gocardless/statesman/pull/505)
|
|
69
|
+
|
|
70
|
+
## v10.1.0 10th March 2023
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- Add the source location of the guard callback to `Statesman::GuardFailedError`
|
|
75
|
+
|
|
76
|
+
## v10.0.0 17th May 2022
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
|
|
80
|
+
- Added support for Ruby 3.1 [#462](https://github.com/gocardless/statesman/pull/462)
|
|
81
|
+
- Added `remove_state` and `remove_transitions` methods to `Statesman::Machine` [#464](https://github.com/gocardless/statesman/pull/464)
|
|
82
|
+
|
|
83
|
+
### Changed
|
|
84
|
+
|
|
85
|
+
- Removed support for Ruby 2.5 and 2.6 [#462](https://github.com/gocardless/statesman/pull/462)
|
|
86
|
+
|
|
87
|
+
## v9.0.1 4th February 2021
|
|
88
|
+
|
|
89
|
+
### Changed
|
|
90
|
+
|
|
91
|
+
- Deprecate `ActiveRecord::Base.default_timezone` in favour of `ActiveRecord.default_timezone` [#446](https://github.com/gocardless/statesman/pull/446)
|
|
92
|
+
|
|
1
93
|
## v9.0.0 9th August 2021
|
|
2
94
|
|
|
3
95
|
### Added
|
|
96
|
+
|
|
4
97
|
- Added Ruby 3.0 support
|
|
5
98
|
|
|
6
99
|
### Breaking changes
|
|
@@ -10,19 +103,20 @@
|
|
|
10
103
|
## v8.0.3 8th June 2021
|
|
11
104
|
|
|
12
105
|
### Added
|
|
106
|
+
|
|
13
107
|
- Implement `Machine#last_transition_to`, to find the last transition to a given state
|
|
14
108
|
[#438](https://github.com/gocardless/statesman/pull/438)
|
|
15
109
|
|
|
16
110
|
## v8.0.2 30th March 2021
|
|
17
111
|
|
|
18
|
-
###
|
|
112
|
+
### Fixed
|
|
19
113
|
|
|
20
114
|
- Fixed a bug where the `history` of a model was left in an incorrect state after a transition
|
|
21
115
|
conflict [#433](https://github.com/gocardless/statesman/pull/433)
|
|
22
116
|
|
|
23
117
|
## v8.0.1 20th January 2021
|
|
24
118
|
|
|
25
|
-
###
|
|
119
|
+
### Fixed
|
|
26
120
|
|
|
27
121
|
- Fixed `no implicit conversion of nil into String` error when quoting null values
|
|
28
122
|
[#427](https://github.com/gocardless/statesman/pull/427)
|
|
@@ -66,43 +160,57 @@
|
|
|
66
160
|
|
|
67
161
|
## v7.1.0, 10th Feb 2020
|
|
68
162
|
|
|
163
|
+
### Fixed
|
|
164
|
+
|
|
69
165
|
- Fix `to_s` on `TransitionFailedError` & `GuardFailedError`. `.message` and
|
|
70
|
-
|
|
166
|
+
`.to_s` diverged when `from` and `to` accessors where added in v4.1.3
|
|
71
167
|
|
|
72
168
|
## v7.0.1, 8th Jan 2020
|
|
73
169
|
|
|
170
|
+
### Fixed
|
|
171
|
+
|
|
74
172
|
- Fix deprecation warning with Ruby 2.7 [#386](https://github.com/gocardless/statesman/pull/386)
|
|
75
173
|
|
|
76
174
|
## v7.0.0, 8th Jan 2020
|
|
77
175
|
|
|
78
|
-
|
|
176
|
+
### Breaking changes
|
|
79
177
|
|
|
80
178
|
- Drop official support for Rails 4.2, 5.0 and 5.1, following our [compatibility
|
|
81
179
|
policy](https://github.com/gocardless/statesman/blob/master/docs/COMPATIBILITY.md).
|
|
82
180
|
|
|
83
181
|
## v6.0.0, 20th December 2019
|
|
84
182
|
|
|
85
|
-
|
|
183
|
+
### Breaking changes
|
|
86
184
|
|
|
87
185
|
- Drop official support for Ruby 2.2 and 2.3 following our [compatibility
|
|
88
186
|
policy](https://github.com/gocardless/statesman/blob/master/docs/COMPATIBILITY.md).
|
|
89
187
|
|
|
90
188
|
## v5.2.0, 17th December 2019
|
|
91
189
|
|
|
190
|
+
### Changed
|
|
191
|
+
|
|
92
192
|
- Issue `most_recent_transition_join` query as a single-line string [#381](https://github.com/gocardless/statesman/pull/381)
|
|
93
193
|
|
|
94
194
|
## v5.1.0, 22th November 2019
|
|
95
195
|
|
|
196
|
+
### Fixed
|
|
197
|
+
|
|
96
198
|
- Correct `Statesman::Adapters::ActiveRecordQueries` error text [@Bramjetten](https://github.com/gocardless/statesman/pull/376)
|
|
97
199
|
- Removes duplicate `map` call [Isaac Seymour](https://github.com/gocardless/statesman/pull/362)
|
|
200
|
+
|
|
201
|
+
### Changed
|
|
202
|
+
|
|
98
203
|
- Update changelog with instructions of how to use `ActiveRecordQueries` added
|
|
99
204
|
in v5.0.0
|
|
100
205
|
- Pass exception into `after_transition_failure` and `after_guard_failure` callbacks [@credric-cordenier](https://github.com/gocardless/statesman/pull/378)
|
|
101
206
|
|
|
102
207
|
## v5.0.0, 11th November 2019
|
|
103
208
|
|
|
209
|
+
### Added
|
|
210
|
+
|
|
104
211
|
- Adds new syntax and restrictions to ActiveRecordQueries [PR#358](https://github.com/gocardless/statesman/pull/358). With the introduction of this, defining `self.transition_class` or `self.initial_state` is deprecated and will be removed in the next major release.
|
|
105
212
|
Change
|
|
213
|
+
|
|
106
214
|
```ruby
|
|
107
215
|
include Statesman::Adapters::ActiveRecordQueries
|
|
108
216
|
def self.initial_state
|
|
@@ -112,7 +220,9 @@
|
|
|
112
220
|
MyTransition
|
|
113
221
|
end
|
|
114
222
|
```
|
|
223
|
+
|
|
115
224
|
to
|
|
225
|
+
|
|
116
226
|
```ruby
|
|
117
227
|
include Statesman::Adapters::ActiveRecordQueries[
|
|
118
228
|
initial_state: :initial,
|
|
@@ -122,72 +232,102 @@
|
|
|
122
232
|
|
|
123
233
|
## v4.1.4, 11th November 2019
|
|
124
234
|
|
|
235
|
+
### Changed
|
|
236
|
+
|
|
125
237
|
- Reverts the breaking changes from [PR#358](https://github.com/gocardless/statesman/pull/358) & `v4.1.3` that where included in the last minor release. If you have changed your code to work with these changes `v5.0.0` will be a copy of `v4.1.3` with a bugfix applied.
|
|
126
238
|
|
|
127
239
|
## v4.1.3, 6th November 2019
|
|
128
240
|
|
|
241
|
+
### Added
|
|
242
|
+
|
|
129
243
|
- Add accessible from / to state attributes on the `TransitionFailedError` to avoid parsing strings [@ahjmorton](https://github.com/gocardless/statesman/pull/367)
|
|
130
244
|
- Add `after_transition_failure` mechanism [@credric-cordenier](https://github.com/gocardless/statesman/pull/366)
|
|
131
245
|
|
|
132
246
|
## v4.1.2, 17th August 2019
|
|
133
247
|
|
|
248
|
+
### Added
|
|
249
|
+
|
|
134
250
|
- Add support for Rails 6 [@greysteil](https://github.com/gocardless/statesman/pull/360)
|
|
135
251
|
|
|
136
252
|
## v4.1.1, 6th July 2019
|
|
137
253
|
|
|
254
|
+
### Fixed
|
|
255
|
+
|
|
138
256
|
- Fix statesman index detection for indexes that start t-z [@hmarr](https://github.com/gocardless/statesman/pull/354)
|
|
139
257
|
- Correct access of metadata via `state_machine` [@glenpike](https://github.com/gocardless/statesman/pull/349)
|
|
140
258
|
|
|
141
259
|
## v4.1.0, 10 April 2019
|
|
142
260
|
|
|
143
|
-
|
|
261
|
+
### Changed
|
|
262
|
+
|
|
263
|
+
- Add better support for mysql (and others) in `transition_conflict_error?` [@greysteil](https://github.com/greysteil) (<https://github.com/gocardless/statesman/pull/342>)
|
|
144
264
|
|
|
145
265
|
## v4.0.0, 22 February 2019
|
|
146
266
|
|
|
147
|
-
|
|
267
|
+
### Fixed
|
|
268
|
+
|
|
148
269
|
- Fixes an issue with `after_commit` transition blocks that where being
|
|
149
|
-
|
|
270
|
+
executed even if the transaction rolled back. ([patch](https://github.com/gocardless/statesman/pull/338) by [@matid](https://github.com/matid))
|
|
271
|
+
|
|
272
|
+
### Changed
|
|
273
|
+
|
|
274
|
+
- Forces Statesman to use a new transactions with `requires_new: true` (<https://github.com/gocardless/statesman/pull/249>)
|
|
150
275
|
|
|
151
276
|
## v3.5.0, 2 November 2018
|
|
152
277
|
|
|
278
|
+
### Changed
|
|
279
|
+
|
|
153
280
|
- Expose `most_recent_transition_join` - ActiveRecords `or` requires that both
|
|
154
|
-
|
|
155
|
-
|
|
281
|
+
sides of the query match up. Exposing this methods makes things easier if
|
|
282
|
+
one side of the `or` uses `in_state` or `not_in_state`. (patch by [@adambutler](https://github.com/adambutler))
|
|
156
283
|
- Various Readme and CI related changes.
|
|
157
284
|
|
|
158
285
|
## v3.4.1, 14 February 2018 ❤️
|
|
159
286
|
|
|
287
|
+
### Added
|
|
288
|
+
|
|
160
289
|
- Support ActiveRecord transition classes which don't include `Statesman::Adapters::ActiveRecordTransition`, and thus don't have a `.updated_timestamp_column` method (see #310 for further details) (patch by [@timrogers](https://github.com/timrogers))
|
|
161
290
|
|
|
162
291
|
## v3.4.0, 12 February 2018
|
|
163
292
|
|
|
293
|
+
### Changed
|
|
294
|
+
|
|
164
295
|
- When unsetting the `most_recent` flag during a transition, don't assume that transitions have an `updated_at` attribute, but rather allow the "updated timestamp column" to be re-configured or disabled entirely (patch by [@timrogers](https://github.com/timrogers))
|
|
165
296
|
|
|
166
297
|
## v3.3.0, 5 January 2018
|
|
167
298
|
|
|
299
|
+
### Changed
|
|
300
|
+
|
|
168
301
|
- Touch `updated_at` on transitions when unsetting `most_recent` flag (patch by [@NGMarmaduke](https://github.com/NGMarmaduke))
|
|
169
302
|
- Fix `force_reload` for ActiveRecord models with loaded transitions (patch by [@jacobpgn](https://github.com/))
|
|
170
303
|
|
|
171
304
|
## v3.2.0, 27 November 2017
|
|
172
305
|
|
|
306
|
+
### Added
|
|
307
|
+
|
|
173
308
|
- Allow specifying metadata with `Machine#allowed_transitions` (patch by [@vvondra](https://github.com/vvondra))
|
|
174
309
|
|
|
175
310
|
## v3.1.0, 1 September 2017
|
|
176
311
|
|
|
312
|
+
### Added
|
|
313
|
+
|
|
177
314
|
- Add support for Rails 5.0.x and 5.1.x (patch by [@kenchan0130](https://github.com/kenchan0130) and [@timrogers](https://github.com/timrogers))
|
|
315
|
+
|
|
316
|
+
### Changed
|
|
317
|
+
|
|
178
318
|
- Run tests in CircleCI instead of TravisCI (patch by [@timrogers](https://github.com/timrogers))
|
|
179
319
|
- Update Rubocop and fix offences (patch by [@timrogers](https://github.com/timrogers))
|
|
180
320
|
|
|
181
321
|
## v3.0.0, 3 July 2017
|
|
182
322
|
|
|
183
|
-
|
|
323
|
+
### Breaking changes
|
|
184
324
|
|
|
185
325
|
- Drop support for Rails < 4.2
|
|
186
326
|
- Drop support for Ruby < 2.2
|
|
187
327
|
|
|
188
328
|
For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
189
329
|
|
|
190
|
-
|
|
330
|
+
### Changed
|
|
191
331
|
|
|
192
332
|
- Better handling of custom transition association names (patch by [@greysteil](https://github.com/greysteil))
|
|
193
333
|
- Add foreign keys to transition table generator (patch by [@greysteil](https://github.com/greysteil))
|
|
@@ -195,6 +335,8 @@ For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
|
195
335
|
|
|
196
336
|
## v2.0.1, 29 March 2016
|
|
197
337
|
|
|
338
|
+
### Added
|
|
339
|
+
|
|
198
340
|
- Add support for Rails 5 (excluding Mongoid adapter)
|
|
199
341
|
|
|
200
342
|
## v2.0.0, 5 January 2016
|
|
@@ -203,7 +345,7 @@ For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
|
203
345
|
|
|
204
346
|
## v2.0.0.rc1, 23 December 2015
|
|
205
347
|
|
|
206
|
-
|
|
348
|
+
### Breaking changes
|
|
207
349
|
|
|
208
350
|
- Unset most_recent after before transitions
|
|
209
351
|
- TL;DR: set `autosave: false` on the `has_many` association between your parent and transition model and this change will almost certainly not affect your integration
|
|
@@ -221,7 +363,7 @@ For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
|
221
363
|
- To keep Statesman lightweight we've moved event functionality into the `statesman-events` gem
|
|
222
364
|
- If you are using events, add `statesman-events` to your gemfile and include `Statesman::Events` in your state machines
|
|
223
365
|
|
|
224
|
-
|
|
366
|
+
### Changed
|
|
225
367
|
|
|
226
368
|
- Add after_destroy hook to ActiveRecord transition model templates
|
|
227
369
|
- Add `in_state?` instance method to `Statesman::Machine`
|
|
@@ -229,56 +371,73 @@ For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
|
229
371
|
|
|
230
372
|
## v1.3.1, 2 July 2015
|
|
231
373
|
|
|
374
|
+
### Changed
|
|
375
|
+
|
|
232
376
|
- Fix `in_state` queries with a custom `transition_name` (patch by [0tsuki](https://github.com/0tsuki))
|
|
233
377
|
- Fix `backfill_most_recent` rake task for databases that support partial indexes (patch by [greysteil](https://github.com/greysteil))
|
|
234
378
|
|
|
235
379
|
## v1.3.0, 20 June 2015
|
|
236
380
|
|
|
381
|
+
### Changed
|
|
382
|
+
|
|
237
383
|
- Rename `last_transition` alias in `ActiveRecordQueries` to `most_recent_#{model_name}`, to allow merging of two such queries (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
238
384
|
|
|
239
385
|
## v1.2.5, 17 June 2015
|
|
240
386
|
|
|
387
|
+
### Changed
|
|
388
|
+
|
|
241
389
|
- Make `backfill_most_recent` rake task db-agnostic (patch by [@timothyp](https://github.com/timothyp))
|
|
242
390
|
|
|
243
391
|
## v1.2.4, 16 June 2015
|
|
244
392
|
|
|
393
|
+
### Changed
|
|
394
|
+
|
|
245
395
|
- Clarify error messages when misusing `Statesman::Adapters::ActiveRecordTransition` (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
246
396
|
|
|
247
397
|
## v1.2.3, 14 April 2015
|
|
248
398
|
|
|
399
|
+
### Changed
|
|
400
|
+
|
|
249
401
|
- Fix use of most_recent column in MySQL (partial indexes aren't supported) (patch by [@greysteil](https://github.com/greysteil))
|
|
250
402
|
|
|
251
403
|
## v1.2.2, 24 March 2015
|
|
252
404
|
|
|
405
|
+
### Added
|
|
406
|
+
|
|
253
407
|
- Add support for namespaced transition models (patch by [@DanielWright](https://github.com/DanielWright))
|
|
254
408
|
|
|
255
409
|
## v1.2.1, 24 March 2015
|
|
256
410
|
|
|
411
|
+
### Added
|
|
412
|
+
|
|
257
413
|
- Add support for Postgres 9.4's `jsonb` column type (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
258
414
|
|
|
259
415
|
## v1.2.0, 18 March 2015
|
|
260
416
|
|
|
261
|
-
|
|
417
|
+
### Added
|
|
262
418
|
|
|
263
419
|
- Add a `most_recent` column to transition tables to greatly speed up queries (ActiveRecord adapter only).
|
|
264
420
|
- All queries are backwards-compatible, so everything still works without the new column.
|
|
265
421
|
- The upgrade path is:
|
|
266
422
|
- Generate and run a migration for adding the column, by running `rails generate statesman:add_most_recent <ParentModel> <TransitionModel>`.
|
|
267
|
-
- Backfill the `most_recent` column on old records by running `rake statesman:backfill_most_recent[ParentModel]
|
|
423
|
+
- Backfill the `most_recent` column on old records by running `rake statesman:backfill_most_recent[ParentModel]`.
|
|
268
424
|
- Add constraints and indexes to the transition table that make use of the new field, by running `rails g statesman:add_constraints_to_most_recent <ParentModel> <TransitionModel>`.
|
|
269
425
|
- The upgrade path has been designed to be zero-downtime, even on large tables. As a result, please note that queries will only use the `most_recent` field after the constraints have been added.
|
|
270
|
-
- `ActiveRecordQueries.{not_,}in_state` now accepts an array of states.
|
|
271
426
|
|
|
427
|
+
### Changed
|
|
428
|
+
|
|
429
|
+
- `ActiveRecordQueries.{not_,}in_state` now accepts an array of states.
|
|
272
430
|
|
|
273
431
|
## v1.1.0, 9 December 2014
|
|
274
|
-
|
|
432
|
+
|
|
433
|
+
### Fixed
|
|
275
434
|
|
|
276
435
|
- Support for Rails 4.2.0.rc2:
|
|
277
436
|
- Remove use of serialized_attributes when using 4.2+. (patch by [@greysteil](https://github.com/greysteil))
|
|
278
437
|
- Use reflect_on_association rather than directly using the reflections hash. (patch by [@timrogers](https://github.com/timrogers))
|
|
279
438
|
- Fix `ActiveRecordQueries.in_state` when `Model.initial_state` is defined as a symbol. (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
280
439
|
|
|
281
|
-
|
|
440
|
+
### Changed
|
|
282
441
|
|
|
283
442
|
- Transition metadata now defaults to `{}` rather than `nil`. (patch by [@greysteil](https://github.com/greysteil))
|
|
284
443
|
|
|
@@ -287,99 +446,126 @@ For details on our compatibility policy, see `docs/COMPATIBILITY.md`.
|
|
|
287
446
|
No changes from v1.0.0.beta2
|
|
288
447
|
|
|
289
448
|
## v1.0.0.beta2, 10 October 2014
|
|
290
|
-
|
|
449
|
+
|
|
450
|
+
### Breaking changes
|
|
291
451
|
|
|
292
452
|
- Rename `ActiveRecordModel` to `ActiveRecordQueries`, to reflect the fact that it mixes in some helpful scopes, but is not required.
|
|
293
453
|
|
|
294
454
|
## v1.0.0.beta1, 9 October 2014
|
|
295
|
-
|
|
455
|
+
|
|
456
|
+
### Breaking changes
|
|
296
457
|
|
|
297
458
|
- Classes which include `ActiveRecordModel` must define an `initial_state` class method.
|
|
298
459
|
|
|
299
|
-
|
|
460
|
+
### Fixed
|
|
300
461
|
|
|
301
|
-
- `ActiveRecordModel.in_state` and `ActiveRecordModel.not_in_state` now handle
|
|
462
|
+
- `ActiveRecordModel.in_state` and `ActiveRecordModel.not_in_state` now handle initial states correctly (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
302
463
|
|
|
303
|
-
|
|
464
|
+
### Added
|
|
304
465
|
|
|
305
466
|
- Transition tables created by generated migrations have `NOT NULL` constraints on `to_state`, `sort_key` and foreign key columns (patch by [@greysteil](https://github.com/greysteil))
|
|
306
467
|
- `before_transition` and `after_transition` allow an array of to states (patch by [@isaacseymour](https://github.com/isaacseymour))
|
|
307
468
|
|
|
308
469
|
## v0.8.3, 2 September 2014
|
|
309
|
-
|
|
470
|
+
|
|
471
|
+
### Fixed
|
|
310
472
|
|
|
311
473
|
- Optimisation for Machine#available_events (patch by [@pacso](https://github.com/pacso))
|
|
312
474
|
|
|
313
475
|
## v0.8.2, 2 September 2014
|
|
314
|
-
|
|
476
|
+
|
|
477
|
+
### Fixed
|
|
315
478
|
|
|
316
479
|
- Stop generating a default value for the metadata column if using MySQL.
|
|
317
480
|
|
|
318
481
|
## v0.8.1, 19 August 2014
|
|
319
|
-
|
|
482
|
+
|
|
483
|
+
### Fixed
|
|
320
484
|
|
|
321
485
|
- Adds check in Machine#transition to make sure the 'to' state is not an empty array (patch by [@barisbalic](https://github.com/barisbalic))
|
|
322
486
|
|
|
323
487
|
## v0.8.0, 29 June 2014
|
|
324
|
-
|
|
488
|
+
|
|
489
|
+
### Added
|
|
325
490
|
|
|
326
491
|
- Events. Machines can now define events as a logical grouping of transitions (patch by [@iurimatias](https://github.com/iurimatias))
|
|
327
492
|
- Retries. Individual transitions can be executed with a retry policy by wrapping the method call in a `Machine.retry_conflicts {}` block (patch by [@greysteil](https://github.com/greysteil))
|
|
328
493
|
|
|
329
494
|
## v0.7.0, 25 June 2014
|
|
330
|
-
|
|
495
|
+
|
|
496
|
+
### Added
|
|
331
497
|
|
|
332
498
|
- `Adapters::ActiveRecord` now handles `ActiveRecord::RecordNotUnique` errors explicitly and re-raises with a `Statesman::TransitionConflictError` if it is due to duplicate sort_keys (patch by [@greysteil](https://github.com/greysteil))
|
|
333
499
|
|
|
334
500
|
## v0.6.1, 21 May 2014
|
|
335
|
-
|
|
501
|
+
|
|
502
|
+
### Fixed
|
|
503
|
+
|
|
336
504
|
- Fixes an issue where the wrong transition was passed to after_transition callbacks for the second and subsequent transition of a given state machine (patch by [@alan](https://github.com/alan))
|
|
337
505
|
|
|
338
506
|
## v0.6.0, 19 May 2014
|
|
339
|
-
|
|
507
|
+
|
|
508
|
+
### Added
|
|
509
|
+
|
|
340
510
|
- Generators now handle namespaced classes (patch by [@hrmrebecca](https://github.com/hrmrebecca))
|
|
341
511
|
|
|
342
|
-
|
|
512
|
+
### Changed
|
|
513
|
+
|
|
343
514
|
- `Machine#transition_to` now only swallows Statesman generated errors. An exception in your guard or callback will no longer be caught by Statesman (patch by [@paulspringett](https://github.com/paulspringett))
|
|
344
515
|
|
|
345
516
|
## v0.5.0, 27 March 2014
|
|
346
|
-
|
|
517
|
+
|
|
518
|
+
### Added
|
|
519
|
+
|
|
347
520
|
- Scope methods. Adds a module which can be mixed in to an ActiveRecord model to provide `.in_state` and `.not_in_state` query scopes.
|
|
348
521
|
- Adds `Machine#after_initialize` hook (patch by [@att14](https://github.com/att14))
|
|
349
522
|
|
|
350
|
-
|
|
523
|
+
### Fixed
|
|
524
|
+
|
|
351
525
|
- Added MongoidTransition to the autoload statements, fixing [#29](https://github.com/gocardless/statesman/issues/29) (patch by [@tomclose](https://github.com/tomclose))
|
|
352
526
|
|
|
353
527
|
## v0.4.0, 27 February 2014
|
|
354
|
-
|
|
528
|
+
|
|
529
|
+
### Added
|
|
530
|
+
|
|
355
531
|
- Adds after_commit flag to after_transition for callbacks to be executed after the transaction has been
|
|
356
|
-
committed on the ActiveRecord adapter. These callbacks will still be executed on non transactional adapters.
|
|
532
|
+
committed on the ActiveRecord adapter. These callbacks will still be executed on non transactional adapters.
|
|
357
533
|
|
|
358
534
|
## v0.3.0, 20 February 2014
|
|
359
|
-
|
|
535
|
+
|
|
536
|
+
### Added
|
|
537
|
+
|
|
360
538
|
- Adds Machine#allowed_transitions method (patch by [@prikha](https://github.com/prikha))
|
|
361
539
|
|
|
362
540
|
## v0.2.1, 31 December 2013
|
|
363
|
-
|
|
541
|
+
|
|
542
|
+
### Fixed
|
|
543
|
+
|
|
364
544
|
- Don't add attr_accessible to generated transition model if running in Rails 4
|
|
365
545
|
|
|
366
546
|
## v0.2.0, 16 December 2013
|
|
367
|
-
|
|
547
|
+
|
|
548
|
+
### Added
|
|
549
|
+
|
|
368
550
|
- Adds Ruby 1.9.3 support (patch by [@jakehow](https://github.com/jakehow))
|
|
369
551
|
- All Mongo dependent tests are tagged so they can be excluded from test runs
|
|
370
552
|
|
|
371
|
-
|
|
553
|
+
### Changed
|
|
554
|
+
|
|
372
555
|
- Specs now crash immediately if Mongo is not running
|
|
373
556
|
|
|
374
557
|
## v0.1.0, 5 November 2013
|
|
375
558
|
|
|
376
|
-
|
|
559
|
+
### Added
|
|
560
|
+
|
|
377
561
|
- Adds Mongoid adapter and generators (patch by [@dluxemburg](https://github.com/dluxemburg))
|
|
378
562
|
|
|
379
|
-
|
|
563
|
+
### Changed
|
|
564
|
+
|
|
380
565
|
- Replaces `config#transition_class` with `Statesman::Adapters::ActiveRecordTransition` mixin. (inspired by [@cjbell88](https://github.com/cjbell88))
|
|
381
566
|
- Renames the active record transition generator from `statesman:transition` to `statesman:active_record_transition`.
|
|
382
567
|
- Moves to using `require_relative` internally where possible to avoid stomping on application load paths.
|
|
383
568
|
|
|
384
|
-
## v0.0.1, 28 October 2013
|
|
569
|
+
## v0.0.1, 28 October 2013
|
|
570
|
+
|
|
385
571
|
- Initial release
|
data/CONTRIBUTING.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
1
3
|
Thanks for taking an interest in contributing to Statesman, here are a few
|
|
2
4
|
ways you can help make this project better!
|
|
3
5
|
|
|
4
|
-
##
|
|
6
|
+
## Submitting pull requests
|
|
5
7
|
|
|
6
|
-
- Generally we welcome new features but please first open an issue where we
|
|
8
|
+
- Generally we welcome new features but please first open an issue where we
|
|
7
9
|
can discuss whether it fits with our vision for the project.
|
|
8
10
|
- Any new feature or bug fix needs an accompanying test case.
|
|
9
11
|
- No need to add to the changelog, we will take care of updating it as we make
|
|
@@ -17,23 +19,22 @@ request passes by running `rubocop`.
|
|
|
17
19
|
|
|
18
20
|
## Documentation
|
|
19
21
|
|
|
20
|
-
Please add a section to the readme for any new feature additions or
|
|
21
|
-
changes.
|
|
22
|
+
Please add a section to [the readme](README.md) for any new feature additions or behavioural changes.
|
|
22
23
|
|
|
23
24
|
## Releasing
|
|
24
25
|
|
|
25
|
-
We publish new versions of Stateman using [RubyGems](https://guides.rubygems.org/publishing/). Once
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
$ gem build statesman.gemspec
|
|
26
|
+
We publish new versions of Stateman using [RubyGems](https://guides.rubygems.org/publishing/). Once the relevant changes have been merged and `VERSION` has been appropriately bumped to the new version, we run the following command.
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
gem build statesman.gemspec
|
|
30
30
|
```
|
|
31
|
-
|
|
32
|
-
new version. For example, if we are releasing version 9.0.0, the file would be
|
|
31
|
+
|
|
32
|
+
This builds a `.gem` file locally that will be named something like `statesman-X` where `X` is the new version. For example, if we are releasing version 9.0.0, the file would be
|
|
33
33
|
`statesman-9.0.0.gem`.
|
|
34
34
|
|
|
35
35
|
To publish, run `gem push` with the new `.gem` file we just generated. This requires a OTP that is currently only available
|
|
36
36
|
to GoCardless engineers. For example, if we were to continue to publish version 9.0.0, we would run:
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
gem push statesman-9.0.0.gem
|
|
39
40
|
```
|
data/Gemfile
CHANGED
|
@@ -8,8 +8,23 @@ if ENV['RAILS_VERSION'] == 'main'
|
|
|
8
8
|
gem "rails", git: "https://github.com/rails/rails", branch: "main"
|
|
9
9
|
elsif ENV['RAILS_VERSION']
|
|
10
10
|
gem "rails", "~> #{ENV['RAILS_VERSION']}"
|
|
11
|
+
else
|
|
12
|
+
gem "rails", "~> 8.0"
|
|
11
13
|
end
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
gem "
|
|
14
|
+
|
|
15
|
+
group :development, :test do
|
|
16
|
+
gem "ammeter", "~> 1.1"
|
|
17
|
+
gem "bundler", "~> 2"
|
|
18
|
+
gem "gc_ruboconfig", "~> 5.0.0"
|
|
19
|
+
gem "mysql2", ">= 0.4", "< 0.6"
|
|
20
|
+
gem "pg", ">= 0.18", "<= 1.7"
|
|
21
|
+
gem "pry"
|
|
22
|
+
gem "rake", "~> 13.3.0"
|
|
23
|
+
gem "rspec", "~> 3.1"
|
|
24
|
+
gem "rspec-github", "~> 3.0.0"
|
|
25
|
+
gem "rspec-its", "~> 2.0"
|
|
26
|
+
gem "rspec-rails", "~> 8.0"
|
|
27
|
+
gem "sqlite3", "~> 2.7.3"
|
|
28
|
+
gem "test-unit", "~> 3.3"
|
|
29
|
+
gem "timecop", "~> 0.9.1"
|
|
15
30
|
end
|