paper_trail 3.0.5 → 3.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ee3ec4b4dd8dfad13cbe5e9b46ccfa30f3318a3
4
- data.tar.gz: 20559b46236a0318c4b7e2eb940bfbd79600cfad
3
+ metadata.gz: 342a6b8d2c4c6685107d14ae36f6711d7fe09d78
4
+ data.tar.gz: f7d83394a6bb503a898509b26e9adf0f712c1dfb
5
5
  SHA512:
6
- metadata.gz: 6cf548b9641d5994bf67b3e886d4ed60fed0d6d16e9134e6374ca8ecaaa7ff3662fd4d97684e2bd1b59cffa710f1e19a58c0d4679433483dcd471fdc4ef201ad
7
- data.tar.gz: 3ae713d8799f7ce5b95b5787134eeaf3aada506b1c71a89d3e25e3703c1fbc5a809f183e0a62c521c65f473312261e5049843d01a54166243ddac7a994120332
6
+ metadata.gz: d240d05e510adf0a4e178a27cda8e490b99750384a15af935daa6019f02f8ce944c7894fdea76fb970a07dde7bdbbf62de8c314a24f5684f961d8da949fe3b64
7
+ data.tar.gz: 078716e13039aebf41ea3c10e78180e78d1879ab30095a39298678bb88e6e5659a760f67449cbffee22492419943988df53eac04417fd8da8259804a08fe4732
@@ -1,11 +1,17 @@
1
+ ## 3.0.6
2
+
3
+ - [#414](https://github.com/airblade/paper_trail/issues/414) - Fix functionality `ignore` argument to `has_paper_trail`
4
+ in `ActiveRecord` 4.
5
+
1
6
  ## 3.0.5
2
7
 
3
8
  - [#401](https://github.com/airblade/paper_trail/issues/401) / [#406](https://github.com/airblade/paper_trail/issues/406)
4
9
  `PaperTrail::Version` class is not loaded via a `Rails::Engine`, even when the gem is used with in Rails. This feature has
5
10
  will be re-introduced in version `3.1.0`.
11
+ - [#398](https://github.com/airblade/paper_trail/pull/398) - Only require the `RSpec` helper if `RSpec::Core` is required.
6
12
 
7
13
  ## 3.0.3
8
- *This version was yanked from RubyGems and has been replaced by version `3.0.5`, which is identical but does not eager load
14
+ *This version was yanked from RubyGems and has been replaced by version `3.0.5`, which is almost identical, but does not eager load
9
15
  in the `PaperTrail::Version` class through a `Rails::Engine` when the gem is used on Rails since it was causing issues for some users.*
10
16
 
11
17
  - [#386](https://github.com/airblade/paper_trail/issues/386) - Fix eager loading of `versions` association with custom class name
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # PaperTrail [![Build Status](https://img.shields.io/travis/airblade/paper_trail/master.svg)](https://travis-ci.org/airblade/paper_trail) [![Dependency Status](https://img.shields.io/gemnasium/airblade/paper_trail.svg)](https://gemnasium.com/airblade/paper_trail)
1
+ # PaperTrail [![Build Status](https://travis-ci.org/airblade/paper_trail.svg?branch=3.0-stable)](https://travis-ci.org/airblade/paper_trail) [![Dependency Status](https://img.shields.io/gemnasium/airblade/paper_trail.svg)](https://gemnasium.com/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
 
@@ -42,7 +42,7 @@ The Rails 2.3 code is on the [`rails2`](https://github.com/airblade/paper_trail/
42
42
 
43
43
  1. Add PaperTrail to your `Gemfile`.
44
44
 
45
- `gem 'paper_trail', '~> 3.0.5'`
45
+ `gem 'paper_trail', '~> 3.0.6'`
46
46
 
47
47
  2. Generate a migration which will add a `versions` table to your database.
48
48
 
@@ -64,7 +64,7 @@ your applications `ActiveRecord` connection in a manner similar to the way `Rail
64
64
 
65
65
  1. Add PaperTrail to your `Gemfile`.
66
66
 
67
- `gem 'paper_trail', '~> 3.0.5'`
67
+ `gem 'paper_trail', '~> 3.0.6'`
68
68
 
69
69
  2. Generate a migration to add a `versions` table to your database.
70
70
 
@@ -360,8 +360,16 @@ module PaperTrail
360
360
  end
361
361
  end
362
362
 
363
+ # This method is invoked in order to determine whether it is appropriate to generate a new version instance.
364
+ # In ActiveRecord 4, the way ActiveModel::Dirty handles the `changes` hash has changed so that
365
+ # `timestamp_attributes_for_update` get inserted PRIOR to the persistence happening, so we must accomodate
366
+ # this by checking to ensure attributes other than those ignored and update timestamps are really being modified.
363
367
  def changed_notably?
364
- notably_changed.any?
368
+ if self.paper_trail_options[:ignore].any? && (changed & self.paper_trail_options[:ignore]).any?
369
+ (notably_changed - timestamp_attributes_for_update_in_model.map(&:to_s)).any?
370
+ else
371
+ notably_changed.any?
372
+ end
365
373
  end
366
374
 
367
375
  def notably_changed
@@ -2,7 +2,7 @@ module PaperTrail
2
2
  module VERSION
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 5
5
+ TINY = 6
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gadget do
4
+ it { should be_versioned }
5
+
6
+ let(:gadget) { Gadget.create!(:name => 'Wrench', :brand => 'Acme') }
7
+
8
+ describe "updates", :versioning => true do
9
+ it "should generate a version for updates to `name` attribute" do
10
+ expect { gadget.update_attribute(:name, 'Hammer').to change{gadget.versions.size}.by(1) }
11
+ end
12
+
13
+ it "should ignore for updates to `brand` attribute" do
14
+ expect { gadget.update_attribute(:brand, 'Stanley') }.to_not change{gadget.versions.size}
15
+ end
16
+
17
+ it "should still generate a version when only the `updated_at` attribute is updated" do
18
+ expect { gadget.update_attribute(:updated_at, Time.now) }.to change{gadget.versions.size}.by(1)
19
+ end
20
+ end
21
+
22
+ describe "Methods" do
23
+ describe "Instance", :versioning => true do
24
+ describe "private" do
25
+ describe :changed_notably? do
26
+ subject { Gadget.new(:created_at => Time.now) }
27
+
28
+ # apparently the private methods list in Ruby18 is different than in Ruby19+
29
+ if RUBY_VERSION.to_f >= 1.9
30
+ its(:private_methods) { should include(:changed_notably?) }
31
+ end
32
+
33
+ context "create events" do
34
+ it { subject.send(:changed_notably?).should == true }
35
+ end
36
+
37
+ context "update events" do
38
+ before { subject.save! }
39
+
40
+ context "without update timestamps" do
41
+ it "should only acknowledge non-ignored attrs" do
42
+ subject.name = 'Wrench'
43
+ subject.send(:changed_notably?).should == true
44
+ end
45
+
46
+ it "should not acknowledge ignored attrs and timestamps only" do
47
+ subject.brand = 'Acme'
48
+ subject.send(:changed_notably?).should == false
49
+ end
50
+ end
51
+
52
+ context "with update timestamps" do
53
+ it "should only acknowledge non-ignored attrs" do
54
+ subject.name, subject.updated_at = 'Wrench', Time.now
55
+ subject.send(:changed_notably?).should == true
56
+ end
57
+
58
+ it "should not acknowledge ignored attrs and timestamps only" do
59
+ subject.brand, subject.updated_at = 'Acme', Time.now
60
+ subject.send(:changed_notably?).should == false
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,3 @@
1
+ class Gadget < ActiveRecord::Base
2
+ has_paper_trail :ignore => :brand
3
+ end
@@ -116,6 +116,12 @@ class SetUpTestTables < ActiveRecord::Migration
116
116
  t.string :language_code
117
117
  t.string :type
118
118
  end
119
+
120
+ create_table :gadgets, :force => true do |t|
121
+ t.string :name
122
+ t.string :brand
123
+ t.timestamps
124
+ end
119
125
  end
120
126
 
121
127
  def self.down
@@ -136,5 +142,6 @@ class SetUpTestTables < ActiveRecord::Migration
136
142
  drop_table :documents
137
143
  drop_table :legacy_widgets
138
144
  drop_table :translations
145
+ drop_table :gadgets
139
146
  end
140
147
  end
@@ -224,7 +224,7 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
224
224
  'id' => [nil, @widget.id]
225
225
  }
226
226
 
227
- assert_equal "Time", @widget.versions.last.changeset['updated_at'][1].class.to_s
227
+ assert_equal Time, @widget.versions.last.changeset['updated_at'][1].class
228
228
  assert_equal changes, @widget.versions.last.changeset
229
229
  end
230
230
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paper_trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.5
4
+ version: 3.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Stewart
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-30 00:00:00.000000000 Z
12
+ date: 2014-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -263,6 +263,7 @@ files:
263
263
  - lib/paper_trail/version_number.rb
264
264
  - paper_trail.gemspec
265
265
  - spec/generators/install_generator_spec.rb
266
+ - spec/models/gadget_spec.rb
266
267
  - spec/models/joined_version_spec.rb
267
268
  - spec/models/post_with_status_spec.rb
268
269
  - spec/models/version_spec.rb
@@ -290,6 +291,7 @@ files:
290
291
  - test/dummy/app/models/elephant.rb
291
292
  - test/dummy/app/models/fluxor.rb
292
293
  - test/dummy/app/models/foo_widget.rb
294
+ - test/dummy/app/models/gadget.rb
293
295
  - test/dummy/app/models/legacy_widget.rb
294
296
  - test/dummy/app/models/person.rb
295
297
  - test/dummy/app/models/post.rb
@@ -378,6 +380,7 @@ specification_version: 4
378
380
  summary: Track changes to your models' data. Good for auditing or versioning.
379
381
  test_files:
380
382
  - spec/generators/install_generator_spec.rb
383
+ - spec/models/gadget_spec.rb
381
384
  - spec/models/joined_version_spec.rb
382
385
  - spec/models/post_with_status_spec.rb
383
386
  - spec/models/version_spec.rb
@@ -405,6 +408,7 @@ test_files:
405
408
  - test/dummy/app/models/elephant.rb
406
409
  - test/dummy/app/models/fluxor.rb
407
410
  - test/dummy/app/models/foo_widget.rb
411
+ - test/dummy/app/models/gadget.rb
408
412
  - test/dummy/app/models/legacy_widget.rb
409
413
  - test/dummy/app/models/person.rb
410
414
  - test/dummy/app/models/post.rb