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