audit_log 0.0.3 → 0.0.4

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.
data/lib/audit_log.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "audit_log/version"
2
- require "audit_log/current_thread"
3
2
  require "audit_log/controller"
4
3
  require "audit_log/mapping"
5
4
  require "audit_log/observer"
@@ -2,13 +2,7 @@ module AuditLog
2
2
 
3
3
  module Controller
4
4
 
5
- def self.included(controller)
6
- controller.before_filter :user_for_audit_log
7
- end
8
-
9
- def user_for_audit_log
10
- AuditLog::CurrentThread.who = current_user_for_audit_log
11
- end
5
+ attr_accessor :audited_model
12
6
 
13
7
  def current_user_for_audit_log
14
8
  current_user
@@ -1,17 +1,20 @@
1
1
  class AuditedModelsObserver < ActiveRecord::Observer
2
2
 
3
+ attr_accessor :controller
4
+
3
5
  def self.observed_classes
4
6
  AuditLog::Mapping.instance.audit_mappings.keys.collect{|model_as_symbol| model_as_symbol.to_s.camelize.constantize}
5
7
  end
6
8
 
9
+
7
10
  def before_validation(model)
8
- Thread.current[:auditing] ||= model
11
+ self.controller.audited_model ||= model
9
12
  end
10
13
 
11
14
  def after_create(model)
12
- if Thread.current[:auditing] == model
15
+ if self.controller.audited_model == model
13
16
  logged_model = LoggedModel.new(
14
- who: AuditLog::CurrentThread.who,
17
+ who: self.controller.current_user_for_audit_log,
15
18
  what: {id: model.id, event: :create},
16
19
  model_name: model.class.name,
17
20
  model_id: model.id
@@ -22,11 +25,11 @@ class AuditedModelsObserver < ActiveRecord::Observer
22
25
 
23
26
 
24
27
  def before_destroy(model)
25
- Thread.current[:auditing] ||= model
28
+ self.controller.audited_model ||= model
26
29
 
27
- if Thread.current[:auditing] == model
30
+ if self.controller.audited_model == model
28
31
  logged_model = LoggedModel.new(
29
- who: AuditLog::CurrentThread.who,
32
+ who: self.controller.current_user_for_audit_log,
30
33
  what: {id: model.id, event: :destroy},
31
34
  model_name: model.class.name,
32
35
  model_id: model.id
@@ -36,14 +39,14 @@ class AuditedModelsObserver < ActiveRecord::Observer
36
39
  end
37
40
 
38
41
  def after_update(model)
39
- if Thread.current[:auditing] == model
42
+ if self.controller.audited_model == model
40
43
  changes = Thread.current[:audited_model_changes]
41
44
 
42
45
  if changes
43
46
  what = WhatBuilder.new(changes).build
44
47
 
45
48
  logged_model = LoggedModel.new(
46
- who: AuditLog::CurrentThread.who,
49
+ who: self.controller.current_user_for_audit_log,
47
50
  what: what,
48
51
  model_name: model.class.name,
49
52
  model_id: model.id
@@ -54,7 +57,7 @@ class AuditedModelsObserver < ActiveRecord::Observer
54
57
  end
55
58
 
56
59
  def before_update(model)
57
- if Thread.current[:auditing] == model
60
+ if self.controller.audited_model == model
58
61
  if (model.changed? && !(model.changed_attributes.keys.collect{|attr| attr.to_sym}.uniq.sort - ignored_fields(model).uniq.sort).empty?) ||
59
62
  has_some_association_changed?(model)
60
63
  changes = {model: model, fields_updates: {}, has_many: {}, has_one: {}}
@@ -199,3 +202,26 @@ class AuditedModelsObserver < ActiveRecord::Observer
199
202
  end
200
203
 
201
204
  end
205
+
206
+ require 'singleton'
207
+
208
+ class ControllerInterceptor
209
+ include Singleton
210
+
211
+ def before(controller)
212
+ AuditedModelsObserver.instance.controller = controller
213
+ true
214
+ end
215
+
216
+ def after(controller)
217
+ AuditedModelsObserver.instance.controller = nil
218
+ end
219
+ end
220
+
221
+
222
+
223
+ if defined?(ActionController) and defined?(ActionController::Base)
224
+ ActionController::Base.class_eval do
225
+ around_filter ControllerInterceptor.instance
226
+ end
227
+ end
@@ -1,3 +1,3 @@
1
1
  module AuditLog
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: audit_log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-14 00:00:00.000000000Z
12
+ date: 2012-07-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &83520670 !ruby/object:Gem::Requirement
16
+ requirement: &82838150 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>'
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *83520670
24
+ version_requirements: *82838150
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &83520460 !ruby/object:Gem::Requirement
27
+ requirement: &82837940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *83520460
35
+ version_requirements: *82837940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &83520230 !ruby/object:Gem::Requirement
38
+ requirement: &82837710 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *83520230
46
+ version_requirements: *82837710
47
47
  description:
48
48
  email:
49
49
  - ti@connectere.agr.br
@@ -56,7 +56,6 @@ files:
56
56
  - lib/audit_log/observer.rb
57
57
  - lib/audit_log/logged_model.rb
58
58
  - lib/audit_log/mapping.rb
59
- - lib/audit_log/current_thread.rb
60
59
  - lib/generators/audit_log/templates/create_logged_models.rb
61
60
  - lib/generators/audit_log/install_generator.rb
62
61
  - lib/audit_log.rb
@@ -1,23 +0,0 @@
1
- module AuditLog
2
-
3
- class CurrentThread
4
-
5
- class << self
6
- def who=(user)
7
- auditing_data[:who] = user
8
- end
9
-
10
- def who
11
- auditing_data[:who]
12
- end
13
- end
14
-
15
- private
16
-
17
- def self.auditing_data
18
- Thread.current[:auditing_log] ||= {}
19
- end
20
-
21
- end
22
-
23
- end