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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99754d2a1e8f4d7bba4cff5815b8bd6df8e8569f8817da525611e97a586d3114
4
- data.tar.gz: 9fe8b370070705d1eb5685bceaa82474b63f981a51b22911db337793dabe38ff
3
+ metadata.gz: adf2bbd729f0c0a53c0016389d8b8af4ca66cedede3343bb3376cf880edc447c
4
+ data.tar.gz: 640764fdbe148a2f8d0309350ae74358256b7cc9b530f0c35d0bc045ef736b4c
5
5
  SHA512:
6
- metadata.gz: d7122bfd0a99dd298a48597690267a050a8baac1c7d7152f16e2b5766b3e4fac60b1d334f1fdc897a35d6e5b9dd26019204497ec73386257c3eecbe02ea9e36a
7
- data.tar.gz: fea300d386237a044f3f57eb3fe94ac0109b5d8ec4e5704bcacdf80137bfeff8bb3df2ae05ee67baaaeee72b9f6a05f86cd8da625603d87b2fd9f801e27dd1c5
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: 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
@@ -1,3 +1,3 @@
1
1
  module RailsAuditLog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_audit_log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuck Smith