sequel-state-machine 1.2.2 → 1.4.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.
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.