journaled 5.3.2 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -1
- data/Rakefile +3 -0
- data/app/jobs/journaled/delivery_job.rb +1 -2
- data/app/models/concerns/journaled/changes.rb +29 -33
- data/app/models/journaled/audit_log/event.rb +1 -2
- data/config/initializers/change_protection.rb +2 -4
- data/lib/journaled/audit_log.rb +1 -1
- data/lib/journaled/relation_change_protection.rb +4 -4
- data/lib/journaled/version.rb +1 -1
- metadata +12 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdfecf071b843818742d6fedc649d57e793e9abbd18906b09245124327ac4705
|
4
|
+
data.tar.gz: d92147f78529cbdbeeed3216c4ab14d0cfbcad9d716f3bff4a3f8b6af99c99e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eed184d251e7068985f9283bd8e4d855d547eef9b8abe090127eb46306984354583d7051dab90c78d8e351575467ea5a1c9213ffa210438cd016ea766caeb427
|
7
|
+
data.tar.gz: a25aee3b51b832a793a1a1168c9d58660f208787e0ee21af190a95e6b0c6d7de76dd285a2bccd8abf05c48ba3dd726ed9bf71be0b96eeca602ac103feb0d3d0e
|
data/README.md
CHANGED
@@ -37,6 +37,21 @@ to use one of the following queue adapters:
|
|
37
37
|
`ActiveJob::Base.queue_adapter` is not in the above list, it will raise an exception
|
38
38
|
and prevent your application from performing unsafe journaling.**
|
39
39
|
|
40
|
+
The following configurations are __not supported__ by Journaled:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
config.active_job.enqueue_after_transaction_commit = :always
|
44
|
+
config.active_job.enqueue_after_transaction_commit = true
|
45
|
+
```
|
46
|
+
|
47
|
+
If you're using Rails 7.2 with the `:test` adapter, please use the following configuration:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
config.active_job.enqueue_after_transaction_commit = :never
|
51
|
+
```
|
52
|
+
|
53
|
+
This configuration isn't necessary for applications running Rails 8+.
|
54
|
+
|
40
55
|
2. To integrate Journaled into your application, simply include the gem in your
|
41
56
|
app's Gemfile.
|
42
57
|
|
@@ -91,7 +106,7 @@ app's Gemfile.
|
|
91
106
|
|
92
107
|
Journaling provides a number of different configuation options that can be set in Ruby using an initializer. Those values are:
|
93
108
|
|
94
|
-
#### `Journaled.default_stream_name
|
109
|
+
#### `Journaled.default_stream_name`
|
95
110
|
|
96
111
|
This is described in the "Installation" section above, and is used to specify which stream name to use.
|
97
112
|
|
data/Rakefile
CHANGED
@@ -14,8 +14,7 @@ module Journaled
|
|
14
14
|
raise KinesisTemporaryFailure
|
15
15
|
end
|
16
16
|
|
17
|
-
def perform(*events
|
18
|
-
events << legacy_kwargs if legacy_kwargs.present?
|
17
|
+
def perform(*events)
|
19
18
|
@kinesis_records = events.map { |e| KinesisRecord.new(**e.delete_if { |_k, v| v.nil? }) }
|
20
19
|
|
21
20
|
journal! if Journaled.enabled?
|
@@ -27,34 +27,32 @@ module Journaled::Changes
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
#delete aborted by Journaled::Changes.
|
30
|
+
def delete(force: false)
|
31
|
+
if force || self.class.journaled_attribute_names.empty?
|
32
|
+
super()
|
33
|
+
else
|
34
|
+
raise(<<~ERROR)
|
35
|
+
#delete aborted by Journaled::Changes.
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
37
|
+
Call #destroy instead to ensure journaling or invoke #delete(force: true)
|
38
|
+
to override and skip journaling.
|
39
|
+
ERROR
|
42
40
|
end
|
41
|
+
end
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
def update_columns(attributes, opts = { force: false })
|
44
|
+
unless opts[:force] || self.class.journaled_attribute_names.empty?
|
45
|
+
conflicting_journaled_attribute_names = self.class.journaled_attribute_names & attributes.keys.map(&:to_sym)
|
46
|
+
raise(<<~ERROR) if conflicting_journaled_attribute_names.present?
|
47
|
+
#update_columns aborted by Journaled::Changes due to journaled attributes:
|
49
48
|
|
50
|
-
|
49
|
+
#{conflicting_journaled_attribute_names.join(', ')}
|
51
50
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
super(attributes)
|
51
|
+
Call #update instead to ensure journaling or invoke #update_columns
|
52
|
+
with additional arg `{ force: true }` to override and skip journaling.
|
53
|
+
ERROR
|
57
54
|
end
|
55
|
+
super(attributes)
|
58
56
|
end
|
59
57
|
|
60
58
|
class_methods do
|
@@ -70,18 +68,16 @@ module Journaled::Changes
|
|
70
68
|
journaled_enqueue_opts.merge!(enqueue_with)
|
71
69
|
end
|
72
70
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
.delete aborted by Journaled::Changes.
|
71
|
+
def delete(id_or_array, opts = { force: false })
|
72
|
+
if opts[:force] || journaled_attribute_names.empty?
|
73
|
+
where(primary_key => id_or_array).delete_all(force: true)
|
74
|
+
else
|
75
|
+
raise(<<~ERROR)
|
76
|
+
.delete aborted by Journaled::Changes.
|
80
77
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
78
|
+
Call .destroy(id_or_array) instead to ensure journaling or invoke
|
79
|
+
.delete(id_or_array, force: true) to override and skip journaling.
|
80
|
+
ERROR
|
85
81
|
end
|
86
82
|
end
|
87
83
|
end
|
@@ -75,8 +75,7 @@ module Journaled
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def encrypted_column?(key)
|
78
|
-
key.to_s.end_with?('_crypt', '_hmac') ||
|
79
|
-
(Rails::VERSION::MAJOR >= 7 && record.encrypted_attribute?(key))
|
78
|
+
key.to_s.end_with?('_crypt', '_hmac') || record.encrypted_attribute?(key)
|
80
79
|
end
|
81
80
|
|
82
81
|
def filter_params
|
@@ -1,6 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
ActiveRecord::Relation.class_eval { prepend Journaled::RelationChangeProtection }
|
6
|
-
end
|
3
|
+
require 'journaled/relation_change_protection'
|
4
|
+
ActiveRecord::Relation.class_eval { prepend Journaled::RelationChangeProtection }
|
data/lib/journaled/audit_log.rb
CHANGED
@@ -39,7 +39,7 @@ module Journaled
|
|
39
39
|
class << self
|
40
40
|
def exclude_classes!
|
41
41
|
excluded_classes.each do |name|
|
42
|
-
if Rails
|
42
|
+
if Rails.autoloaders.zeitwerk_enabled?
|
43
43
|
zeitwerk_exclude!(name)
|
44
44
|
else
|
45
45
|
classic_exclude!(name)
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
module Journaled::RelationChangeProtection
|
4
4
|
def update_all(updates, opts = { force: false }) # rubocop:disable Metrics/AbcSize
|
5
|
-
unless opts[:force] ||
|
5
|
+
unless opts[:force] || !model.respond_to?(:journaled_attribute_names) || model.journaled_attribute_names.empty?
|
6
6
|
conflicting_journaled_attribute_names = case updates
|
7
7
|
when Hash
|
8
|
-
|
8
|
+
model.journaled_attribute_names & updates.keys.map(&:to_sym)
|
9
9
|
when String
|
10
|
-
|
10
|
+
model.journaled_attribute_names.select do |a|
|
11
11
|
updates.match?(/\b(?<!')#{a}(?!')\b/)
|
12
12
|
end
|
13
13
|
else
|
@@ -26,7 +26,7 @@ module Journaled::RelationChangeProtection
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def delete_all(force: false)
|
29
|
-
if force ||
|
29
|
+
if force || !model.respond_to?(:journaled_attribute_names) || model.journaled_attribute_names.empty?
|
30
30
|
super()
|
31
31
|
else
|
32
32
|
raise(<<~ERROR)
|
data/lib/journaled/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journaled
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Lipson
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2025-01-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activejob
|
@@ -89,14 +89,20 @@ dependencies:
|
|
89
89
|
requirements:
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: '
|
92
|
+
version: '7.0'
|
93
|
+
- - "<"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '8.1'
|
93
96
|
type: :runtime
|
94
97
|
prerelease: false
|
95
98
|
version_requirements: !ruby/object:Gem::Requirement
|
96
99
|
requirements:
|
97
100
|
- - ">="
|
98
101
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
102
|
+
version: '7.0'
|
103
|
+
- - "<"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '8.1'
|
100
106
|
- !ruby/object:Gem::Dependency
|
101
107
|
name: appraisal
|
102
108
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,20 +187,6 @@ dependencies:
|
|
181
187
|
- - ">="
|
182
188
|
- !ruby/object:Gem::Version
|
183
189
|
version: '0'
|
184
|
-
- !ruby/object:Gem::Dependency
|
185
|
-
name: sqlite3
|
186
|
-
requirement: !ruby/object:Gem::Requirement
|
187
|
-
requirements:
|
188
|
-
- - "~>"
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
version: '1.4'
|
191
|
-
type: :development
|
192
|
-
prerelease: false
|
193
|
-
version_requirements: !ruby/object:Gem::Requirement
|
194
|
-
requirements:
|
195
|
-
- - "~>"
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: '1.4'
|
198
190
|
- !ruby/object:Gem::Dependency
|
199
191
|
name: timecop
|
200
192
|
requirement: !ruby/object:Gem::Requirement
|
@@ -312,14 +304,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
312
304
|
requirements:
|
313
305
|
- - ">="
|
314
306
|
- !ruby/object:Gem::Version
|
315
|
-
version: '2
|
307
|
+
version: '3.2'
|
316
308
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
317
309
|
requirements:
|
318
310
|
- - ">="
|
319
311
|
- !ruby/object:Gem::Version
|
320
312
|
version: '0'
|
321
313
|
requirements: []
|
322
|
-
rubygems_version: 3.5.
|
314
|
+
rubygems_version: 3.5.23
|
323
315
|
signing_key:
|
324
316
|
specification_version: 4
|
325
317
|
summary: Journaling for Betterment apps.
|