paper_trail 2.4.1 → 2.5.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/README.md +23 -6
- data/lib/paper_trail/has_paper_trail.rb +5 -5
- data/lib/paper_trail/version.rb +1 -1
- data/lib/paper_trail/version_number.rb +1 -1
- data/paper_trail.gemspec +1 -0
- data/test/dummy/app/models/legacy_widget.rb +2 -1
- data/test/unit/model_test.rb +15 -7
- metadata +29 -15
data/README.md
CHANGED
@@ -335,28 +335,33 @@ To find out who made a `version`'s object look that way, use `version.originator
|
|
335
335
|
|
336
336
|
You can specify custom version subclasses with the `:class_name` option:
|
337
337
|
|
338
|
-
class Post < ActiveRecord::Base
|
339
|
-
has_paper_trail :class_name => 'PostVersion'
|
340
|
-
end
|
341
|
-
|
342
338
|
class PostVersion < Version
|
343
339
|
# custom behaviour, e.g:
|
344
340
|
set_table_name :post_versions
|
345
341
|
end
|
346
342
|
|
343
|
+
class Post < ActiveRecord::Base
|
344
|
+
has_paper_trail :class_name => 'PostVersion'
|
345
|
+
end
|
346
|
+
|
347
347
|
This allows you to store each model's versions in a separate table, which is useful if you have a lot of versions being created.
|
348
348
|
|
349
349
|
Alternatively you could store certain metadata for one type of version, and other metadata for other versions.
|
350
350
|
|
351
|
-
You can also specify
|
351
|
+
You can also specify custom names for the versions and version associations. This is useful if you already have `versions` or/and `version` methods on your model. For example:
|
352
352
|
|
353
353
|
class Post < ActiveRecord::Base
|
354
|
-
has_paper_trail :versions => :paper_trail_versions
|
354
|
+
has_paper_trail :versions => :paper_trail_versions,
|
355
|
+
:version => :paper_trail_version
|
355
356
|
|
356
357
|
# Existing versions method. We don't want to clash.
|
357
358
|
def versions
|
358
359
|
...
|
359
360
|
end
|
361
|
+
# Existing version method. We don't want to clash.
|
362
|
+
def version
|
363
|
+
...
|
364
|
+
end
|
360
365
|
end
|
361
366
|
|
362
367
|
|
@@ -633,6 +638,17 @@ Please see the `rails2` branch.
|
|
633
638
|
|
634
639
|
PaperTrail uses Bundler to manage its dependencies (in development and testing). You can run the tests with `bundle exec rake test`. (You may need to `bundle install` first.)
|
635
640
|
|
641
|
+
It's a good idea to reset PaperTrail before each test so data from one test doesn't spill over another. For example:
|
642
|
+
|
643
|
+
RSpec.configure do |config|
|
644
|
+
config.before :each do
|
645
|
+
PaperTrail.controller_info = {}
|
646
|
+
PaperTrail.whodunnit = nil
|
647
|
+
end
|
648
|
+
end
|
649
|
+
|
650
|
+
You may want to turn PaperTrail off to speed up your tests. See the "Turning PaperTrail Off/On" section above.
|
651
|
+
|
636
652
|
|
637
653
|
## Articles
|
638
654
|
|
@@ -672,6 +688,7 @@ Many thanks to:
|
|
672
688
|
* [Mathieu Arnold](https://github.com/mat813)
|
673
689
|
* [Nicholas Thrower](https://github.com/throwern)
|
674
690
|
* [Benjamin Curtis](https://github.com/stympy)
|
691
|
+
* [Peter Harkins](https://github.com/pushcx)
|
675
692
|
|
676
693
|
|
677
694
|
## Inspirations
|
@@ -24,18 +24,18 @@ module PaperTrail
|
|
24
24
|
# trail). See `PaperTrail::Controller.info_for_paper_trail` for how to store data from
|
25
25
|
# the controller.
|
26
26
|
# :versions the name to use for the versions association. Default is `:versions`.
|
27
|
-
# :
|
27
|
+
# :version the name to use for the method which returns the version the instance was reified from.
|
28
28
|
# Default is `:version`.
|
29
29
|
def has_paper_trail(options = {})
|
30
30
|
# Lazily include the instance methods so we don't clutter up
|
31
31
|
# any more ActiveRecord models than we have to.
|
32
32
|
send :include, InstanceMethods
|
33
33
|
|
34
|
-
class_attribute :
|
35
|
-
self.
|
34
|
+
class_attribute :version_association_name
|
35
|
+
self.version_association_name = options[:version] || :version
|
36
36
|
|
37
37
|
# The version this instance was reified from.
|
38
|
-
attr_accessor self.
|
38
|
+
attr_accessor self.version_association_name
|
39
39
|
|
40
40
|
class_attribute :version_class_name
|
41
41
|
self.version_class_name = options[:class_name] || 'Version'
|
@@ -131,7 +131,7 @@ module PaperTrail
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def source_version
|
134
|
-
send self.class.
|
134
|
+
send self.class.version_association_name
|
135
135
|
end
|
136
136
|
|
137
137
|
def record_create
|
data/lib/paper_trail/version.rb
CHANGED
data/paper_trail.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.add_dependency 'rails', '~> 3'
|
19
19
|
|
20
|
+
s.add_development_dependency 'rake'
|
20
21
|
s.add_development_dependency 'shoulda', '2.10.3'
|
21
22
|
s.add_development_dependency 'sqlite3-ruby', '~> 1.2'
|
22
23
|
s.add_development_dependency 'capybara', '>= 0.4.0'
|
data/test/unit/model_test.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class HasPaperTrailModelTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
-
context 'A record' do
|
5
|
+
context 'A record with defined "only" and "ignore" attributes' do
|
6
6
|
setup { @article = Article.create }
|
7
7
|
|
8
8
|
context 'which updates an ignored column' do
|
@@ -28,12 +28,12 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
|
28
28
|
setup { @article.update_attributes :abstract => 'Other abstract'}
|
29
29
|
should_not_change('the number of versions') { Version.count }
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
context 'which updates a skipped column' do
|
33
33
|
setup { @article.update_attributes :file_upload => 'Your data goes here' }
|
34
34
|
should_not_change('the number of versions') { Version.count }
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
context 'which updates a skipped column and a selected column' do
|
38
38
|
setup { @article.update_attributes :file_upload => 'Your data goes here', :content => 'Some text here.' }
|
39
39
|
should_change('the number of versions', :by => 1) { Version.count }
|
@@ -41,23 +41,31 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
|
41
41
|
should 'have stored only non-skipped attributes' do
|
42
42
|
assert_equal ({'content' => [nil, 'Some text here.']}), @article.versions.last.changeset
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
context 'and when updated again' do
|
46
46
|
setup do
|
47
47
|
@article.update_attributes :file_upload => 'More data goes here', :content => 'More text here.'
|
48
48
|
@old_article = @article.versions.last
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
should 'have removed the skipped attributes when saving the previous version' do
|
52
52
|
assert_equal nil, YAML::load(@old_article.object)['file_upload']
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
should 'have kept the non-skipped attributes in the previous version' do
|
56
56
|
assert_equal 'Some text here.', YAML::load(@old_article.object)['content']
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
60
|
-
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'A record with defined "ignore" attribute' do
|
63
|
+
setup { @legacy_widget = LegacyWidget.create }
|
64
|
+
|
65
|
+
context 'which updates an ignored column' do
|
66
|
+
setup { @legacy_widget.update_attributes :version => 1 }
|
67
|
+
should_not_change('the number of versions') { Version.count }
|
68
|
+
end
|
61
69
|
end
|
62
70
|
|
63
71
|
|
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: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 2.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 2.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andy Stewart
|
@@ -15,13 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-11 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rails
|
23
23
|
prerelease: false
|
24
|
-
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
@@ -31,11 +31,25 @@ dependencies:
|
|
31
31
|
- 3
|
32
32
|
version: "3"
|
33
33
|
type: :runtime
|
34
|
-
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rake
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
35
49
|
- !ruby/object:Gem::Dependency
|
36
50
|
name: shoulda
|
37
51
|
prerelease: false
|
38
|
-
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
53
|
none: false
|
40
54
|
requirements:
|
41
55
|
- - "="
|
@@ -47,11 +61,11 @@ dependencies:
|
|
47
61
|
- 3
|
48
62
|
version: 2.10.3
|
49
63
|
type: :development
|
50
|
-
|
64
|
+
version_requirements: *id003
|
51
65
|
- !ruby/object:Gem::Dependency
|
52
66
|
name: sqlite3-ruby
|
53
67
|
prerelease: false
|
54
|
-
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
69
|
none: false
|
56
70
|
requirements:
|
57
71
|
- - ~>
|
@@ -62,11 +76,11 @@ dependencies:
|
|
62
76
|
- 2
|
63
77
|
version: "1.2"
|
64
78
|
type: :development
|
65
|
-
|
79
|
+
version_requirements: *id004
|
66
80
|
- !ruby/object:Gem::Dependency
|
67
81
|
name: capybara
|
68
82
|
prerelease: false
|
69
|
-
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
70
84
|
none: false
|
71
85
|
requirements:
|
72
86
|
- - ">="
|
@@ -78,11 +92,11 @@ dependencies:
|
|
78
92
|
- 0
|
79
93
|
version: 0.4.0
|
80
94
|
type: :development
|
81
|
-
|
95
|
+
version_requirements: *id005
|
82
96
|
- !ruby/object:Gem::Dependency
|
83
97
|
name: turn
|
84
98
|
prerelease: false
|
85
|
-
|
99
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
86
100
|
none: false
|
87
101
|
requirements:
|
88
102
|
- - ">="
|
@@ -92,7 +106,7 @@ dependencies:
|
|
92
106
|
- 0
|
93
107
|
version: "0"
|
94
108
|
type: :development
|
95
|
-
|
109
|
+
version_requirements: *id006
|
96
110
|
description: Track changes to your models' data. Good for auditing or versioning.
|
97
111
|
email: boss@airbladesoftware.com
|
98
112
|
executables: []
|