Skip to content
Browse files

Merge branch 'master' of https://github.com/jhoglund/paper_trail into…

… jhoglund-master

* 'master' of https://github.com/jhoglund/paper_trail:
  Edited README.md via GitHub
  paper_trail_enabled_if overrides global settings
  Updated readme description
  Added the possibility to disable/enable PaperTrail from a controller
  • Loading branch information...
2 parents ac4714d + c84a94e commit 81c3decad65fec3d1c93a40e3461988859f84b38 @airblade airblade committed Apr 4, 2011
View
11 README.md
@@ -1,3 +1,14 @@
+# Extended
+
+Added the possibility to disable/enable PaperTrail from a controller.
+
+ class ApplicationController
+ def paper_trail_enabled_if
+ request.user_agent != 'Disable User-Agent'
+ end
+ end
+
+
# PaperTrail
PaperTrail lets you track changes to your models' data. It's good for auditing or versioning. You can see how a model looked at any stage in its lifecycle, revert it to any version, and even undelete it after it's been destroyed.
View
16 lib/paper_trail.rb
@@ -20,7 +20,21 @@ def self.enabled?
!!PaperTrail.config.enabled
end
-
+ # Returns if PaperTrails is disabled by controller
+ def self.request_disabled
+ paper_trail_store[:request_disabled]
+ end
+
+ # Sets if PaperTrails is disabled by controller
+ def self.request_disabled=(value)
+ paper_trail_store[:request_disabled] = value
+ end
+
+ # Sets if PaperTrails is disabled by controller
+ def self.request_disabled?
+ paper_trail_store[:request_disabled] === true
+ end
+
# Returns who is reponsible for any changes that occur.
def self.whodunnit
paper_trail_store[:whodunnit]
View
10 lib/paper_trail/controller.rb
@@ -4,6 +4,7 @@ module Controller
def self.included(base)
base.before_filter :set_paper_trail_whodunnit
base.before_filter :set_paper_trail_controller_info
+ base.before_filter :set_paper_trail_enabled_if
end
protected
@@ -39,7 +40,14 @@ def info_for_paper_trail
end
private
-
+
+ # Tells PaperTrail if version should be saved.
+ def set_paper_trail_enabled_if
+ if respond_to? :paper_trail_enabled_if
+ ::PaperTrail.request_disabled = !paper_trail_enabled_if
+ end
+ end
+
# Tells PaperTrail who is responsible for any changes that occur.
def set_paper_trail_whodunnit
::PaperTrail.whodunnit = user_for_paper_trail
View
6 lib/paper_trail/has_paper_trail.rb
@@ -167,10 +167,10 @@ def changed_and_not_ignored
changed - self.class.ignore
end
- # Returns `true` if PaperTrail is globally enabled and active for this class,
- # `false` otherwise.
+ # Returns `true` if controller method paper_trail_enabled_if doesn't return false,
+ # PaperTrail is globally enabled and active for this class, `false` otherwise.
def switched_on?
- PaperTrail.enabled? && self.class.paper_trail_active
+ !PaperTrail.request_disabled? && PaperTrail.enabled? && self.class.paper_trail_active
end
end
View
1 test/dummy/app/controllers/application_controller.rb
@@ -13,4 +13,5 @@ def current_user
def info_for_paper_trail
{:ip => request.remote_ip, :user_agent => request.user_agent}
end
+
end
View
5 test/dummy/app/controllers/widgets_controller.rb
@@ -1,4 +1,9 @@
class WidgetsController < ApplicationController
+
+ def paper_trail_enabled_if
+ request.user_agent != 'Disable User-Agent'
+ end
+
def create
@widget = Widget.create params[:widget]
head :ok
View
30 test/functional/controller_test.rb
@@ -6,6 +6,36 @@ class ControllerTest < ActionController::TestCase
setup do
@request.env['REMOTE_ADDR'] = '127.0.0.1'
end
+
+ teardown do
+ PaperTrail.request_disabled = false
+ end
+
+ test 'disable on create' do
+ @request.env['HTTP_USER_AGENT'] = 'Disable User-Agent'
+ post :create, :widget => { :name => 'Flugel' }
+ assert_equal 0, assigns(:widget).versions.length
+ end
+
+ test 'disable on update' do
+ @request.env['HTTP_USER_AGENT'] = 'Disable User-Agent'
+ post :create, :widget => { :name => 'Flugel' }
+ w = assigns(:widget)
+ assert_equal 0, w.versions.length
+ put :update, :id => w.id, :widget => { :name => 'Bugle' }
+ widget = assigns(:widget)
+ assert_equal 0, widget.versions.length
+ end
+
+ test 'disable on destroy' do
+ @request.env['HTTP_USER_AGENT'] = 'Disable User-Agent'
+ post :create, :widget => { :name => 'Flugel' }
+ w = assigns(:widget)
+ assert_equal 0, w.versions.length
+ delete :destroy, :id => w.id
+ widget = assigns(:widget)
+ assert_equal 0, Version.with_item_keys('Widget', w.id).size
+ end
test 'create' do
post :create, :widget => { :name => 'Flugel' }

0 comments on commit 81c3dec

Please sign in to comment.
Something went wrong with that request. Please try again.