mongoid-audit_log 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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