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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +7 -0
  3. data/.github/workflows/tests.yml +112 -0
  4. data/.gitignore +65 -15
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +14 -1
  7. data/.rubocop_todo.yml +37 -28
  8. data/.ruby-version +1 -0
  9. data/CHANGELOG.md +262 -41
  10. data/CONTRIBUTING.md +23 -4
  11. data/Gemfile +4 -6
  12. data/README.md +243 -43
  13. data/docs/COMPATIBILITY.md +2 -2
  14. data/lib/generators/statesman/active_record_transition_generator.rb +1 -1
  15. data/lib/generators/statesman/generator_helpers.rb +12 -4
  16. data/lib/statesman/adapters/active_record.rb +84 -55
  17. data/lib/statesman/adapters/active_record_queries.rb +19 -7
  18. data/lib/statesman/adapters/active_record_transition.rb +5 -1
  19. data/lib/statesman/adapters/memory.rb +5 -1
  20. data/lib/statesman/adapters/type_safe_active_record_queries.rb +21 -0
  21. data/lib/statesman/callback.rb +2 -2
  22. data/lib/statesman/config.rb +3 -10
  23. data/lib/statesman/exceptions.rb +13 -7
  24. data/lib/statesman/guard.rb +1 -1
  25. data/lib/statesman/machine.rb +68 -0
  26. data/lib/statesman/version.rb +1 -1
  27. data/lib/statesman.rb +5 -5
  28. data/lib/tasks/statesman.rake +5 -5
  29. data/spec/generators/statesman/active_record_transition_generator_spec.rb +7 -1
  30. data/spec/generators/statesman/migration_generator_spec.rb +5 -1
  31. data/spec/spec_helper.rb +44 -7
  32. data/spec/statesman/adapters/active_record_queries_spec.rb +34 -12
  33. data/spec/statesman/adapters/active_record_spec.rb +176 -51
  34. data/spec/statesman/adapters/active_record_transition_spec.rb +5 -2
  35. data/spec/statesman/adapters/memory_spec.rb +0 -1
  36. data/spec/statesman/adapters/memory_transition_spec.rb +0 -1
  37. data/spec/statesman/adapters/shared_examples.rb +3 -4
  38. data/spec/statesman/adapters/type_safe_active_record_queries_spec.rb +206 -0
  39. data/spec/statesman/callback_spec.rb +0 -2
  40. data/spec/statesman/config_spec.rb +0 -2
  41. data/spec/statesman/exceptions_spec.rb +17 -4
  42. data/spec/statesman/guard_spec.rb +0 -2
  43. data/spec/statesman/machine_spec.rb +252 -15
  44. data/spec/statesman/utils_spec.rb +0 -2
  45. data/spec/support/active_record.rb +156 -24
  46. data/spec/support/exactly_query_databases.rb +35 -0
  47. data/statesman.gemspec +9 -10
  48. metadata +32 -59
  49. 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/#409)
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/#398)
19
- - Handle transitions differently for MySQL [#399](https://github.com/gocardless/statesman/pull/#399)
20
- - pg requirement from >= 0.18, <= 1.1 to >= 0.18, <= 1.3 [#400](https://github.com/gocardless/statesman/pull/#400)
21
- - Lazily enable mysql gaplock protection [#402](https://github.com/gocardless/statesman/pull/#402)
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
- **Breaking changes**
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
- **Breaking changes**
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: :inital,
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
- - Add better support for mysql (and others) in `transition_conflict_error?` [@greysteil](https://github.com/greysteil) (https://github.com/gocardless/statesman/pull/342)
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
- - Forces Statesman to use a new transactions with `requires_new: true` (https://github.com/gocardless/statesman/pull/249)
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
- *Breaking changes*
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
- *Changes*
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
- *Breaking changes*
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
- *Changes*
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
- *Changes*
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
- *Fixes*
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
- *Changes*
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
- *Breaking changes*
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
- *Breaking changes*
446
+
447
+ ### Breaking changes
252
448
 
253
449
  - Classes which include `ActiveRecordModel` must define an `initial_state` class method.
254
450
 
255
- *Fixes*
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
- *Additions*
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
- *Fixes*
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
- *Fixes*
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
- *Fixes*
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
- *Additions*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
498
+
499
+ ### Added
500
+
296
501
  - Generators now handle namespaced classes (patch by [@hrmrebecca](https://github.com/hrmrebecca))
297
502
 
298
- *Changes*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
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
- *Additions*
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
- *Fixes*
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
- *Additions*
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
- *Changes*
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
- *Additions*
550
+ ### Added
551
+
333
552
  - Adds Mongoid adapter and generators (patch by [@dluxemburg](https://github.com/dluxemburg))
334
553
 
335
- *Changes*
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
- ## 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,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 behaviour
21
- changes.
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
- # rubocop:disable Bundler/DuplicatedGem
8
- if ENV['RAILS_VERSION'] == 'master'
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
- # test/unit is no longer bundled with Ruby 2.2, but required by Rails
17
- gem "test-unit", "~> 3.3" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
14
+ gem "pry"
15
+ gem "test-unit", "~> 3.3"
18
16
  end