mongoid-audit_log 0.3.0 → 0.4.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
  SHA1:
3
- metadata.gz: 7c64fb48b393df395b00f96fd8f804df26a8c361
4
- data.tar.gz: 63e4405ba7cd83a09bb306fd569ec1beec6d6e10
3
+ metadata.gz: dd2a9b75ea8803b8c62a52e358adf073ca20cc92
4
+ data.tar.gz: '08ee1ca6dd2855610ac0f9e41da2a71f9072b5d5'
5
5
  SHA512:
6
- metadata.gz: 8a3d0d35183456d3d385340d9343be542293dd280f4c7e8e7fea8c3e0b738df4799144a7bb032edc7afd78b01dd1a2528a2df4b2bde6f9594b24d379b1a57f62
7
- data.tar.gz: ba9e4830088d3e14add3950bd29ea7f4f182136752db49235599aa76862d69ec5b7d075529e63b4e499ccbeebffc5a20b9ea92f642b253d35375bb054649b17a
6
+ metadata.gz: ca3fb108c8e8c6fcc11bc0cf2c9c3580ace95971c010b58fdba043035b08a754f583882562b720a89193c5f2cc7d4b93f37df578e913cfc569a7e56bc74f236b
7
+ data.tar.gz: 4fac09d329077517f1d6277d69929d3feb35410e712c9a119b9d42ff612755b0717ca1ef6a02c624937c3ebad5cfc474a6e91f62925f1bfde47e22473f698b31
data/README.md CHANGED
@@ -44,6 +44,11 @@ If you want to log the user who made the change, pass that user to the record me
44
44
  Mongoid::AuditLog.record(current_user) do
45
45
  Model.create!
46
46
  end
47
+
48
+ # or
49
+
50
+ Mongoid::AuditLog.current_modifier = current_user
51
+ Mongoid::AuditLog.enable
47
52
  ```
48
53
 
49
54
  A basic implementation in a Rails app might look something like:
@@ -24,20 +24,30 @@ module Mongoid
24
24
  end
25
25
 
26
26
  def self.record(modifier = nil)
27
- Thread.current[:mongoid_audit_log_recording] = true
28
- Thread.current[:mongoid_audit_log_modifier] = modifier
27
+ already_recording = recording?
28
+ enable unless already_recording
29
+ self.current_modifier = modifier
29
30
  yield
30
31
  ensure
31
- Thread.current[:mongoid_audit_log_recording] = nil
32
- Thread.current[:mongoid_audit_log_modifier] = nil
32
+ disable unless already_recording
33
+ self.current_modifier = nil
34
+ end
35
+
36
+ def self.enable
37
+ Thread.current[:mongoid_audit_log_recording] = true
33
38
  end
34
39
 
35
40
  def self.disable
36
- tmp = Thread.current[:mongoid_audit_log_recording]
41
+ already_recording = recording?
37
42
  Thread.current[:mongoid_audit_log_recording] = false
38
- yield
39
- ensure
40
- Thread.current[:mongoid_audit_log_recording] = tmp
43
+
44
+ if block_given?
45
+ begin
46
+ yield
47
+ ensure
48
+ Thread.current[:mongoid_audit_log_recording] = already_recording
49
+ end
50
+ end
41
51
  end
42
52
 
43
53
  def self.recording?
@@ -47,6 +57,10 @@ module Mongoid
47
57
  def self.current_modifier
48
58
  Thread.current[:mongoid_audit_log_modifier]
49
59
  end
60
+
61
+ def self.current_modifier=(modifier)
62
+ Thread.current[:mongoid_audit_log_modifier] = modifier
63
+ end
50
64
 
51
65
  private
52
66
 
@@ -61,7 +75,7 @@ module Mongoid
61
75
  :audited_type => self.class,
62
76
  :audited_id => id,
63
77
  :tracked_changes => @_audit_log_changes.all,
64
- :model_attributes => attributes.dup,
78
+ :model_attributes => attributes.deep_dup,
65
79
  :document_path => traverse_association_chain
66
80
  )
67
81
  end
@@ -10,7 +10,11 @@ module Mongoid
10
10
  field :model_attributes, :type => Hash
11
11
  field :document_path, :type => Array
12
12
 
13
- belongs_to :audited, :polymorphic => true
13
+ if Gem::Version.new(Mongoid::VERSION) < Gem::Version.new('6.0.0.beta')
14
+ belongs_to :audited, :polymorphic => true
15
+ else
16
+ belongs_to :audited, :polymorphic => true, :optional => true
17
+ end
14
18
 
15
19
  index({ :audited_id => 1, :audited_type => 1 })
16
20
  index({ :modifier_id => 1 })
@@ -28,7 +32,9 @@ module Mongoid
28
32
 
29
33
  def valid?(*)
30
34
  result = super
31
- self.modifier = Mongoid::AuditLog.current_modifier if result
35
+ if result && modifier.blank?
36
+ self.modifier = Mongoid::AuditLog.current_modifier
37
+ end
32
38
  result
33
39
  end
34
40
 
@@ -56,6 +62,8 @@ module Mongoid
56
62
  end
57
63
 
58
64
  def audited
65
+ return nil if audited_type.blank? || audited_id.blank?
66
+
59
67
  if for_embedded_doc?
60
68
  lookup_from_document_path
61
69
  else
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module AuditLog
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -68,6 +68,14 @@ module Mongoid
68
68
  end
69
69
  end
70
70
 
71
+ describe '#valid?' do
72
+ it 'does not override a manually set modifier' do
73
+ entry = Entry.new(:modifier_id => user.id)
74
+ entry.valid?
75
+ entry.modifier.should == user
76
+ end
77
+ end
78
+
71
79
  describe '#modifier' do
72
80
  it 'finds the modifier based on the configured class' do
73
81
  entry = Entry.new(:modifier_id => user.id)
@@ -84,6 +92,10 @@ module Mongoid
84
92
  entry = Entry.desc(:created_at).first
85
93
  entry.audited.should == option
86
94
  end
95
+
96
+ it 'returns nil if the audited info is blank' do
97
+ Entry.new.audited.should be_nil
98
+ end
87
99
  end
88
100
 
89
101
  describe '#modifier_id=' do
@@ -16,6 +16,8 @@ module Mongoid
16
16
  field :sku, :type => String
17
17
  embedded_in :product
18
18
  end
19
+
20
+ AuditLog.disable
19
21
  end
20
22
 
21
23
  after(:all) do
@@ -95,8 +97,31 @@ module Mongoid
95
97
  end
96
98
  end
97
99
 
100
+ describe '.enable' do
101
+ after(:each) do
102
+ AuditLog.disable
103
+ end
104
+
105
+ it 'starts recording' do
106
+ AuditLog.enable
107
+
108
+ product = Product.create!(:name => 'Foo bar')
109
+ product.audit_log_entries.count.should == 1
110
+ end
111
+ end
112
+
98
113
  describe '.disable' do
99
- it 'can disable recording' do
114
+ it 'stops recording' do
115
+ AuditLog.enable
116
+ AuditLog.disable
117
+
118
+ product = Product.create!(:name => 'Foo bar')
119
+ product.audit_log_entries.should be_empty
120
+ end
121
+
122
+ it 'can disable recording for a block' do
123
+ AuditLog.disable
124
+
100
125
  AuditLog.record do
101
126
  product = Product.create!(:name => 'Foo bar')
102
127
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-audit_log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Crouse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-17 00:00:00.000000000 Z
11
+ date: 2017-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: 1.3.6
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 2.5.1
100
+ rubygems_version: 2.5.2
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: No fancy versioning, undo, redo, etc. Just saves changes to Mongoid models