sequel-state-machine 1.2.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94b067e5d260a2c467a1f1b8b4ec206054c29ab7fc54a86d2b5a89cc7a6620b1
4
- data.tar.gz: aea214e6ab04cb78cffc4d580ae1de70011d9f0052562aa3649c217447d9ae0b
3
+ metadata.gz: d5f7df6f4992d44e4fe205af0b2f52e510738ab27ca5e8b281908b095ccf2a96
4
+ data.tar.gz: ea9d6726c70aef22d907dbba0dd8e7dec1cc7cced63e0c425df997ed01312f64
5
5
  SHA512:
6
- metadata.gz: 9e8ee131d5e6da8495c7fb998ca81fbfdb43f8a6b7feb52bb919011e51d2d79c38ca190ba12fbf3d866d4aaf0484ae5db7601f903aec162736abdea1f6f05187
7
- data.tar.gz: de91701d5ae07856d516c64963cfb988b12333c1e2bcc929f29d37cabad1cc779929cc9d07216fd6af6afb8780e19a2714b40dbb497918b32ca0e1971ce0cd64
6
+ metadata.gz: b338921fe0d5784d5d3f397539ca806cf929be159727dae311c0ad61123b4997809ec15fe1e7586c7e8851894b1d35deda749f6f7fb6afba32f4b1da1e62266e
7
+ data.tar.gz: d6d58511606654d184e4cb9562ffc4a2d3ed7d8a6eab7c4607ed23ca8401a0bfef1499d3d372cf89983d5659d62c512f619119c024170450d7ec80dd11737e9c
@@ -83,6 +83,16 @@ module Sequel
83
83
  return alog
84
84
  end
85
85
 
86
+ # Commit pending changes to the audit log.
87
+ # This involves either:
88
+ # - Updating the last audit log step, if it matches our current criteria (event, from state, to state),
89
+ # - or creating a new audit log entry.
90
+ # This ensures that we have the following behavior:
91
+ # - Failed transitions - ie where from and to state are the same - do not add multiple audit log steps.
92
+ # Only the latest failed transition is recorded.
93
+ # - Successful transitions are always recorded. If we transition, a->b->c,
94
+ # and then reset the state machine to 'a' and transition a->b->c again,
95
+ # we'd end up with 5 transitions (a->b->c->a->b->c).
86
96
  def commit_audit_log(transition)
87
97
  machine = self.class.state_machines.length > 1 ? transition.machine.name : nil
88
98
  StateMachines::Sequel.log(
@@ -90,19 +100,20 @@ module Sequel
90
100
  )
91
101
  current = self.current_audit_log(machine: machine)
92
102
 
93
- last_saved = self.audit_logs.find do |a|
94
- a.sequel_state_machine_get(:event) == transition.event.to_s &&
95
- a.sequel_state_machine_get(:from_state) == transition.from &&
96
- a.sequel_state_machine_get(:to_state) == transition.to
97
- end
98
- if last_saved
99
- StateMachines::Sequel.log(self, :debug, "updating_audit_log", {audit_log_id: last_saved.id})
100
- last_saved.update(**last_saved.sequel_state_machine_map_columns(
103
+ last_log = self.audit_logs.last
104
+ can_update_last = last_log &&
105
+ last_log.sequel_state_machine_get(:event) == transition.event.to_s &&
106
+ last_log.sequel_state_machine_get(:from_state) == transition.from &&
107
+ last_log.sequel_state_machine_get(:to_state) == transition.to
108
+ if can_update_last
109
+ StateMachines::Sequel.log(self, :debug, "updating_audit_log", {audit_log_id: last_log.id})
110
+ mapped_values = last_log.sequel_state_machine_map_columns(
101
111
  at: Time.now,
102
112
  actor: StateMachines::Sequel.current_actor,
103
- messages: current.messages,
113
+ messages: current.messages || (current.class.state_machine_messages_supports_array ? [] : ""),
104
114
  reason: current.reason,
105
- ))
115
+ )
116
+ last_log.update(**mapped_values)
106
117
  else
107
118
  StateMachines::Sequel.log(self, :debug, "creating_audit_log", {})
108
119
  current.set(**current.sequel_state_machine_map_columns(
@@ -124,7 +135,7 @@ module Sequel
124
135
  audlog.messages << message
125
136
  else
126
137
  audlog.messages ||= ""
127
- audlog.messages += (audlog.messages.empty? ? message : (message + "\n"))
138
+ audlog.messages += (audlog.messages.empty? ? message : ("\n" + message))
128
139
  end
129
140
  audlog.reason = reason if reason
130
141
  return audlog
@@ -76,7 +76,7 @@ module Sequel
76
76
 
77
77
  def full_message
78
78
  msg = self.sequel_state_machine_get(:messages)
79
- return self.class.state_machine_messages_supports_array ? msg.join(", ") : msg
79
+ return self.class.state_machine_messages_supports_array ? msg.join("\n") : msg
80
80
  end
81
81
 
82
82
  def sequel_state_machine_get(unmapped)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module StateMachines
4
4
  module Sequel
5
- VERSION = "1.2.2"
5
+ VERSION = "1.4.0"
6
6
  end
7
7
  end
@@ -16,7 +16,7 @@ module StateMachines
16
16
  if obj.respond_to?(:audit_logs) && !obj.audit_logs.empty?
17
17
  @audit_log = obj.audit_logs.max_by(&:id)
18
18
  msg += ": #{@audit_log.full_message}"
19
- msg = msg.tr("\n", " ").strip
19
+ msg = msg.gsub("\n", ", ").strip
20
20
  end
21
21
  super(obj, msg)
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-state-machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lithic Tech
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-25 00:00:00.000000000 Z
11
+ date: 2023-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -44,56 +44,70 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.11'
47
+ version: 1.25.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.11'
54
+ version: 1.25.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop-performance
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.10'
61
+ version: 1.13.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.10'
68
+ version: 1.13.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop-sequel
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: 0.3.3
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.2'
82
+ version: 0.3.3
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sequel
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '5.0'
89
+ version: '5.59'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '5.0'
96
+ version: '5.59'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sequel-postgres-pr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.6'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.6'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: simplecov
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -169,7 +183,7 @@ licenses:
169
183
  - MIT
170
184
  metadata:
171
185
  rubygems_mfa_required: 'true'
172
- post_install_message:
186
+ post_install_message:
173
187
  rdoc_options: []
174
188
  require_paths:
175
189
  - lib
@@ -184,8 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
198
  - !ruby/object:Gem::Version
185
199
  version: '0'
186
200
  requirements: []
187
- rubygems_version: 3.1.6
188
- signing_key:
201
+ rubygems_version: 3.4.6
202
+ signing_key:
189
203
  specification_version: 4
190
204
  summary: Hook together the excellent Ruby Sequel ORM to the state-machines library,
191
205
  with auditing and other tools.