paper_trail 6.0.0 → 6.0.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.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +3 -3
- data/CHANGELOG.md +15 -0
- data/README.md +10 -20
- data/lib/paper_trail.rb +0 -20
- data/lib/paper_trail/frameworks/rails/controller.rb +10 -33
- data/lib/paper_trail/version_association_concern.rb +0 -4
- data/lib/paper_trail/version_concern.rb +1 -29
- data/lib/paper_trail/version_number.rb +1 -1
- data/spec/models/post_with_status_spec.rb +33 -37
- data/test/dummy/app/controllers/application_controller.rb +5 -8
- data/test/dummy/app/controllers/articles_controller.rb +1 -5
- data/test/dummy/app/controllers/widgets_controller.rb +1 -5
- data/test/dummy/app/models/animal.rb +0 -2
- data/test/dummy/app/models/document.rb +4 -2
- data/test/dummy/app/models/legacy_widget.rb +1 -2
- data/test/dummy/app/models/post_with_status.rb +3 -4
- data/test/dummy/app/models/skipper.rb +1 -4
- data/test/dummy/app/models/translation.rb +4 -2
- data/test/dummy/app/models/vehicle.rb +1 -1
- data/test/dummy/app/models/widget.rb +2 -10
- data/test/dummy/config/application.rb +0 -8
- data/test/dummy/config/environments/development.rb +0 -5
- data/test/dummy/config/environments/test.rb +0 -5
- data/test/dummy/config/initializers/paper_trail.rb +0 -8
- data/test/test_helper.rb +1 -10
- data/test/unit/model_test.rb +16 -33
- metadata +1 -11
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/protected_widget.rb +0 -3
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/script/rails +0 -8
- data/test/unit/protected_attrs_test.rb +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2aaa66f683707d78b3d5c9a294e01c9e9b16813
|
4
|
+
data.tar.gz: f9e5043fea515093cd21d151eda33e7b915de194
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac92887f5f16f868f7f5936e9e9c6353533c3a9f233989ae075d3cb1550a3c4bc9b51b6523dc22899e695b2bbfded7f3a9ed4a7bbd814fe9e9c4ec15eabea30b
|
7
|
+
data.tar.gz: 8b31ac54123aeba74eb156b5d6971c3a579e3a3cae0ee8e2b55c2c824c018e8e0267f616fb92aa09ebec1a2404b93e57e2ffe8ad4c9554a9509c4ea4d38e142f
|
data/.github/CONTRIBUTING.md
CHANGED
@@ -89,9 +89,9 @@ DB=postgres bundle exec appraisal ar-5.0 rake
|
|
89
89
|
1. In the changelog,
|
90
90
|
- Replace "Unreleased" with the date in iso-8601 format
|
91
91
|
- Add a new "Unreleased" section
|
92
|
-
1. In the readme,
|
93
|
-
-
|
94
|
-
-
|
92
|
+
1. In the readme, update references to version number, including
|
93
|
+
- documentation links table
|
94
|
+
- compatability table
|
95
95
|
1. Commit
|
96
96
|
1. git tag -a -m "v5.0.0" "v5.0.0" # or whatever number
|
97
97
|
1. git push --tags origin 5-stable # or whatever branch
|
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,21 @@ recommendations of [keepachangelog.com](http://keepachangelog.com/).
|
|
17
17
|
|
18
18
|
- None
|
19
19
|
|
20
|
+
## 6.0.1 (2016-12-04)
|
21
|
+
|
22
|
+
### Breaking Changes
|
23
|
+
|
24
|
+
- None
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
- None
|
29
|
+
|
30
|
+
### Fixed
|
31
|
+
|
32
|
+
- Remove rails 3 features that are no longer supported, most notably,
|
33
|
+
`protected_attributes`.
|
34
|
+
|
20
35
|
## 6.0.0 (2016-12-03)
|
21
36
|
|
22
37
|
Now with rails 5.1 support, and less model pollution! About 40 methods that were
|
data/README.md
CHANGED
@@ -10,7 +10,8 @@ has been destroyed.
|
|
10
10
|
|
11
11
|
| Version | Documentation |
|
12
12
|
| -------------- | ------------- |
|
13
|
-
|
|
13
|
+
| Unreleased | https://github.com/airblade/paper_trail/blob/master/README.md |
|
14
|
+
| 6.0.1 | https://github.com/airblade/paper_trail/blob/v6.0.1/README.md |
|
14
15
|
| 5.2.3 | https://github.com/airblade/paper_trail/blob/v5.2.3/README.md |
|
15
16
|
| 4.2.0 | https://github.com/airblade/paper_trail/blob/v4.2.0/README.md |
|
16
17
|
| 3.0.9 | https://github.com/airblade/paper_trail/blob/v3.0.9/README.md |
|
@@ -45,6 +46,7 @@ has been destroyed.
|
|
45
46
|
- [5.a. Single Table Inheritance](#5a-single-table-inheritance-sti)
|
46
47
|
- [5.b. Configuring the `versions` Association](#5b-configuring-the-versions-association)
|
47
48
|
- [5.c. Generators](#5c-generators)
|
49
|
+
- [5.d. Protected Attributes](#5d-protected-attributes)
|
48
50
|
- [6. Extensibility](#6-extensibility)
|
49
51
|
- [6.a. Custom Version Classes](#6a-custom-version-classes)
|
50
52
|
- [6.b. Custom Serializer](#6b-custom-serializer)
|
@@ -1008,30 +1010,12 @@ class ApplicationController
|
|
1008
1010
|
end
|
1009
1011
|
```
|
1010
1012
|
|
1011
|
-
#### Protected Attributes and Metadata
|
1012
|
-
|
1013
|
-
If you are using rails 3 or the [protected_attributes][17] gem you must declare
|
1014
|
-
your metadata columns to be `attr_accessible`.
|
1015
|
-
|
1016
|
-
```ruby
|
1017
|
-
# app/models/paper_trail/version.rb
|
1018
|
-
module PaperTrail
|
1019
|
-
class Version < ActiveRecord::Base
|
1020
|
-
include PaperTrail::VersionConcern
|
1021
|
-
attr_accessible :author_id, :word_count, :answer
|
1022
|
-
end
|
1023
|
-
end
|
1024
|
-
```
|
1025
|
-
|
1026
|
-
If you're using [strong_parameters][18] instead of [protected_attributes][17]
|
1027
|
-
then there is no need to use `attr_accessible`.
|
1028
|
-
|
1029
1013
|
## 5. ActiveRecord
|
1030
1014
|
|
1031
1015
|
### 5.a. Single Table Inheritance (STI)
|
1032
1016
|
|
1033
1017
|
PaperTrail supports [Single Table Inheritance][39], and even supports an
|
1034
|
-
un-versioned base model, as of 23ffbdc7e1
|
1018
|
+
un-versioned base model, as of `23ffbdc7e1`.
|
1035
1019
|
|
1036
1020
|
```ruby
|
1037
1021
|
class Fruit < ActiveRecord::Base
|
@@ -1087,6 +1071,12 @@ Runtime options:
|
|
1087
1071
|
Generates (but does not run) a migration to add a versions table. Also generates an initializer file for configuring PaperTrail
|
1088
1072
|
```
|
1089
1073
|
|
1074
|
+
### 5.d. Protected Attributes
|
1075
|
+
|
1076
|
+
As of version 6, PT no longer supports rails 3 or the [protected_attributes][17]
|
1077
|
+
gem. If you are still using them, you may use PT 5 or lower. We recommend
|
1078
|
+
upgrading to [strong_parameters][18] as soon as possible.
|
1079
|
+
|
1090
1080
|
## 6. Extensibility
|
1091
1081
|
|
1092
1082
|
### 6.a. Custom Version Classes
|
data/lib/paper_trail.rb
CHANGED
@@ -121,15 +121,6 @@ module PaperTrail
|
|
121
121
|
PaperTrail.config.serializer
|
122
122
|
end
|
123
123
|
|
124
|
-
# Returns a boolean indicating whether "protected attibutes" should be
|
125
|
-
# configured, e.g. attr_accessible, mass_assignment_sanitizer,
|
126
|
-
# whitelist_attributes, etc.
|
127
|
-
# @api public
|
128
|
-
def active_record_protected_attributes?
|
129
|
-
@active_record_protected_attributes ||= ::ActiveRecord::VERSION::MAJOR < 4 ||
|
130
|
-
!!defined?(ProtectedAttributes)
|
131
|
-
end
|
132
|
-
|
133
124
|
# @api public
|
134
125
|
def transaction?
|
135
126
|
::ActiveRecord::Base.connection.open_transactions > 0
|
@@ -167,17 +158,6 @@ module PaperTrail
|
|
167
158
|
end
|
168
159
|
end
|
169
160
|
|
170
|
-
# If available, ensure that the `protected_attributes` gem is loaded
|
171
|
-
# before the `Version` class.
|
172
|
-
unless PaperTrail.active_record_protected_attributes?
|
173
|
-
PaperTrail.send(:remove_instance_variable, :@active_record_protected_attributes)
|
174
|
-
begin
|
175
|
-
require "protected_attributes"
|
176
|
-
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
177
|
-
# In case `protected_attributes` gem is not available.
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
161
|
ActiveSupport.on_load(:active_record) do
|
182
162
|
include PaperTrail::Model
|
183
163
|
end
|
@@ -4,24 +4,11 @@ module PaperTrail
|
|
4
4
|
# information to the model layer, with `controller_info` and `whodunnit`.
|
5
5
|
# Also includes a convenient on/off switch, `enabled_for_controller`.
|
6
6
|
module Controller
|
7
|
-
def self.included(
|
8
|
-
|
7
|
+
def self.included(controller)
|
8
|
+
controller.before_action(
|
9
9
|
:set_paper_trail_enabled_for_controller,
|
10
10
|
:set_paper_trail_controller_info
|
11
|
-
|
12
|
-
after = [
|
13
|
-
:warn_about_not_setting_whodunnit
|
14
|
-
]
|
15
|
-
|
16
|
-
if base.respond_to? :before_action
|
17
|
-
# Rails 4+
|
18
|
-
before.map { |sym| base.before_action sym }
|
19
|
-
after.map { |sym| base.after_action sym }
|
20
|
-
else
|
21
|
-
# Rails 3.
|
22
|
-
before.map { |sym| base.before_filter sym }
|
23
|
-
after.map { |sym| base.after_filter sym }
|
24
|
-
end
|
11
|
+
)
|
25
12
|
end
|
26
13
|
|
27
14
|
protected
|
@@ -89,24 +76,14 @@ module PaperTrail
|
|
89
76
|
::PaperTrail.controller_info = info_for_paper_trail if ::PaperTrail.enabled_for_controller?
|
90
77
|
end
|
91
78
|
|
79
|
+
# We have removed this warning. We no longer add it as a callback.
|
80
|
+
# However, some people use `skip_after_action :warn_about_not_setting_whodunnit`,
|
81
|
+
# so removing this method would be a breaking change. We can remove it
|
82
|
+
# in the next major version.
|
92
83
|
def warn_about_not_setting_whodunnit
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
whodunnit_blank = ::PaperTrail.whodunnit.blank?
|
97
|
-
if user_present && whodunnit_blank && !@set_paper_trail_whodunnit_called
|
98
|
-
source_file_location = self.class.instance_methods(false).map { |m|
|
99
|
-
self.class.instance_method(m).source_location.first
|
100
|
-
}.uniq.first
|
101
|
-
::Kernel.warn <<-EOS.strip_heredoc
|
102
|
-
#{source_file_location}:
|
103
|
-
user_for_paper_trail is present, but whodunnit has not been set.
|
104
|
-
PaperTrail no longer adds the set_paper_trail_whodunnit callback for
|
105
|
-
you. To continue recording whodunnit, please add this before_action
|
106
|
-
callback to your ApplicationController. For more information,
|
107
|
-
please see https://git.io/vrTsk
|
108
|
-
EOS
|
109
|
-
end
|
84
|
+
::ActiveSupport::Deprecation.warn(
|
85
|
+
"warn_about_not_setting_whodunnit is a no-op and is deprecated."
|
86
|
+
)
|
110
87
|
end
|
111
88
|
end
|
112
89
|
end
|
@@ -21,22 +21,7 @@ module PaperTrail
|
|
21
21
|
end
|
22
22
|
|
23
23
|
validates_presence_of :event
|
24
|
-
|
25
|
-
if PaperTrail.active_record_protected_attributes?
|
26
|
-
attr_accessible(
|
27
|
-
:item_type,
|
28
|
-
:item_id,
|
29
|
-
:event,
|
30
|
-
:whodunnit,
|
31
|
-
:object,
|
32
|
-
:object_changes,
|
33
|
-
:transaction_id,
|
34
|
-
:created_at
|
35
|
-
)
|
36
|
-
end
|
37
|
-
|
38
24
|
after_create :enforce_version_limit!
|
39
|
-
|
40
25
|
scope :within_transaction, ->(id) { where transaction_id: id }
|
41
26
|
end
|
42
27
|
|
@@ -225,9 +210,7 @@ module PaperTrail
|
|
225
210
|
#
|
226
211
|
def reify(options = {})
|
227
212
|
return nil if object.nil?
|
228
|
-
|
229
|
-
::PaperTrail::Reifier.reify(self, options)
|
230
|
-
end
|
213
|
+
::PaperTrail::Reifier.reify(self, options)
|
231
214
|
end
|
232
215
|
|
233
216
|
# Returns what changed in this version of the item.
|
@@ -323,17 +306,6 @@ module PaperTrail
|
|
323
306
|
end
|
324
307
|
end
|
325
308
|
|
326
|
-
# In Rails 3.1+, calling reify on a previous version confuses the
|
327
|
-
# IdentityMap, if enabled. This prevents insertion into the map.
|
328
|
-
# @api private
|
329
|
-
def without_identity_map(&block)
|
330
|
-
if defined?(::ActiveRecord::IdentityMap) && ::ActiveRecord::IdentityMap.respond_to?(:without)
|
331
|
-
::ActiveRecord::IdentityMap.without(&block)
|
332
|
-
else
|
333
|
-
yield
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
309
|
# Checks that a value has been set for the `version_limit` config
|
338
310
|
# option, and if so enforces it.
|
339
311
|
# @api private
|
@@ -1,49 +1,45 @@
|
|
1
1
|
require "rails_helper"
|
2
2
|
|
3
|
-
# This model tests ActiveRecord::Enum, which was added in AR 4.1
|
4
|
-
# http://edgeguides.rubyonrails.org/4_1_release_notes.html#active-record-enums
|
5
3
|
describe PostWithStatus, type: :model do
|
6
|
-
|
7
|
-
|
8
|
-
let(:post) { described_class.create!(status: "draft") }
|
4
|
+
with_versioning do
|
5
|
+
let(:post) { described_class.create!(status: "draft") }
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
it "should stash the enum value properly in versions" do
|
8
|
+
post.published!
|
9
|
+
post.archived!
|
10
|
+
expect(post.paper_trail.previous_version.published?).to be true
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
it "can read enums in version records written by PT 4" do
|
14
|
+
post = described_class.create(status: "draft")
|
15
|
+
post.published!
|
16
|
+
version = post.versions.last
|
17
|
+
# Simulate behavior PT 4, which used to save the string version of
|
18
|
+
# enums to `object_changes`
|
19
|
+
version.update(object_changes: "---\nid:\n- \n- 1\nstatus:\n- draft\n- published\n")
|
20
|
+
assert_equal %w(draft published), version.changeset["status"]
|
21
|
+
end
|
25
22
|
|
26
|
-
|
27
|
-
|
23
|
+
context "storing enum object_changes" do
|
24
|
+
subject { post.versions.last }
|
28
25
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
26
|
+
it "should stash the enum value properly in versions object_changes" do
|
27
|
+
post.published!
|
28
|
+
post.archived!
|
29
|
+
expect(subject.changeset["status"]).to eql %w(published archived)
|
34
30
|
end
|
31
|
+
end
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
33
|
+
describe "#touch_with_version" do
|
34
|
+
it "preserves the enum value (and all other attributes)" do
|
35
|
+
post = described_class.create(status: :draft)
|
36
|
+
expect(post.versions.count).to eq(1)
|
37
|
+
expect(post.status).to eq("draft")
|
38
|
+
Timecop.travel 1.second.since # because MySQL lacks fractional seconds precision
|
39
|
+
post.paper_trail.touch_with_version
|
40
|
+
expect(post.versions.count).to eq(2)
|
41
|
+
expect(post.versions.last[:object]).to include("status: 0")
|
42
|
+
expect(post.paper_trail.previous_version.status).to eq("draft")
|
47
43
|
end
|
48
44
|
end
|
49
45
|
end
|
@@ -1,18 +1,15 @@
|
|
1
1
|
class ApplicationController < ActionController::Base
|
2
2
|
protect_from_forgery
|
3
3
|
|
4
|
-
# Rails 5 deprecates `before_filter`
|
5
|
-
name_of_before_callback = respond_to?(:before_action) ? :before_action : :before_filter
|
6
|
-
|
7
4
|
# Some applications and libraries modify `current_user`. Their changes need
|
8
5
|
# to be reflected in `whodunnit`, so the `set_paper_trail_whodunnit` below
|
9
6
|
# must happen after this.
|
10
|
-
|
7
|
+
before_action :modify_current_user
|
11
8
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
|
9
|
+
# PT used to add this callback automatically. Now people are required to add
|
10
|
+
# it themsevles, like this, allowing them to control the order of callbacks.
|
11
|
+
# The `modify_current_user` callback above shows why this control is useful.
|
12
|
+
before_action :set_paper_trail_whodunnit
|
16
13
|
|
17
14
|
def rescue_action(e)
|
18
15
|
raise e
|
@@ -11,10 +11,6 @@ class ArticlesController < ApplicationController
|
|
11
11
|
private
|
12
12
|
|
13
13
|
def article_params
|
14
|
-
|
15
|
-
params[:article]
|
16
|
-
else
|
17
|
-
params.require(:article).permit!
|
18
|
-
end
|
14
|
+
params.require(:article).permit!
|
19
15
|
end
|
20
16
|
end
|
@@ -1,8 +1,7 @@
|
|
1
|
+
# This model tests ActiveRecord::Enum, which was added in AR 4.1
|
2
|
+
# http://edgeguides.rubyonrails.org/4_1_release_notes.html#active-record-enums
|
1
3
|
class PostWithStatus < ActiveRecord::Base
|
2
4
|
has_paper_trail
|
3
5
|
|
4
|
-
|
5
|
-
if defined?(ActiveRecord::Enum)
|
6
|
-
enum status: { draft: 0, published: 1, archived: 2 }
|
7
|
-
end
|
6
|
+
enum status: { draft: 0, published: 1, archived: 2 }
|
8
7
|
end
|
@@ -1,16 +1,8 @@
|
|
1
1
|
class Widget < ActiveRecord::Base
|
2
|
+
EXCLUDED_NAME = "Biglet".freeze
|
2
3
|
has_paper_trail
|
3
4
|
has_one :wotsit
|
5
|
+
has_many :fluxors, -> { order(:name) }
|
4
6
|
has_many :whatchamajiggers, as: :owner
|
5
|
-
|
6
|
-
EXCLUDED_NAME = "Biglet".freeze
|
7
|
-
|
8
7
|
validates :name, exclusion: { in: [EXCLUDED_NAME] }
|
9
|
-
|
10
|
-
# `has_many` syntax for specifying order uses a lambda in Rails 4
|
11
|
-
if ::ActiveRecord::VERSION::MAJOR >= 4
|
12
|
-
has_many :fluxors, -> { order(:name) }
|
13
|
-
else
|
14
|
-
has_many :fluxors, order: :name
|
15
|
-
end
|
16
8
|
end
|
@@ -45,14 +45,6 @@ module Dummy
|
|
45
45
|
# like if you have constraints or database-specific column types
|
46
46
|
# config.active_record.schema_format = :sql
|
47
47
|
|
48
|
-
# Enforce whitelist mode for mass assignment.
|
49
|
-
# This will create an empty whitelist of attributes available for mass-assignment for all models
|
50
|
-
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
|
51
|
-
# parameters by using an attr_accessible or attr_protected declaration.
|
52
|
-
if ::PaperTrail.active_record_protected_attributes?
|
53
|
-
config.active_record.whitelist_attributes = false
|
54
|
-
end
|
55
|
-
|
56
48
|
# `config.assets` is a `NoMethodError` in rails 5.
|
57
49
|
config.assets.enabled = false if config.respond_to?(:assets)
|
58
50
|
|
@@ -22,11 +22,6 @@ Dummy::Application.configure do
|
|
22
22
|
# Only use best-standards-support built into browsers
|
23
23
|
config.action_dispatch.best_standards_support = :builtin
|
24
24
|
|
25
|
-
# Raise exception on mass assignment protection for Active Record models
|
26
|
-
if ::PaperTrail.active_record_protected_attributes?
|
27
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
28
|
-
end
|
29
|
-
|
30
25
|
# Log the query plan for queries taking more than this (works
|
31
26
|
# with SQLite, MySQL, and PostgreSQL)
|
32
27
|
# config.active_record.auto_explain_threshold_in_seconds = 0.5
|
@@ -41,11 +41,6 @@ Dummy::Application.configure do
|
|
41
41
|
# ActionMailer::Base.deliveries array.
|
42
42
|
# config.action_mailer.delivery_method = :test
|
43
43
|
|
44
|
-
# Raise exception on mass assignment protection for Active Record models
|
45
|
-
if ::PaperTrail.active_record_protected_attributes?
|
46
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
47
|
-
end
|
48
|
-
|
49
44
|
# Print deprecation notices to the stderr
|
50
45
|
config.active_support.deprecation = :stderr
|
51
46
|
end
|
data/test/test_helper.rb
CHANGED
@@ -104,16 +104,7 @@ module CleanupCallbacks
|
|
104
104
|
original_callbacks = nil
|
105
105
|
|
106
106
|
setup do
|
107
|
-
|
108
|
-
original_callbacks = target.send(:get_callbacks, type).deep_dup
|
109
|
-
else
|
110
|
-
# While this defeats the purpose of targeted callback
|
111
|
-
# cleanup, callbacks were incredibly difficult to modify
|
112
|
-
# prior to Rails 4, and Rails internal callbacks were only
|
113
|
-
# used for autosaving associations in Rails 3. Our tests
|
114
|
-
# don't care whether a Fluxor's widget is autosaved.
|
115
|
-
target.reset_callbacks(type)
|
116
|
-
end
|
107
|
+
original_callbacks = target.send(:get_callbacks, type).deep_dup
|
117
108
|
end
|
118
109
|
|
119
110
|
teardown do
|
data/test/unit/model_test.rb
CHANGED
@@ -678,39 +678,22 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
|
678
678
|
end
|
679
679
|
end
|
680
680
|
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
#
|
698
|
-
# In rails 5, `capture` is deprecated in favor of `capture_io`.
|
699
|
-
#
|
700
|
-
should "not generate warning" do
|
701
|
-
assert_update_raises_nothing = lambda {
|
702
|
-
assert_nothing_raised {
|
703
|
-
@wotsit.update_attributes! name: "changed"
|
704
|
-
}
|
705
|
-
}
|
706
|
-
warnings =
|
707
|
-
if respond_to?(:capture_io)
|
708
|
-
capture_io { assert_update_raises_nothing.call }.last
|
709
|
-
else
|
710
|
-
capture(:stderr) { assert_update_raises_nothing.call }
|
711
|
-
end
|
712
|
-
assert_equal "", warnings
|
713
|
-
end
|
681
|
+
test "update_attributes! records timestamps" do
|
682
|
+
wotsit = Wotsit.create! name: "wotsit"
|
683
|
+
wotsit.update_attributes! name: "changed"
|
684
|
+
reified = wotsit.versions.last.reify
|
685
|
+
assert_not_nil reified.created_at
|
686
|
+
assert_not_nil reified.updated_at
|
687
|
+
end
|
688
|
+
|
689
|
+
# Tests that it doesn't try to write created_on as an attribute just because
|
690
|
+
# a created_on method exists.
|
691
|
+
#
|
692
|
+
# - ActiveModel::MissingAttributeError in Rails 4
|
693
|
+
#
|
694
|
+
test "update_attributes! does not raise error" do
|
695
|
+
wotsit = Wotsit.create! name: "name1"
|
696
|
+
assert_nothing_raised { wotsit.update_attributes! name: "name2" }
|
714
697
|
end
|
715
698
|
|
716
699
|
context "A subclass" do
|
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: 6.0.
|
4
|
+
version: 6.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Stewart
|
@@ -356,7 +356,6 @@ files:
|
|
356
356
|
- test/dummy/app/controllers/articles_controller.rb
|
357
357
|
- test/dummy/app/controllers/test_controller.rb
|
358
358
|
- test/dummy/app/controllers/widgets_controller.rb
|
359
|
-
- test/dummy/app/helpers/application_helper.rb
|
360
359
|
- test/dummy/app/models/animal.rb
|
361
360
|
- test/dummy/app/models/article.rb
|
362
361
|
- test/dummy/app/models/authorship.rb
|
@@ -389,7 +388,6 @@ files:
|
|
389
388
|
- test/dummy/app/models/person.rb
|
390
389
|
- test/dummy/app/models/post.rb
|
391
390
|
- test/dummy/app/models/post_with_status.rb
|
392
|
-
- test/dummy/app/models/protected_widget.rb
|
393
391
|
- test/dummy/app/models/quotation.rb
|
394
392
|
- test/dummy/app/models/section.rb
|
395
393
|
- test/dummy/app/models/skipper.rb
|
@@ -406,7 +404,6 @@ files:
|
|
406
404
|
- test/dummy/app/versions/json_version.rb
|
407
405
|
- test/dummy/app/versions/kitchen/banana_version.rb
|
408
406
|
- test/dummy/app/versions/post_version.rb
|
409
|
-
- test/dummy/app/views/layouts/application.html.erb
|
410
407
|
- test/dummy/config.ru
|
411
408
|
- test/dummy/config/application.rb
|
412
409
|
- test/dummy/config/boot.rb
|
@@ -427,7 +424,6 @@ files:
|
|
427
424
|
- test/dummy/config/routes.rb
|
428
425
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
429
426
|
- test/dummy/db/schema.rb
|
430
|
-
- test/dummy/script/rails
|
431
427
|
- test/functional/controller_test.rb
|
432
428
|
- test/functional/enabled_for_controller_test.rb
|
433
429
|
- test/functional/modular_sinatra_test.rb
|
@@ -439,7 +435,6 @@ files:
|
|
439
435
|
- test/unit/cleaner_test.rb
|
440
436
|
- test/unit/inheritance_column_test.rb
|
441
437
|
- test/unit/model_test.rb
|
442
|
-
- test/unit/protected_attrs_test.rb
|
443
438
|
- test/unit/serializer_test.rb
|
444
439
|
- test/unit/serializers/json_test.rb
|
445
440
|
- test/unit/serializers/mixin_json_test.rb
|
@@ -505,7 +500,6 @@ test_files:
|
|
505
500
|
- test/dummy/app/controllers/articles_controller.rb
|
506
501
|
- test/dummy/app/controllers/test_controller.rb
|
507
502
|
- test/dummy/app/controllers/widgets_controller.rb
|
508
|
-
- test/dummy/app/helpers/application_helper.rb
|
509
503
|
- test/dummy/app/models/animal.rb
|
510
504
|
- test/dummy/app/models/article.rb
|
511
505
|
- test/dummy/app/models/authorship.rb
|
@@ -538,7 +532,6 @@ test_files:
|
|
538
532
|
- test/dummy/app/models/person.rb
|
539
533
|
- test/dummy/app/models/post.rb
|
540
534
|
- test/dummy/app/models/post_with_status.rb
|
541
|
-
- test/dummy/app/models/protected_widget.rb
|
542
535
|
- test/dummy/app/models/quotation.rb
|
543
536
|
- test/dummy/app/models/section.rb
|
544
537
|
- test/dummy/app/models/skipper.rb
|
@@ -555,7 +548,6 @@ test_files:
|
|
555
548
|
- test/dummy/app/versions/json_version.rb
|
556
549
|
- test/dummy/app/versions/kitchen/banana_version.rb
|
557
550
|
- test/dummy/app/versions/post_version.rb
|
558
|
-
- test/dummy/app/views/layouts/application.html.erb
|
559
551
|
- test/dummy/config.ru
|
560
552
|
- test/dummy/config/application.rb
|
561
553
|
- test/dummy/config/boot.rb
|
@@ -576,7 +568,6 @@ test_files:
|
|
576
568
|
- test/dummy/config/routes.rb
|
577
569
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
578
570
|
- test/dummy/db/schema.rb
|
579
|
-
- test/dummy/script/rails
|
580
571
|
- test/functional/controller_test.rb
|
581
572
|
- test/functional/enabled_for_controller_test.rb
|
582
573
|
- test/functional/modular_sinatra_test.rb
|
@@ -588,7 +579,6 @@ test_files:
|
|
588
579
|
- test/unit/cleaner_test.rb
|
589
580
|
- test/unit/inheritance_column_test.rb
|
590
581
|
- test/unit/model_test.rb
|
591
|
-
- test/unit/protected_attrs_test.rb
|
592
582
|
- test/unit/serializer_test.rb
|
593
583
|
- test/unit/serializers/json_test.rb
|
594
584
|
- test/unit/serializers/mixin_json_test.rb
|
data/test/dummy/script/rails
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# This command will automatically be run when you run "rails" with Rails 3 gems
|
4
|
-
# installed from the root of your application.
|
5
|
-
|
6
|
-
APP_PATH = File.expand_path("../../config/application", __FILE__)
|
7
|
-
require File.expand_path("../../config/boot", __FILE__)
|
8
|
-
require "rails/commands"
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class ProtectedAttrsTest < ActiveSupport::TestCase
|
4
|
-
subject { ProtectedWidget.new }
|
5
|
-
|
6
|
-
# These ActiveModel matchers (provided by shoulda-matchers) only work for
|
7
|
-
# Rails 3.
|
8
|
-
if ActiveRecord::VERSION::MAJOR < 4
|
9
|
-
accessible_attrs = ProtectedWidget.accessible_attributes.to_a
|
10
|
-
accessible_attrs.each do |attr_name|
|
11
|
-
should allow_mass_assignment_of(attr_name.to_sym)
|
12
|
-
end
|
13
|
-
inaccessible = ProtectedWidget.
|
14
|
-
column_names.
|
15
|
-
reject { |column_name| accessible_attrs.include?(column_name) }
|
16
|
-
inaccessible.each do |attr_name|
|
17
|
-
should_not allow_mass_assignment_of(attr_name.to_sym)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "A model with `attr_accessible` created" do
|
22
|
-
setup do
|
23
|
-
@widget = ProtectedWidget.create! name: "Henry"
|
24
|
-
@initial_attributes = @widget.attributes
|
25
|
-
end
|
26
|
-
|
27
|
-
should "be `nil` in its previous version" do
|
28
|
-
assert_nil @widget.paper_trail.previous_version
|
29
|
-
end
|
30
|
-
|
31
|
-
context "which is then updated" do
|
32
|
-
setup do
|
33
|
-
@widget.assign_attributes(name: "Jeff", a_text: "Short statement")
|
34
|
-
@widget.an_integer = 42
|
35
|
-
@widget.save!
|
36
|
-
end
|
37
|
-
|
38
|
-
should "not be `nil` in its previous version" do
|
39
|
-
assert_not_nil @widget.paper_trail.previous_version
|
40
|
-
end
|
41
|
-
|
42
|
-
should "the previous version should contain right attributes" do
|
43
|
-
# For some reason this test seems to be broken in JRuby 1.9 mode in the
|
44
|
-
# test env even though it works in the console. WTF?
|
45
|
-
unless ActiveRecord::VERSION::MAJOR >= 4 && defined?(JRUBY_VERSION)
|
46
|
-
previous_attributes = @widget.paper_trail.previous_version.attributes
|
47
|
-
assert_attributes_equal previous_attributes, @initial_attributes
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|