state_machines-audit_trail 1.0.1 → 1.0.2
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/README.md +21 -3
- data/lib/state_machines/audit_trail/backend.rb +5 -0
- data/lib/state_machines/audit_trail/transition_auditing.rb +5 -3
- data/lib/state_machines/audit_trail/version.rb +1 -1
- data/spec/lib/state_machines/audit_trail/backend/active_record_spec.rb +17 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2be69a3ef20ae821d26c9cc330e19fe8d94d5a2
|
4
|
+
data.tar.gz: a4b55d4b850acf875c7489c1505c3c99152111a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d89506285ebdd527499b689a4bc9d08e7996ceaed99f4cb707941e8134a086f998b73d50f414702afbbd15abfa669dca1b24446da2fef56e647792bb971b9a1
|
7
|
+
data.tar.gz: f7e486a00886044b9763ad293d27c4fce800c52e968e0b689b431b23b3b3d321050a1c229921f8ab55ac17531c48db356734c0ee010719d9a42bdbc15f3f8754
|
data/README.md
CHANGED
@@ -97,7 +97,7 @@ In order to utilize this feature, you need to:
|
|
97
97
|
#### Example 1 - Store a single attribute value
|
98
98
|
Store `Subscription` `field1` in `Transition` field `field1`:
|
99
99
|
```ruby
|
100
|
-
audit_trail
|
100
|
+
audit_trail context: :field1
|
101
101
|
```
|
102
102
|
|
103
103
|
#### Example 2 - Store multiple attribute values
|
@@ -106,7 +106,25 @@ Store `Subscription` `field1` and `field2` in `Transition` fields `field1` and `
|
|
106
106
|
audit_trail context: [:field1, :field2]
|
107
107
|
```
|
108
108
|
|
109
|
-
#### Example 3 - Store
|
109
|
+
#### Example 3 - Store multiple values from a single context object
|
110
|
+
Store `Subscription` `user` in `Transition` fields `user_id` and `user_name`:
|
111
|
+
```ruby
|
112
|
+
class Subscription < ActiveRecord::Base
|
113
|
+
state_machines :state, initial: :start do
|
114
|
+
audit_trail context: :user
|
115
|
+
...
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class SubscriptionStateTransition < ActiveRecord::Base
|
120
|
+
def user=(u)
|
121
|
+
self.user_id = u.id
|
122
|
+
self.user_name = u.name
|
123
|
+
end
|
124
|
+
end
|
125
|
+
```
|
126
|
+
|
127
|
+
#### Example 4 - Store simple method results
|
110
128
|
Store simple method results.
|
111
129
|
|
112
130
|
Sometimes it can be useful to store dynamically computed information, such as those from a `Subscription` method `#plan_time_remaining`
|
@@ -123,7 +141,7 @@ class Subscription < ActiveRecord::Base
|
|
123
141
|
...
|
124
142
|
```
|
125
143
|
|
126
|
-
#### Example
|
144
|
+
#### Example 5 - Store advanced method results
|
127
145
|
Store method results that interrogate the transition for information such as `event` arguments:
|
128
146
|
|
129
147
|
```ruby
|
@@ -48,6 +48,11 @@ class StateMachines::AuditTrail::Backend < Struct.new(:transition_class, :owner_
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
# Exists in case ORM layer has a different way of answering this question, but works for most.
|
52
|
+
def new_record?(object)
|
53
|
+
object.new_record?
|
54
|
+
end
|
55
|
+
|
51
56
|
protected
|
52
57
|
|
53
58
|
def persist(object, fields)
|
@@ -30,9 +30,11 @@ module StateMachines::AuditTrail::TransitionAuditing
|
|
30
30
|
unless state_machine.action == nil
|
31
31
|
# Log the initial transition from null => initial (upon object instantiation)
|
32
32
|
state_machine.owner_class.after_initialize do |object|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
if state_machine.backend.new_record? object
|
34
|
+
current_state = object.send(state_machine.attribute)
|
35
|
+
if !current_state.nil?
|
36
|
+
state_machine.backend.log(object, OpenStruct.new(namespace: state_machine.namespace, to: current_state))
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -21,9 +21,7 @@ describe StateMachines::AuditTrail::Backend::ActiveRecord do
|
|
21
21
|
expect(target.new_record?).to be_falsey
|
22
22
|
expect(target.ar_model_state_transitions.count).to eq 1
|
23
23
|
state_transition = target.ar_model_state_transitions.first
|
24
|
-
|
25
|
-
expect(state_transition.to).to eq 'waiting'
|
26
|
-
expect(state_transition.event).to be_nil
|
24
|
+
assert_transition state_transition, nil, nil, 'waiting'
|
27
25
|
end
|
28
26
|
|
29
27
|
it 'create object' do
|
@@ -32,9 +30,13 @@ describe StateMachines::AuditTrail::Backend::ActiveRecord do
|
|
32
30
|
expect(target.new_record?).to be_falsey
|
33
31
|
expect(target.ar_model_state_transitions.count).to eq 1
|
34
32
|
state_transition = target.ar_model_state_transitions.first
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
assert_transition state_transition, nil, nil, 'waiting'
|
34
|
+
|
35
|
+
# ensure we don't have a second initial state transition logged (issue #4)
|
36
|
+
target = target.reload()
|
37
|
+
expect(target.ar_model_state_transitions.count).to eq 1
|
38
|
+
state_transition = target.ar_model_state_transitions.first
|
39
|
+
assert_transition state_transition, nil, nil, 'waiting'
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -261,4 +263,13 @@ describe StateMachines::AuditTrail::Backend::ActiveRecord do
|
|
261
263
|
expect { m.complete! }.not_to raise_error
|
262
264
|
end
|
263
265
|
end
|
266
|
+
|
267
|
+
private
|
268
|
+
|
269
|
+
def assert_transition(state_transition, event, from, to)
|
270
|
+
# expect(state_transition.namespace).to eq namespace
|
271
|
+
expect(state_transition.event).to eq event
|
272
|
+
expect(state_transition.from).to eq from
|
273
|
+
expect(state_transition.to).to eq to
|
274
|
+
end
|
264
275
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_machines-audit_trail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Ross
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-03
|
13
|
+
date: 2015-04-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: state_machines
|