statesman 3.4.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +12 -4
- data/lib/statesman/adapters/active_record.rb +15 -2
- data/lib/statesman/version.rb +1 -1
- data/spec/statesman/adapters/active_record_spec.rb +13 -0
- data/spec/support/active_record.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7aa22275abdc014b0365e925fd1e6def087e00da45d407503807b948900ed786
|
|
4
|
+
data.tar.gz: 7e7b9319cb03f9d3f718c8bc47efec8dc3626dc197626eec8ff3cacb5cbbac24
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0a6a34ee714a7b860babe30605a362d0081950d8c662b013ed126b89f587fab7778064c4133d362b467d730e6a9513936b0938a436ce49373be725263dbb1f88
|
|
7
|
+
data.tar.gz: 36496a50080940acd1b97996435b8b3ece3c039140f216db6f1b6fee94d89c843e41e16a0def06b4699412a9c7886bdafe4236142d13a9f6d09aeee51e82f9f5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## v3.4.1, 14 February 2018 ❤️
|
|
2
|
+
|
|
3
|
+
- 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))
|
|
4
|
+
|
|
1
5
|
## v3.4.0, 12 February 2018
|
|
2
6
|
|
|
3
7
|
- 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))
|
data/README.md
CHANGED
|
@@ -29,7 +29,7 @@ protection.
|
|
|
29
29
|
To get started, just add Statesman to your `Gemfile`, and then run `bundle`:
|
|
30
30
|
|
|
31
31
|
```ruby
|
|
32
|
-
gem 'statesman', '~> 3.4.
|
|
32
|
+
gem 'statesman', '~> 3.4.1'
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Usage
|
|
@@ -121,7 +121,7 @@ Order.not_in_state(:checking_out) # => [#<Order id: "123">]
|
|
|
121
121
|
|
|
122
122
|
By default Statesman stores transition history in memory only. It can be
|
|
123
123
|
persisted by configuring Statesman to use a different adapter. For example,
|
|
124
|
-
ActiveRecord within Rails:
|
|
124
|
+
for ActiveRecord within Rails:
|
|
125
125
|
|
|
126
126
|
`config/initializers/statesman.rb`:
|
|
127
127
|
|
|
@@ -137,6 +137,10 @@ Generate the transition model:
|
|
|
137
137
|
$ rails g statesman:active_record_transition Order OrderTransition
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
+
Your transition class should
|
|
141
|
+
`include Statesman::Adapters::ActiveRecordTransition` if you're using the
|
|
142
|
+
ActiveRecord adapter.
|
|
143
|
+
|
|
140
144
|
If you're using the ActiveRecord adapter and decide not to include the default
|
|
141
145
|
`updated_at` column in your transition table, you'll need to configure the
|
|
142
146
|
`updated_timestamp_column` option on the transition class, setting it to another column
|
|
@@ -178,8 +182,12 @@ or 5. To do that
|
|
|
178
182
|
t.json :metadata, default: {}
|
|
179
183
|
```
|
|
180
184
|
|
|
181
|
-
* Remove `include Statesman::Adapters::ActiveRecordTransition` statement from
|
|
182
|
-
transition model
|
|
185
|
+
* Remove the `include Statesman::Adapters::ActiveRecordTransition` statement from
|
|
186
|
+
your transition model. (If you want to customise your transition class's "updated
|
|
187
|
+
timestamp column", as described above, you should define a
|
|
188
|
+
`.updated_timestamp_column` method on your class and return the name of the column
|
|
189
|
+
as a symbol, or `nil` if you don't want to record an updated timestamp on
|
|
190
|
+
transitions.)
|
|
183
191
|
|
|
184
192
|
## Configuration
|
|
185
193
|
|
|
@@ -123,7 +123,20 @@ module Statesman
|
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
def with_updated_timestamp(params)
|
|
126
|
-
|
|
126
|
+
# TODO: Once we've set expectations that transition classes should conform to
|
|
127
|
+
# the interface of Adapters::ActiveRecordTransition as a breaking change in the
|
|
128
|
+
# next major version, we can stop calling `#respond_to?` first and instead
|
|
129
|
+
# assume that there is a `.updated_timestamp_column` method we can call.
|
|
130
|
+
#
|
|
131
|
+
# At the moment, most transition classes will include the module, but not all,
|
|
132
|
+
# not least because it doesn't work with PostgreSQL JSON columns for metadata.
|
|
133
|
+
column = if @transition_class.respond_to?(:updated_timestamp_column)
|
|
134
|
+
@transition_class.updated_timestamp_column
|
|
135
|
+
else
|
|
136
|
+
ActiveRecordTransition::DEFAULT_UPDATED_TIMESTAMP_COLUMN
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
return params if column.nil?
|
|
127
140
|
|
|
128
141
|
timestamp = if ::ActiveRecord::Base.default_timezone == :utc
|
|
129
142
|
Time.now.utc
|
|
@@ -131,7 +144,7 @@ module Statesman
|
|
|
131
144
|
Time.now
|
|
132
145
|
end
|
|
133
146
|
|
|
134
|
-
params.merge(
|
|
147
|
+
params.merge(column => timestamp)
|
|
135
148
|
end
|
|
136
149
|
end
|
|
137
150
|
end
|
data/lib/statesman/version.rb
CHANGED
|
@@ -163,6 +163,19 @@ describe Statesman::Adapters::ActiveRecord, active_record: true do
|
|
|
163
163
|
to(change { previous_transition.reload.updated_at })
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
+
context "for a transition class without an updated timestamp column attribute" do
|
|
167
|
+
let!(:adapter) do
|
|
168
|
+
described_class.new(MyActiveRecordModelTransitionWithoutInclude,
|
|
169
|
+
model,
|
|
170
|
+
observer)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "defaults to touching the previous transition's updated_at timestamp" do
|
|
174
|
+
expect { Timecop.freeze(Time.now + 5.seconds) { create } }.
|
|
175
|
+
to(change { previous_transition.reload.updated_at })
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
166
179
|
context "with a custom updated timestamp column set" do
|
|
167
180
|
around do |example|
|
|
168
181
|
MyActiveRecordModelTransition.updated_timestamp_column.tap do |original_value|
|
|
@@ -40,6 +40,13 @@ class MyActiveRecordModelTransition < ActiveRecord::Base
|
|
|
40
40
|
serialize :metadata, JSON
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
class MyActiveRecordModelTransitionWithoutInclude < ActiveRecord::Base
|
|
44
|
+
self.table_name = "my_active_record_model_transitions"
|
|
45
|
+
|
|
46
|
+
belongs_to :my_active_record_model
|
|
47
|
+
serialize :metadata, JSON
|
|
48
|
+
end
|
|
49
|
+
|
|
43
50
|
class CreateMyActiveRecordModelMigration < MIGRATION_CLASS
|
|
44
51
|
def change
|
|
45
52
|
create_table :my_active_record_models do |t|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: statesman
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.4.
|
|
4
|
+
version: 3.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- GoCardless
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-02-
|
|
11
|
+
date: 2018-02-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ammeter
|