audited 5.3.1 → 5.3.3
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/CHANGELOG.md +12 -0
- data/README.md +2 -2
- data/lib/audited/auditor.rb +9 -9
- data/lib/audited/version.rb +1 -1
- data/lib/audited.rb +2 -7
- data/spec/audited/auditor_spec.rb +22 -6
- data/spec/audited_spec.rb +2 -6
- data/spec/support/active_record/models.rb +5 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1979018213d9b4793bf6c450161759ad6e2ee8c0749c21c9c361bb012b703016
|
4
|
+
data.tar.gz: 113875c36e93998ef49e54e1ee65812996a28d553f5fd17c9a6252ea046f2cbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d490c64b590cc9df55d67551908bd450c2737f04d55201000c637122682aaf6c1df069cc61894774c1778ddb29488e0f6e22d5786f155f6415cb47c12fc45f5
|
7
|
+
data.tar.gz: 7801bb4dadea8bef4499f50115749cf589f59ffc795c950dbfdf918989311ec6a1380237ef0bbd05f1c1c9edcfe9c42ff5d66d3e44fb71666127fe57dfbcaaee
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Audited ChangeLog
|
2
2
|
|
3
|
+
## 5.3.3 (2023-03-24)
|
4
|
+
|
5
|
+
- Use RequestStore instead of Thread.current for thread-safe requests - @tiagocassio
|
6
|
+
[#669](https://github.com/collectiveidea/audited/pull/669)
|
7
|
+
- Clean up Touch audits - @mcyoung, @akostadinov
|
8
|
+
[#668](https://github.com/collectiveidea/audited/pull/668)
|
9
|
+
|
10
|
+
## 5.3.2 (2023-02-22)
|
11
|
+
|
12
|
+
- Touch audit bug fixes - @mcyoung
|
13
|
+
[#662](https://github.com/collectiveidea/audited/pull/662)
|
14
|
+
|
3
15
|
## 5.3.1 (2023-02-21)
|
4
16
|
|
5
17
|
- Ensure touch support doesn't cause double audits - @mcyoung
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ Audited is currently ActiveRecord-only. In a previous life, Audited worked with
|
|
37
37
|
Add the gem to your Gemfile:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
gem "audited"
|
40
|
+
gem "audited"
|
41
41
|
```
|
42
42
|
|
43
43
|
And if you're using ```require: false``` you must add initializers like this:
|
@@ -238,7 +238,7 @@ class ApplicationController < ActionController::Base
|
|
238
238
|
if current_user
|
239
239
|
current_user
|
240
240
|
else
|
241
|
-
'
|
241
|
+
'Alexander Fleming'
|
242
242
|
end
|
243
243
|
end
|
244
244
|
end
|
data/lib/audited/auditor.rb
CHANGED
@@ -233,12 +233,12 @@ module Audited
|
|
233
233
|
|
234
234
|
def audited_changes(for_touch: false)
|
235
235
|
all_changes = if for_touch
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
236
|
+
previous_changes
|
237
|
+
elsif respond_to?(:changes_to_save)
|
238
|
+
changes_to_save
|
239
|
+
else
|
240
|
+
changes
|
241
|
+
end
|
242
242
|
|
243
243
|
filtered_changes = \
|
244
244
|
if audited_options[:only].present?
|
@@ -247,10 +247,10 @@ module Audited
|
|
247
247
|
all_changes.except(*self.class.non_audited_columns)
|
248
248
|
end
|
249
249
|
|
250
|
-
if for_touch
|
250
|
+
if for_touch && (last_audit = audits.last&.audited_changes)
|
251
251
|
filtered_changes.reject! do |k, v|
|
252
|
-
|
253
|
-
|
252
|
+
last_audit[k].to_json == v.to_json ||
|
253
|
+
last_audit[k].to_json == v[1].to_json
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
data/lib/audited/version.rb
CHANGED
data/lib/audited.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_record"
|
4
|
+
require "request_store"
|
4
5
|
|
5
6
|
module Audited
|
6
7
|
class << self
|
@@ -24,13 +25,7 @@ module Audited
|
|
24
25
|
deprecate audit_model: "use Audited.audit_class instead of Audited.audit_model. This method will be removed."
|
25
26
|
|
26
27
|
def store
|
27
|
-
|
28
|
-
|
29
|
-
if current_store_value.nil?
|
30
|
-
Thread.current.thread_variable_set(:audited_store, {})
|
31
|
-
else
|
32
|
-
current_store_value
|
33
|
-
end
|
28
|
+
RequestStore.store[:audited_store] ||= {}
|
34
29
|
end
|
35
30
|
|
36
31
|
def config
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
# not testing proxy_respond_to? hack / 2 methods / deprecation of `version`
|
4
|
-
# also, an additional
|
5
|
-
uncovered = ActiveRecord::VERSION::MAJOR < 6 ?
|
4
|
+
# also, an additional 6 around `after_touch` for Versions before 6.
|
5
|
+
uncovered = (ActiveRecord::VERSION::MAJOR < 6) ? 15 : 9
|
6
6
|
SingleCov.covered! uncovered: uncovered
|
7
7
|
|
8
8
|
class ConditionalPrivateCompany < ::ActiveRecord::Base
|
@@ -234,9 +234,9 @@ describe Audited::Auditor do
|
|
234
234
|
# If we haven't changed any attrs from 'redacted' list, audit should not contain these keys
|
235
235
|
user.name = "new name"
|
236
236
|
user.save!
|
237
|
-
expect(user.audits.last.audited_changes).to have_key(
|
238
|
-
expect(user.audits.last.audited_changes).not_to have_key(
|
239
|
-
expect(user.audits.last.audited_changes).not_to have_key(
|
237
|
+
expect(user.audits.last.audited_changes).to have_key("name")
|
238
|
+
expect(user.audits.last.audited_changes).not_to have_key("password")
|
239
|
+
expect(user.audits.last.audited_changes).not_to have_key("ssn")
|
240
240
|
end
|
241
241
|
|
242
242
|
it "should redact columns in 'redacted' column with custom option" do
|
@@ -462,8 +462,24 @@ describe Audited::Auditor do
|
|
462
462
|
}.to_not change(Audited::Audit, :count)
|
463
463
|
end
|
464
464
|
|
465
|
+
it "should store an audit if touch is the only audit" do
|
466
|
+
on_touch = Models::ActiveRecord::OnTouchOnly.create(name: "Bart")
|
467
|
+
expect {
|
468
|
+
on_touch.update(name: "NotBart")
|
469
|
+
}.to_not change(Audited::Audit, :count)
|
470
|
+
expect {
|
471
|
+
on_touch.touch(:suspended_at)
|
472
|
+
}.to change(on_touch.audits, :count).from(0).to(1)
|
473
|
+
|
474
|
+
@user.audits.destroy_all
|
475
|
+
expect(@user.audits).to be_empty
|
476
|
+
expect {
|
477
|
+
@user.touch(:suspended_at)
|
478
|
+
}.to change(@user.audits, :count).from(0).to(1)
|
479
|
+
end
|
480
|
+
|
465
481
|
context "don't double audit" do
|
466
|
-
let(:user) { Models::ActiveRecord::Owner.create(name: "OwnerUser", suspended_at: 1.month.ago, companies_attributes: [{
|
482
|
+
let(:user) { Models::ActiveRecord::Owner.create(name: "OwnerUser", suspended_at: 1.month.ago, companies_attributes: [{name: "OwnedCompany"}]) }
|
467
483
|
let(:company) { user.companies.first }
|
468
484
|
|
469
485
|
it "should only create 1 (create) audit for object" do
|
data/spec/audited_spec.rb
CHANGED
@@ -3,16 +3,12 @@ require "spec_helper"
|
|
3
3
|
describe Audited do
|
4
4
|
describe "#store" do
|
5
5
|
describe "maintains state of store" do
|
6
|
-
let(:current_user) {
|
6
|
+
let(:current_user) { RequestStore.store[:audited_store] }
|
7
7
|
before { Audited.store[:current_user] = current_user }
|
8
8
|
|
9
|
-
it "
|
9
|
+
it "checks store is not nil" do
|
10
10
|
expect(Audited.store[:current_user]).to eq(current_user)
|
11
11
|
end
|
12
|
-
|
13
|
-
it "when executed with Fibers" do
|
14
|
-
Fiber.new { expect(Audited.store[:current_user]).to eq(current_user) }.resume
|
15
|
-
end
|
16
12
|
end
|
17
13
|
end
|
18
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: audited
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.3.
|
4
|
+
version: 5.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Keepers
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2023-
|
16
|
+
date: 2023-04-24 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: activerecord
|
@@ -35,6 +35,20 @@ dependencies:
|
|
35
35
|
- - "<"
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '7.1'
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: request_store
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - "~>"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '1.2'
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - "~>"
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '1.2'
|
38
52
|
- !ruby/object:Gem::Dependency
|
39
53
|
name: appraisal
|
40
54
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
266
|
- !ruby/object:Gem::Version
|
253
267
|
version: '0'
|
254
268
|
requirements: []
|
255
|
-
rubygems_version: 3.4.
|
269
|
+
rubygems_version: 3.4.7
|
256
270
|
signing_key:
|
257
271
|
specification_version: 4
|
258
272
|
summary: Log all changes to your models
|