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
This commit is contained in:
Andy Stewart 2011-04-04 17:37:44 +01:00
commit 81c3decad6
7 changed files with 74 additions and 5 deletions

View File

@ -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 File

@ -20,7 +20,21 @@ 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
# 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 File

@ -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

View File

@ -167,10 +167,10 @@ module PaperTrail
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 File

@ -13,4 +13,5 @@ class ApplicationController < ActionController::Base
def info_for_paper_trail
{:ip => request.remote_ip, :user_agent => request.user_agent}
end
end

View File

@ -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 File

@ -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' }