rails_audit_log 0.2.0 → 0.3.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/app/concerns/rails_audit_log/auditable.rb +33 -1
- data/lib/rails_audit_log/version.rb +1 -1
- data/lib/rails_audit_log.rb +16 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: adf2bbd729f0c0a53c0016389d8b8af4ca66cedede3343bb3376cf880edc447c
|
|
4
|
+
data.tar.gz: 640764fdbe148a2f8d0309350ae74358256b7cc9b530f0c35d0bc045ef736b4c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 938374f49a4385c038124abb6aeb95eaa8369dccc20d8eb125e96071954c3b8858cb22dc94781bdfa31e96d006645df5bb07f989c83d4ca35d1792451cb82f07
|
|
7
|
+
data.tar.gz: 82f6ca3524c11b954705d62b576d11c8ae5008f49b26c973789d43466a6d1ab3d4462fd012885a0b83177220c8ceda83c381af5db07e0b371deafca1db14badc
|
|
@@ -3,6 +3,9 @@ module RailsAuditLog
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
+
class_attribute :_audit_log_only, default: nil
|
|
7
|
+
class_attribute :_audit_log_ignore, default: nil
|
|
8
|
+
|
|
6
9
|
has_many :audit_log_entries,
|
|
7
10
|
class_name: "RailsAuditLog::AuditLogEntry",
|
|
8
11
|
as: :item,
|
|
@@ -13,6 +16,17 @@ module RailsAuditLog
|
|
|
13
16
|
after_destroy :record_audit_destroy
|
|
14
17
|
end
|
|
15
18
|
|
|
19
|
+
class_methods do
|
|
20
|
+
def audit_log(only: nil, ignore: nil)
|
|
21
|
+
self._audit_log_only = only.map(&:to_s) if only
|
|
22
|
+
self._audit_log_ignore = ignore.map(&:to_s) if ignore
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def skip_audit_log
|
|
27
|
+
RailsAuditLog.disable { yield }
|
|
28
|
+
end
|
|
29
|
+
|
|
16
30
|
private
|
|
17
31
|
|
|
18
32
|
def record_audit_create
|
|
@@ -29,15 +43,33 @@ module RailsAuditLog
|
|
|
29
43
|
end
|
|
30
44
|
|
|
31
45
|
def record_audit_entry(event, changes)
|
|
46
|
+
return unless RailsAuditLog.enabled?
|
|
47
|
+
|
|
48
|
+
filtered = filter_changes(changes)
|
|
49
|
+
return if filtered.empty? && event == "update"
|
|
50
|
+
|
|
32
51
|
actor = RailsAuditLog.actor
|
|
33
52
|
RailsAuditLog::AuditLogEntry.create!(
|
|
34
53
|
event: event,
|
|
35
54
|
item_type: self.class.name,
|
|
36
55
|
item_id: id,
|
|
37
|
-
object_changes:
|
|
56
|
+
object_changes: filtered,
|
|
38
57
|
actor_type: actor&.class&.name,
|
|
39
58
|
actor_id: actor.respond_to?(:id) ? actor.id : nil
|
|
40
59
|
)
|
|
41
60
|
end
|
|
61
|
+
|
|
62
|
+
def filter_changes(changes)
|
|
63
|
+
result = changes.dup
|
|
64
|
+
|
|
65
|
+
if self.class._audit_log_only
|
|
66
|
+
result.select! { |k, _| self.class._audit_log_only.include?(k) }
|
|
67
|
+
else
|
|
68
|
+
ignored = self.class._audit_log_ignore || RailsAuditLog.ignored_attributes
|
|
69
|
+
result.reject! { |k, _| ignored.include?(k) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
result
|
|
73
|
+
end
|
|
42
74
|
end
|
|
43
75
|
end
|
data/lib/rails_audit_log.rb
CHANGED
|
@@ -2,6 +2,10 @@ require "rails_audit_log/version"
|
|
|
2
2
|
require "rails_audit_log/engine"
|
|
3
3
|
|
|
4
4
|
module RailsAuditLog
|
|
5
|
+
# Global default columns to ignore across all audited models.
|
|
6
|
+
# Override in an initializer: RailsAuditLog.ignored_attributes = %w[updated_at cached_at]
|
|
7
|
+
mattr_accessor :ignored_attributes, default: %w[updated_at]
|
|
8
|
+
|
|
5
9
|
def self.actor
|
|
6
10
|
Thread.current[:rails_audit_log_actor]
|
|
7
11
|
end
|
|
@@ -17,4 +21,16 @@ module RailsAuditLog
|
|
|
17
21
|
ensure
|
|
18
22
|
self.actor = previous
|
|
19
23
|
end
|
|
24
|
+
|
|
25
|
+
def self.enabled?
|
|
26
|
+
!Thread.current[:rails_audit_log_disabled]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.disable
|
|
30
|
+
previous = Thread.current[:rails_audit_log_disabled]
|
|
31
|
+
Thread.current[:rails_audit_log_disabled] = true
|
|
32
|
+
yield
|
|
33
|
+
ensure
|
|
34
|
+
Thread.current[:rails_audit_log_disabled] = previous
|
|
35
|
+
end
|
|
20
36
|
end
|