paper_trail 2.4.0 → 2.4.1

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 CHANGED
@@ -215,6 +215,14 @@ This means that only changes to the `title` will save a version of the article:
215
215
 
216
216
  Passing both `:ignore` and `:only` options will result in the article being saved if a changed attribute is included in `:only` but not in `:ignore`.
217
217
 
218
+ You can skip fields altogether with the `:skip` option. As with `:ignore`, updates to these fields will not create a new `Version`. In addition, these fields will not be included in the serialised version of the object whenever a new `Version` is created.
219
+
220
+ For example:
221
+
222
+ class Article < ActiveRecord::Base
223
+ has_paper_trail :skip => [:file_upload]
224
+ end
225
+
218
226
 
219
227
  ## Reverting And Undeleting A Model
220
228
 
@@ -461,7 +469,9 @@ PaperTrail will call your proc with the current article and store the result in
461
469
  N.B. You must also:
462
470
 
463
471
  * Add your metadata columns to the `versions` table.
464
- * Declare your metadata columns using `attr_accessible` like this:
472
+ * Declare your metadata columns using `attr_accessible`.
473
+
474
+ For example:
465
475
 
466
476
  # config/initializers/paper_trail.rb
467
477
  class Version < ActiveRecord::Base
@@ -661,6 +671,7 @@ Many thanks to:
661
671
  * [Eduard Tsech](https://github.com/edtsech)
662
672
  * [Mathieu Arnold](https://github.com/mat813)
663
673
  * [Nicholas Thrower](https://github.com/throwern)
674
+ * [Benjamin Curtis](https://github.com/stympy)
664
675
 
665
676
 
666
677
  ## Inspirations
@@ -16,6 +16,9 @@ module PaperTrail
16
16
  # :class_name the name of a custom Version class. This class should inherit from Version.
17
17
  # :ignore an array of attributes for which a new `Version` will not be created if only they change.
18
18
  # :only inverse of `ignore` - a new `Version` will be created only for these attributes if supplied
19
+ # :skip fields to ignore completely. As with `ignore`, updates to these fields will not create
20
+ # a new `Version`. In addition, these fields will not be included in the serialized versions
21
+ # of the object whenever a new `Version` is created.
19
22
  # :meta a hash of extra data to store. You must add a column to the `versions` table for each key.
20
23
  # Values are objects or procs (which are called with `self`, i.e. the model with the paper
21
24
  # trail). See `PaperTrail::Controller.info_for_paper_trail` for how to store data from
@@ -40,6 +43,9 @@ module PaperTrail
40
43
  class_attribute :ignore
41
44
  self.ignore = ([options[:ignore]].flatten.compact || []).map &:to_s
42
45
 
46
+ class_attribute :skip
47
+ self.skip = ([options[:skip]].flatten.compact || []).map &:to_s
48
+
43
49
  class_attribute :only
44
50
  self.only = ([options[:only]].flatten.compact || []).map &:to_s
45
51
 
@@ -191,7 +197,7 @@ module PaperTrail
191
197
  end
192
198
 
193
199
  def object_to_string(object)
194
- object.attributes.to_yaml
200
+ object.attributes.except(*self.class.skip).to_yaml
195
201
  end
196
202
 
197
203
  def changed_notably?
@@ -203,7 +209,7 @@ module PaperTrail
203
209
  end
204
210
 
205
211
  def changed_and_not_ignored
206
- changed - self.class.ignore
212
+ changed - self.class.ignore - self.class.skip
207
213
  end
208
214
 
209
215
  def switched_on?
@@ -1,3 +1,3 @@
1
1
  module PaperTrail
2
- VERSION = '2.4.0'
2
+ VERSION = '2.4.1'
3
3
  end
@@ -1,6 +1,7 @@
1
1
  class Article < ActiveRecord::Base
2
2
  has_paper_trail :ignore => :title,
3
3
  :only => [:content],
4
+ :skip => [:file_upload],
4
5
  :meta => {:answer => 42,
5
6
  :action => :action_data_provider_method,
6
7
  :question => Proc.new { "31 + 11 = #{31 + 11}" },
@@ -65,6 +65,7 @@ class SetUpTestTables < ActiveRecord::Migration
65
65
  t.string :title
66
66
  t.string :content
67
67
  t.string :abstract
68
+ t.string :file_upload
68
69
  end
69
70
 
70
71
  create_table :books, :force => true do |t|
Binary file
@@ -28,7 +28,36 @@ 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
+
32
+ context 'which updates a skipped column' do
33
+ setup { @article.update_attributes :file_upload => 'Your data goes here' }
34
+ should_not_change('the number of versions') { Version.count }
35
+ end
36
+
37
+ context 'which updates a skipped column and a selected column' do
38
+ setup { @article.update_attributes :file_upload => 'Your data goes here', :content => 'Some text here.' }
39
+ should_change('the number of versions', :by => 1) { Version.count }
31
40
 
41
+ should 'have stored only non-skipped attributes' do
42
+ assert_equal ({'content' => [nil, 'Some text here.']}), @article.versions.last.changeset
43
+ end
44
+
45
+ context 'and when updated again' do
46
+ setup do
47
+ @article.update_attributes :file_upload => 'More data goes here', :content => 'More text here.'
48
+ @old_article = @article.versions.last
49
+ end
50
+
51
+ should 'have removed the skipped attributes when saving the previous version' do
52
+ assert_equal nil, YAML::load(@old_article.object)['file_upload']
53
+ end
54
+
55
+ should 'have kept the non-skipped attributes in the previous version' do
56
+ assert_equal 'Some text here.', YAML::load(@old_article.object)['content']
57
+ end
58
+ end
59
+ end
60
+
32
61
  end
33
62
 
34
63
 
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: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 4
9
- - 0
10
- version: 2.4.0
9
+ - 1
10
+ version: 2.4.1
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-09-29 00:00:00 +02:00
18
+ date: 2011-11-09 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency