journaled 5.3.2 → 6.1.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 +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 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 462ff8ded176fdce16a0bafb2418f688f3a5ccf51f420e236f0a309b092701de
|
4
|
+
data.tar.gz: 7e98b4717bd113aad953752aa6145984b6a474724985bbe53f0bee9c5ffd8596
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26d5cc25cc1b0077e570894258dfb904c78814c8f8b79f1a35b26a6471b82835e477af8bec8bd42dbf5a1b04af07509352c5f7862d1d59a0d5392e33dac88471
|
7
|
+
data.tar.gz: 5ea7fcfbd043dbaf3cc762abaeb80bc7de35e9e4e44f260fbde912118cffff766928502cd79f38a6b2ae42a263465fa7973fd268a6c1747038fe4bfef9328bbf
|
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,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journaled
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Lipson
|
8
8
|
- Corey Alexander
|
9
9
|
- Cyrus Eslami
|
10
10
|
- John Mileham
|
11
|
-
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: activejob
|
@@ -89,14 +88,20 @@ dependencies:
|
|
89
88
|
requirements:
|
90
89
|
- - ">="
|
91
90
|
- !ruby/object:Gem::Version
|
92
|
-
version: '
|
91
|
+
version: '7.2'
|
92
|
+
- - "<"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '8.1'
|
93
95
|
type: :runtime
|
94
96
|
prerelease: false
|
95
97
|
version_requirements: !ruby/object:Gem::Requirement
|
96
98
|
requirements:
|
97
99
|
- - ">="
|
98
100
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
101
|
+
version: '7.2'
|
102
|
+
- - "<"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '8.1'
|
100
105
|
- !ruby/object:Gem::Dependency
|
101
106
|
name: appraisal
|
102
107
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,20 +186,6 @@ dependencies:
|
|
181
186
|
- - ">="
|
182
187
|
- !ruby/object:Gem::Version
|
183
188
|
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
189
|
- !ruby/object:Gem::Dependency
|
199
190
|
name: timecop
|
200
191
|
requirement: !ruby/object:Gem::Requirement
|
@@ -312,15 +303,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
312
303
|
requirements:
|
313
304
|
- - ">="
|
314
305
|
- !ruby/object:Gem::Version
|
315
|
-
version: '2
|
306
|
+
version: '3.2'
|
316
307
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
317
308
|
requirements:
|
318
309
|
- - ">="
|
319
310
|
- !ruby/object:Gem::Version
|
320
311
|
version: '0'
|
321
312
|
requirements: []
|
322
|
-
rubygems_version: 3.
|
323
|
-
signing_key:
|
313
|
+
rubygems_version: 3.6.8
|
324
314
|
specification_version: 4
|
325
315
|
summary: Journaling for Betterment apps.
|
326
316
|
test_files: []
|