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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/devcontainer.json +31 -0
  3. data/.devcontainer/docker-compose.yml +39 -0
  4. data/.github/workflows/tests.yml +130 -0
  5. data/.gitignore +65 -15
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +11 -1
  8. data/.rubocop_todo.yml +23 -38
  9. data/.ruby-version +1 -1
  10. data/CHANGELOG.md +229 -43
  11. data/CONTRIBUTING.md +14 -13
  12. data/Gemfile +18 -3
  13. data/README.md +203 -74
  14. data/docs/COMPATIBILITY.md +3 -3
  15. data/lib/generators/statesman/active_record_transition_generator.rb +1 -1
  16. data/lib/generators/statesman/generator_helpers.rb +2 -2
  17. data/lib/statesman/adapters/active_record.rb +69 -52
  18. data/lib/statesman/adapters/active_record_queries.rb +15 -7
  19. data/lib/statesman/adapters/active_record_transition.rb +5 -1
  20. data/lib/statesman/adapters/memory.rb +1 -1
  21. data/lib/statesman/adapters/type_safe_active_record_queries.rb +21 -0
  22. data/lib/statesman/callback.rb +2 -2
  23. data/lib/statesman/config.rb +3 -10
  24. data/lib/statesman/exceptions.rb +9 -7
  25. data/lib/statesman/guard.rb +1 -1
  26. data/lib/statesman/machine.rb +60 -0
  27. data/lib/statesman/version.rb +1 -1
  28. data/lib/statesman.rb +5 -5
  29. data/lib/tasks/statesman.rake +5 -5
  30. data/spec/generators/statesman/active_record_transition_generator_spec.rb +7 -1
  31. data/spec/generators/statesman/migration_generator_spec.rb +5 -1
  32. data/spec/spec_helper.rb +44 -7
  33. data/spec/statesman/adapters/active_record_queries_spec.rb +8 -10
  34. data/spec/statesman/adapters/active_record_spec.rb +144 -55
  35. data/spec/statesman/adapters/active_record_transition_spec.rb +5 -2
  36. data/spec/statesman/adapters/memory_spec.rb +0 -1
  37. data/spec/statesman/adapters/memory_transition_spec.rb +0 -1
  38. data/spec/statesman/adapters/shared_examples.rb +6 -7
  39. data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +206 -0
  40. data/spec/statesman/callback_spec.rb +0 -2
  41. data/spec/statesman/config_spec.rb +0 -2
  42. data/spec/statesman/exceptions_spec.rb +8 -4
  43. data/spec/statesman/guard_spec.rb +0 -2
  44. data/spec/statesman/machine_spec.rb +231 -19
  45. data/spec/statesman/utils_spec.rb +0 -2
  46. data/spec/support/active_record.rb +156 -29
  47. data/spec/support/exactly_query_databases.rb +35 -0
  48. data/statesman.gemspec +2 -17
  49. metadata +14 -238
  50. 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
- ### Changed
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
- ### Changed
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
- `.to_s` diverged when `from` and `to` accessors where added in v4.1.3
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
- **Breaking changes**
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
- **Breaking changes**
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
- - Add better support for mysql (and others) in `transition_conflict_error?` [@greysteil](https://github.com/greysteil) (https://github.com/gocardless/statesman/pull/342)
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
- - Forces Statesman to use a new transactions with `requires_new: true` (https://github.com/gocardless/statesman/pull/249)
267
+ ### Fixed
268
+
148
269
  - Fixes an issue with `after_commit` transition blocks that where being
149
- executed even if the transaction rolled back. ([patch](https://github.com/gocardless/statesman/pull/338) by [@matid](https://github.com/matid))
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
- sides of the query match up. Exposing this methods makes things easier if
155
- one side of the `or` uses `in_state` or `not_in_state`. (patch by [@adambutler](https://github.com/adambutler))
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
- *Breaking changes*
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
- *Changes*
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
- *Breaking changes*
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
- *Changes*
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
- *Changes*
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
- *Fixes*
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
- *Changes*
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
- *Breaking changes*
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
- *Breaking changes*
455
+
456
+ ### Breaking changes
296
457
 
297
458
  - Classes which include `ActiveRecordModel` must define an `initial_state` class method.
298
459
 
299
- *Fixes*
460
+ ### Fixed
300
461
 
301
- - `ActiveRecordModel.in_state` and `ActiveRecordModel.not_in_state` now handle inital states correctly (patch by [@isaacseymour](https://github.com/isaacseymour))
462
+ - `ActiveRecordModel.in_state` and `ActiveRecordModel.not_in_state` now handle initial states correctly (patch by [@isaacseymour](https://github.com/isaacseymour))
302
463
 
303
- *Additions*
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
- *Fixes*
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
- *Fixes*
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
- *Fixes*
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
- *Additions*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
507
+
508
+ ### Added
509
+
340
510
  - Generators now handle namespaced classes (patch by [@hrmrebecca](https://github.com/hrmrebecca))
341
511
 
342
- *Changes*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
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
- *Changes*
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
- *Additions*
559
+ ### Added
560
+
377
561
  - Adds Mongoid adapter and generators (patch by [@dluxemburg](https://github.com/dluxemburg))
378
562
 
379
- *Changes*
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
- ## Contributing
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 behaviour
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
- the relevant changes have been merged and `VERSION` has been appropriately bumped to the new
27
- version, we run the following command.
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
- This builds a `.gem` file locally that will be named something like `statesman-X` where `X` is the
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
- $ gem push statesman-9.0.0.gem
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
- group :development do
13
- # test/unit is no longer bundled with Ruby 2.2, but required by Rails
14
- gem "test-unit", "~> 3.3" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
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