paper_trail 2.2.9 → 2.3.0
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/.travis.yml +5 -0
- data/README.md +14 -3
- data/lib/paper_trail/has_paper_trail.rb +6 -4
- data/lib/paper_trail/version_number.rb +1 -1
- data/test/dummy/app/models/document.rb +2 -1
- data/test/unit/model_test.rb +51 -0
- metadata +6 -5
data/README.md
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
# PaperTrail
|
1
|
+
# PaperTrail [](http://travis-ci.org/airblade/paper_trail)
|
2
2
|
|
3
3
|
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.
|
4
4
|
|
5
5
|
There's an excellent [Railscast on implementing Undo with Paper Trail](http://railscasts.com/episodes/255-undo-with-paper-trail).
|
6
6
|
|
7
|
+
|
7
8
|
## Features
|
8
9
|
|
9
|
-
* Stores every create, update and destroy.
|
10
|
+
* Stores every create, update and destroy (or only the lifecycle events you specify).
|
10
11
|
* Does not store updates which don't change anything.
|
11
12
|
* Allows you to specify attributes (by inclusion or exclusion) which must change for a Version to be stored.
|
12
13
|
* Allows you to get at every version, including the original, even once destroyed.
|
@@ -168,6 +169,16 @@ Here's a helpful table showing what PaperTrail stores:
|
|
168
169
|
PaperTrail stores the values in the Model Before column. Most other auditing/versioning plugins store the After column.
|
169
170
|
|
170
171
|
|
172
|
+
## Choosing Lifecycle Events To Monitor
|
173
|
+
|
174
|
+
You can choose which events to track with the `on` option. For example, to ignore `create` events:
|
175
|
+
|
176
|
+
class Article < ActiveRecord::Base
|
177
|
+
has_paper_trail :on => [:update, :destroy]
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
|
171
182
|
## Choosing Attributes To Monitor
|
172
183
|
|
173
184
|
You can ignore changes to certain attributes like this:
|
@@ -331,7 +342,7 @@ Alternatively you could store certain metadata for one type of version, and othe
|
|
331
342
|
You can also specify a custom name for the versions association. This is useful if you already have a `versions` method on your model. For example:
|
332
343
|
|
333
344
|
class Post < ActiveRecord::Base
|
334
|
-
has_paper_trail :
|
345
|
+
has_paper_trail :versions => :paper_trail_versions
|
335
346
|
|
336
347
|
# Existing versions method. We don't want to clash.
|
337
348
|
def versions
|
@@ -11,6 +11,8 @@ module PaperTrail
|
|
11
11
|
# the model is available in the `versions` association.
|
12
12
|
#
|
13
13
|
# Options:
|
14
|
+
# :on the events to track (optional; defaults to all of them). Set to an array of
|
15
|
+
# `:create`, `:update`, `:destroy` as desired.
|
14
16
|
# :class_name the name of a custom Version class. This class should inherit from Version.
|
15
17
|
# :ignore an array of attributes for which a new `Version` will not be created if only they change.
|
16
18
|
# :only inverse of `ignore` - a new `Version` will be created only for these attributes if supplied
|
@@ -18,7 +20,7 @@ module PaperTrail
|
|
18
20
|
# Values are objects or procs (which are called with `self`, i.e. the model with the paper
|
19
21
|
# trail). See `PaperTrail::Controller.info_for_paper_trail` for how to store data from
|
20
22
|
# the controller.
|
21
|
-
# :
|
23
|
+
# :versions the name to use for the versions association. Default is `:versions`.
|
22
24
|
def has_paper_trail(options = {})
|
23
25
|
# Lazily include the instance methods so we don't clutter up
|
24
26
|
# any more ActiveRecord models than we have to.
|
@@ -50,9 +52,9 @@ module PaperTrail
|
|
50
52
|
:as => :item,
|
51
53
|
:order => "created_at ASC, #{self.primary_key} ASC"
|
52
54
|
|
53
|
-
after_create :record_create
|
54
|
-
before_update :record_update
|
55
|
-
after_destroy :record_destroy
|
55
|
+
after_create :record_create if !options[:on] || options[:on].include?(:create)
|
56
|
+
before_update :record_update if !options[:on] || options[:on].include?(:update)
|
57
|
+
after_destroy :record_destroy if !options[:on] || options[:on].include?(:destroy)
|
56
58
|
end
|
57
59
|
|
58
60
|
# Switches PaperTrail off for this class.
|
data/test/unit/model_test.rb
CHANGED
@@ -833,6 +833,57 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
|
833
833
|
end
|
834
834
|
end
|
835
835
|
|
836
|
+
context 'The `on` option' do
|
837
|
+
context 'on create' do
|
838
|
+
setup do
|
839
|
+
Fluxor.instance_eval <<-END
|
840
|
+
has_paper_trail :on => [:create]
|
841
|
+
END
|
842
|
+
@fluxor = Fluxor.create
|
843
|
+
@fluxor.update_attributes :name => 'blah'
|
844
|
+
@fluxor.destroy
|
845
|
+
end
|
846
|
+
should 'only have a version for the create event' do
|
847
|
+
assert_equal 1, @fluxor.versions.length
|
848
|
+
assert_equal 'create', @fluxor.versions.last.event
|
849
|
+
end
|
850
|
+
end
|
851
|
+
context 'on update' do
|
852
|
+
setup do
|
853
|
+
Fluxor.reset_callbacks :create
|
854
|
+
Fluxor.reset_callbacks :update
|
855
|
+
Fluxor.reset_callbacks :destroy
|
856
|
+
Fluxor.instance_eval <<-END
|
857
|
+
has_paper_trail :on => [:update]
|
858
|
+
END
|
859
|
+
@fluxor = Fluxor.create
|
860
|
+
@fluxor.update_attributes :name => 'blah'
|
861
|
+
@fluxor.destroy
|
862
|
+
end
|
863
|
+
should 'only have a version for the update event' do
|
864
|
+
assert_equal 1, @fluxor.versions.length
|
865
|
+
assert_equal 'update', @fluxor.versions.last.event
|
866
|
+
end
|
867
|
+
end
|
868
|
+
context 'on destroy' do
|
869
|
+
setup do
|
870
|
+
Fluxor.reset_callbacks :create
|
871
|
+
Fluxor.reset_callbacks :update
|
872
|
+
Fluxor.reset_callbacks :destroy
|
873
|
+
Fluxor.instance_eval <<-END
|
874
|
+
has_paper_trail :on => [:destroy]
|
875
|
+
END
|
876
|
+
@fluxor = Fluxor.create
|
877
|
+
@fluxor.update_attributes :name => 'blah'
|
878
|
+
@fluxor.destroy
|
879
|
+
end
|
880
|
+
should 'only have a version for the destroy event' do
|
881
|
+
assert_equal 1, @fluxor.versions.length
|
882
|
+
assert_equal 'destroy', @fluxor.versions.last.event
|
883
|
+
end
|
884
|
+
end
|
885
|
+
end
|
886
|
+
|
836
887
|
private
|
837
888
|
|
838
889
|
# Updates `model`'s last version so it looks like the version was
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paper_trail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 2.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 2.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andy Stewart
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-08-22 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -103,6 +103,7 @@ extra_rdoc_files: []
|
|
103
103
|
|
104
104
|
files:
|
105
105
|
- .gitignore
|
106
|
+
- .travis.yml
|
106
107
|
- Gemfile
|
107
108
|
- MIT-LICENSE
|
108
109
|
- README.md
|