Added the possibility to disable/enable PaperTrail from a controller
This commit is contained in:
parent
f18cb6d491
commit
ff818e3acc
11
README.md
11
README.md
|
@ -1,3 +1,14 @@
|
|||
# Extended
|
||||
|
||||
Added the possibility to dissable/enable PaperTrail from a controller.
|
||||
|
||||
class ApplicationController
|
||||
def paper_trail_enabled_if
|
||||
proc{ request.user_agent != 'Disabled 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.
|
||||
|
|
|
@ -20,7 +20,16 @@ module PaperTrail
|
|||
!!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
|
||||
|
||||
# Returns who is reponsible for any changes that occur.
|
||||
def self.whodunnit
|
||||
paper_trail_store[:whodunnit]
|
||||
|
|
|
@ -4,6 +4,7 @@ module PaperTrail
|
|||
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 @@ module PaperTrail
|
|||
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
|
||||
|
|
|
@ -162,7 +162,7 @@ module PaperTrail
|
|||
# Returns `true` if PaperTrail is globally enabled and active for this class,
|
||||
# `false` otherwise.
|
||||
def switched_on?
|
||||
PaperTrail.enabled? && self.class.paper_trail_active
|
||||
PaperTrail.enabled? && self.class.paper_trail_active && !PaperTrail.request_disabled
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -13,4 +13,5 @@ class ApplicationController < ActionController::Base
|
|||
def info_for_paper_trail
|
||||
{:ip => request.remote_ip, :user_agent => request.user_agent}
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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' }
|
||||
|
|
Loading…
Reference in New Issue