paper_trail 6.0.2 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +20 -0
- data/.rubocop.yml +30 -2
- data/.rubocop_todo.yml +20 -0
- data/.travis.yml +3 -5
- data/Appraisals +5 -6
- data/CHANGELOG.md +33 -0
- data/README.md +43 -81
- data/Rakefile +1 -1
- data/doc/bug_report_template.rb +4 -2
- data/gemfiles/ar_4.0.gemfile +7 -0
- data/gemfiles/ar_4.2.gemfile +0 -1
- data/lib/generators/paper_trail/templates/create_version_associations.rb +1 -1
- data/lib/generators/paper_trail/templates/create_versions.rb +1 -1
- data/lib/paper_trail.rb +7 -9
- data/lib/paper_trail/config.rb +0 -15
- data/lib/paper_trail/frameworks/rspec.rb +8 -2
- data/lib/paper_trail/model_config.rb +6 -2
- data/lib/paper_trail/record_trail.rb +3 -1
- data/lib/paper_trail/reifier.rb +43 -354
- data/lib/paper_trail/reifiers/belongs_to.rb +48 -0
- data/lib/paper_trail/reifiers/has_and_belongs_to_many.rb +50 -0
- data/lib/paper_trail/reifiers/has_many.rb +110 -0
- data/lib/paper_trail/reifiers/has_many_through.rb +90 -0
- data/lib/paper_trail/reifiers/has_one.rb +76 -0
- data/lib/paper_trail/serializers/yaml.rb +2 -25
- data/lib/paper_trail/version_concern.rb +5 -5
- data/lib/paper_trail/version_number.rb +7 -3
- data/paper_trail.gemspec +7 -34
- data/spec/controllers/articles_controller_spec.rb +1 -1
- data/spec/generators/install_generator_spec.rb +40 -34
- data/spec/models/animal_spec.rb +50 -25
- data/spec/models/boolit_spec.rb +8 -7
- data/spec/models/callback_modifier_spec.rb +13 -13
- data/spec/models/document_spec.rb +21 -0
- data/spec/models/gadget_spec.rb +35 -39
- data/spec/models/joined_version_spec.rb +4 -4
- data/spec/models/json_version_spec.rb +14 -15
- data/spec/models/not_on_update_spec.rb +1 -1
- data/spec/models/post_with_status_spec.rb +2 -2
- data/spec/models/skipper_spec.rb +4 -4
- data/spec/models/thing_spec.rb +1 -1
- data/spec/models/truck_spec.rb +1 -1
- data/spec/models/vehicle_spec.rb +1 -1
- data/spec/models/version_spec.rb +152 -168
- data/spec/models/widget_spec.rb +170 -196
- data/spec/modules/paper_trail_spec.rb +3 -3
- data/spec/modules/version_concern_spec.rb +5 -8
- data/spec/modules/version_number_spec.rb +11 -36
- data/spec/paper_trail/cleaner_spec.rb +152 -0
- data/spec/paper_trail/config_spec.rb +1 -1
- data/spec/paper_trail/serializers/custom_yaml_serializer_spec.rb +45 -0
- data/spec/paper_trail/serializers/json_spec.rb +57 -0
- data/spec/paper_trail/version_limit_spec.rb +55 -0
- data/spec/paper_trail_spec.rb +45 -32
- data/spec/requests/articles_spec.rb +4 -4
- data/test/dummy/app/models/custom_primary_key_record.rb +4 -2
- data/test/dummy/app/models/document.rb +1 -1
- data/test/dummy/app/models/not_on_update.rb +1 -1
- data/test/dummy/app/models/on/create.rb +6 -0
- data/test/dummy/app/models/on/destroy.rb +6 -0
- data/test/dummy/app/models/on/empty_array.rb +6 -0
- data/test/dummy/app/models/on/update.rb +6 -0
- data/test/dummy/app/models/person.rb +1 -0
- data/test/dummy/app/models/song.rb +19 -28
- data/test/dummy/config/application.rb +10 -43
- data/test/dummy/config/routes.rb +1 -1
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +25 -51
- data/test/dummy/db/schema.rb +29 -19
- data/test/test_helper.rb +0 -16
- data/test/unit/associations_test.rb +81 -81
- data/test/unit/model_test.rb +48 -131
- data/test/unit/serializer_test.rb +34 -45
- data/test/unit/serializers/mixin_json_test.rb +3 -1
- data/test/unit/serializers/yaml_test.rb +1 -5
- metadata +44 -19
- data/lib/paper_trail/frameworks/sinatra.rb +0 -40
- data/test/functional/modular_sinatra_test.rb +0 -46
- data/test/functional/sinatra_test.rb +0 -51
- data/test/unit/cleaner_test.rb +0 -151
- data/test/unit/inheritance_column_test.rb +0 -41
- data/test/unit/serializers/json_test.rb +0 -95
- data/test/unit/serializers/mixin_yaml_test.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3a67c57c19665911311eab6dc66bd670e390f57
|
4
|
+
data.tar.gz: f74e8562ba1ac3e305d5785e50fc1357ee0a69ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e493b2ef87fb52d53c54cefa55369ee31ac82261d30dac5833bc4d010aeff5387fd9362deef390b97e7b646bc22fbbaeb5ea2620d63cc2369e5e9ddcd78744e
|
7
|
+
data.tar.gz: 4cb5a0c791d890011e9aff19d0e8119955e43d8aab22a2bd57f5c7c9457dd5dc60345d79494aedf87e254dd3dde524832b04e2baeeca4eaedc1b7e1f91b5b893
|
data/.github/CONTRIBUTING.md
CHANGED
@@ -48,6 +48,10 @@ cd ../..
|
|
48
48
|
|
49
49
|
# Run tests
|
50
50
|
DB=sqlite bundle exec appraisal ar-4.2 rake
|
51
|
+
|
52
|
+
# Run a single test file
|
53
|
+
DB=sqlite bundle exec appraisal ar-4.2 ruby -I test test/unit/associations_test.rb
|
54
|
+
DB=sqlite bundle exec appraisal ar-4.2 rspec spec/paper_trail/serializers/json_spec.rb
|
51
55
|
```
|
52
56
|
|
53
57
|
### Test sqlite, AR 5
|
@@ -118,6 +122,22 @@ DB=postgres bundle exec rake
|
|
118
122
|
DB=postgres bundle exec appraisal ar-5.0 rake
|
119
123
|
```
|
120
124
|
|
125
|
+
## Editing the migration
|
126
|
+
|
127
|
+
After editing `test/dummy/db/migrate/20110208155312_set_up_test_tables.rb` ..
|
128
|
+
|
129
|
+
```
|
130
|
+
cd test/dummy
|
131
|
+
export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile
|
132
|
+
RAILS_ENV=test bundle exec rake db:environment:set db:drop db:create db:migrate
|
133
|
+
RAILS_ENV=foo bundle exec rake db:environment:set db:drop db:create db:migrate
|
134
|
+
RAILS_ENV=bar bundle exec rake db:environment:set db:drop db:create db:migrate
|
135
|
+
unset BUNDLE_GEMFILE
|
136
|
+
cd ../..
|
137
|
+
```
|
138
|
+
|
139
|
+
Don't forget to commit changes to `schema.rb`.
|
140
|
+
|
121
141
|
## Releases
|
122
142
|
|
123
143
|
1. Set the version in lib/paper_trail/version_number.rb
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rspec
|
3
|
+
|
1
4
|
inherit_from: .rubocop_todo.yml
|
2
5
|
|
3
6
|
# Please:
|
@@ -12,7 +15,7 @@ AllCops:
|
|
12
15
|
- test/dummy/db/schema.rb # Generated, out of our control
|
13
16
|
|
14
17
|
# Set to lowest supported version
|
15
|
-
TargetRubyVersion: 1
|
18
|
+
TargetRubyVersion: 2.1
|
16
19
|
|
17
20
|
# Migrations often contain long up/down methods, and extracting smaller methods
|
18
21
|
# from these is of questionable value.
|
@@ -20,6 +23,10 @@ Metrics/AbcSize:
|
|
20
23
|
Exclude:
|
21
24
|
- 'test/dummy/db/migrate/*'
|
22
25
|
|
26
|
+
# Not a useful metric compared to, e.g. `AbcSize`.
|
27
|
+
Metrics/BlockLength:
|
28
|
+
Enabled: false
|
29
|
+
|
23
30
|
# Not a useful metric compared to, e.g. `AbcSize`.
|
24
31
|
Metrics/ClassLength:
|
25
32
|
Enabled: false
|
@@ -40,6 +47,19 @@ Metrics/MethodLength:
|
|
40
47
|
Metrics/ModuleLength:
|
41
48
|
Enabled: false
|
42
49
|
|
50
|
+
# In an ideal world, each example has a single expectation. In the real world,
|
51
|
+
# sometimes setup is a pain and you don't want to duplicate setup in multiple
|
52
|
+
# examples, or make the specs more confusing with many nested `context`s, and
|
53
|
+
# the practical thing is to have multiple expectations.
|
54
|
+
RSpec/MultipleExpectations:
|
55
|
+
Enabled: false
|
56
|
+
|
57
|
+
# Yes, ideally examples would be short. Is it possible to pick a limit and say,
|
58
|
+
# "no example will ever be longer than this"? Hard to say. Sometimes they're
|
59
|
+
# quite long.
|
60
|
+
RSpec/ExampleLength:
|
61
|
+
Enabled: false
|
62
|
+
|
43
63
|
Style/AlignParameters:
|
44
64
|
EnforcedStyle: with_fixed_indentation
|
45
65
|
|
@@ -56,17 +76,25 @@ Style/DotPosition:
|
|
56
76
|
Style/DoubleNegation:
|
57
77
|
Enabled: false
|
58
78
|
|
79
|
+
Style/FileName:
|
80
|
+
Exclude:
|
81
|
+
- Appraisals
|
82
|
+
|
59
83
|
# The decision of when to use a guard clause to improve readability is subtle,
|
60
84
|
# and it's not clear that it can be linted. Certainly, the default
|
61
85
|
# `MinBodyLength` of 1 can actually hurt readability.
|
62
86
|
Style/GuardClause:
|
63
|
-
|
87
|
+
Enabled: false
|
64
88
|
|
65
89
|
# Use postfix (modifier) conditionals for one-liners, unless doing so would
|
66
90
|
# exceed 60 characters.
|
67
91
|
Style/IfUnlessModifier:
|
68
92
|
MaxLineLength: 60
|
69
93
|
|
94
|
+
Style/IndentHeredoc:
|
95
|
+
Exclude:
|
96
|
+
- paper_trail.gemspec
|
97
|
+
|
70
98
|
# The Ruby Style Guide says:
|
71
99
|
#
|
72
100
|
# > Use \ instead of + or << to concatenate two string literals at line end.
|
data/.rubocop_todo.yml
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
1
3
|
# Remove these configuration records
|
2
4
|
# one by one as the offenses are removed from the code base.
|
3
5
|
|
@@ -12,3 +14,21 @@ Metrics/PerceivedComplexity:
|
|
12
14
|
|
13
15
|
Style/FrozenStringLiteralComment:
|
14
16
|
Enabled: false
|
17
|
+
|
18
|
+
RSpec/BeforeAfterAll:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
RSpec/FilePath:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
RSpec/MessageSpies:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
RSpec/NamedSubject:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
RSpec/NestedGroups:
|
31
|
+
Max: 5 # goal: 3
|
32
|
+
|
33
|
+
Security/YAMLLoad:
|
34
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -2,8 +2,7 @@ language: ruby
|
|
2
2
|
cache: bundler
|
3
3
|
rvm:
|
4
4
|
- 2.3.1
|
5
|
-
- 1.
|
6
|
-
- jruby-19mode
|
5
|
+
- 2.1.10
|
7
6
|
env:
|
8
7
|
global:
|
9
8
|
- TRAVIS=true
|
@@ -25,6 +24,7 @@ before_script:
|
|
25
24
|
- sh -c "if [ \"$DB\" = 'postgres' ]; then psql -c 'create database paper_trail_foo;' -U postgres; fi"
|
26
25
|
|
27
26
|
gemfile:
|
27
|
+
- gemfiles/ar_4.0.gemfile
|
28
28
|
- gemfiles/ar_4.2.gemfile
|
29
29
|
- gemfiles/ar_5.0.gemfile
|
30
30
|
- gemfiles/ar_master.gemfile
|
@@ -33,9 +33,7 @@ matrix:
|
|
33
33
|
fast_finish: true
|
34
34
|
exclude:
|
35
35
|
- gemfile: gemfiles/ar_5.0.gemfile
|
36
|
-
rvm: 1.
|
37
|
-
- gemfile: gemfiles/ar_5.0.gemfile
|
38
|
-
rvm: jruby-19mode
|
36
|
+
rvm: 2.1.10
|
39
37
|
allow_failures:
|
40
38
|
- gemfile: gemfiles/ar_master.gemfile
|
41
39
|
|
data/Appraisals
CHANGED
@@ -7,19 +7,18 @@
|
|
7
7
|
# > the version from the appraisal takes precedence.
|
8
8
|
# > https://github.com/thoughtbot/appraisal
|
9
9
|
|
10
|
+
appraise "ar-4.0" do
|
11
|
+
gem "activerecord", "~> 4.0"
|
12
|
+
end
|
13
|
+
|
10
14
|
appraise "ar-4.2" do
|
11
15
|
gem "activerecord", "~> 4.2"
|
12
|
-
gem "sinatra", "~> 1.4.6"
|
13
16
|
end
|
14
17
|
|
15
18
|
appraise "ar-5.0" do
|
16
19
|
gem "activerecord", "~> 5.0.0"
|
17
20
|
gem "rspec-rails", "~> 3.5.1"
|
18
|
-
gem
|
19
|
-
|
20
|
-
# The AR5 version of PaperTrail is not compatible with sinatra 2 yet.
|
21
|
-
# Contributions welcome.
|
22
|
-
# gem "sinatra", "2.0.0.beta2"
|
21
|
+
gem "rails-controller-testing"
|
23
22
|
end
|
24
23
|
|
25
24
|
appraise "ar_master" do
|
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,35 @@ recommendations of [keepachangelog.com](http://keepachangelog.com/).
|
|
17
17
|
|
18
18
|
- None
|
19
19
|
|
20
|
+
## 7.0.0 (2017-04-01)
|
21
|
+
|
22
|
+
### Breaking Changes
|
23
|
+
|
24
|
+
- Drop support for ruby 1.9.3, whose EOL was 2015-02-23
|
25
|
+
- Drop support for ruby 2.0.0, whose EOL was 2016-02-24
|
26
|
+
- Remove deprecated config methods:
|
27
|
+
- PaperTrail.serialized_attributes?
|
28
|
+
- PaperTrail.config.serialized_attributes
|
29
|
+
- PaperTrail.config.serialized_attributes=
|
30
|
+
- Sinatra integration moved to
|
31
|
+
[paper_trail-sinatra](https://github.com/jaredbeck/paper_trail-sinatra) gem
|
32
|
+
|
33
|
+
### Added
|
34
|
+
|
35
|
+
- `PaperTrail.gem_version` returns a `Gem::Version`, nice for comparisons.
|
36
|
+
|
37
|
+
### Fixed
|
38
|
+
|
39
|
+
- [#925](https://github.com/airblade/paper_trail/pull/925) - Update RSpec
|
40
|
+
matchers to work with custom version association names
|
41
|
+
- [#929](https://github.com/airblade/paper_trail/pull/929) -
|
42
|
+
Fix error calling private method in rails 4.0
|
43
|
+
- [#938](https://github.com/airblade/paper_trail/pull/938) - Fix bug where
|
44
|
+
non-standard foreign key names broke belongs_to associations
|
45
|
+
- [#940](https://github.com/airblade/paper_trail/pull/940) - When destroying
|
46
|
+
versions to stay under version_limit, don't rely on the database to
|
47
|
+
implicitly return the versions in the right order
|
48
|
+
|
20
49
|
## 6.0.2 (2016-12-13)
|
21
50
|
|
22
51
|
### Breaking Changes
|
@@ -297,6 +326,10 @@ name conflict with your methods.
|
|
297
326
|
|
298
327
|
## 4.1.0 (2016-01-30)
|
299
328
|
|
329
|
+
### Known Issues
|
330
|
+
|
331
|
+
- Version changesets now store ENUM values incorrectly (as nulls). Previously the values were stored as strings. This only affects Rails 4, not Rails 5. See [#926](https://github.com/airblade/paper_trail/pull/926)
|
332
|
+
|
300
333
|
### Breaking Changes
|
301
334
|
|
302
335
|
- None
|
data/README.md
CHANGED
@@ -11,6 +11,7 @@ has been destroyed.
|
|
11
11
|
| Version | Documentation |
|
12
12
|
| -------------- | ------------- |
|
13
13
|
| Unreleased | https://github.com/airblade/paper_trail/blob/master/README.md |
|
14
|
+
| 7.0.0 | https://github.com/airblade/paper_trail/blob/v7.0.0/README.md |
|
14
15
|
| 6.0.2 | https://github.com/airblade/paper_trail/blob/v6.0.2/README.md |
|
15
16
|
| 5.2.3 | https://github.com/airblade/paper_trail/blob/v5.2.3/README.md |
|
16
17
|
| 4.2.0 | https://github.com/airblade/paper_trail/blob/v4.2.0/README.md |
|
@@ -64,7 +65,9 @@ has been destroyed.
|
|
64
65
|
|
65
66
|
| paper_trail | branch | tags | ruby | activerecord |
|
66
67
|
| -------------- | ---------- | ------ | -------- | ------------- |
|
67
|
-
|
|
68
|
+
| unreleased | master | | >= 2.1.0 | >= 4.0, < 6 |
|
69
|
+
| 7 | 7-stable | v7.x | >= 2.1.0 | >= 4.0, < 6 |
|
70
|
+
| 6 | 6-stable | v6.x | >= 1.9.3 | >= 4.0, < 6 |
|
68
71
|
| 5 | 5-stable | v5.x | >= 1.9.3 | >= 3.0, < 5.1 |
|
69
72
|
| 4 | 4-stable | v4.x | >= 1.8.7 | >= 3.0, < 5.1 |
|
70
73
|
| 3 | 3.0-stable | v3.x | >= 1.8.7 | >= 3.0, < 5 |
|
@@ -356,84 +359,88 @@ use attribute_name_was instead of attribute_name.
|
|
356
359
|
|
357
360
|
### 2.c. Choosing Attributes To Monitor
|
358
361
|
|
359
|
-
|
362
|
+
#### Ignore
|
363
|
+
|
364
|
+
You can `ignore` changes to certain attributes:
|
360
365
|
|
361
366
|
```ruby
|
362
367
|
class Article < ActiveRecord::Base
|
363
|
-
has_paper_trail :
|
368
|
+
has_paper_trail ignore: [:title, :rating]
|
364
369
|
end
|
365
370
|
```
|
366
371
|
|
367
|
-
|
368
|
-
|
369
|
-
attributes will be ignored if some other change causes a new
|
370
|
-
`PaperTrail::Version` to be created. For example:
|
372
|
+
Changes to just the `title` or `rating` will not create a version record.
|
373
|
+
Changes to other attributes will create a version record.
|
371
374
|
|
372
375
|
```ruby
|
373
376
|
a = Article.create
|
374
377
|
a.versions.length # 1
|
375
|
-
a.update_attributes :
|
378
|
+
a.update_attributes title: 'My Title', rating: 3
|
376
379
|
a.versions.length # 1
|
377
|
-
a.update_attributes :
|
380
|
+
a.update_attributes title: 'Greeting', content: 'Hello'
|
378
381
|
a.versions.length # 2
|
379
382
|
a.paper_trail.previous_version.title # 'My Title'
|
380
383
|
```
|
381
384
|
|
382
|
-
|
385
|
+
#### Only
|
386
|
+
|
387
|
+
Or, you can specify a list of the `only` attributes you care about:
|
383
388
|
|
384
389
|
```ruby
|
385
390
|
class Article < ActiveRecord::Base
|
386
|
-
has_paper_trail :
|
391
|
+
has_paper_trail only: [:title]
|
387
392
|
end
|
388
393
|
```
|
389
394
|
|
390
|
-
|
395
|
+
Only changes to the `title` will create a version record.
|
391
396
|
|
392
397
|
```ruby
|
393
398
|
a = Article.create
|
394
399
|
a.versions.length # 1
|
395
|
-
a.update_attributes :
|
400
|
+
a.update_attributes title: 'My Title'
|
396
401
|
a.versions.length # 2
|
397
|
-
a.update_attributes :
|
402
|
+
a.update_attributes content: 'Hello'
|
398
403
|
a.versions.length # 2
|
399
404
|
a.paper_trail.previous_version.content # nil
|
400
405
|
```
|
401
406
|
|
402
|
-
The `:ignore` and `:only` options can also accept `Hash` arguments
|
407
|
+
The `:ignore` and `:only` options can also accept `Hash` arguments.
|
403
408
|
|
404
409
|
```ruby
|
405
410
|
class Article < ActiveRecord::Base
|
406
|
-
has_paper_trail :
|
411
|
+
has_paper_trail only: { title: Proc.new { |obj| !obj.title.blank? } }
|
407
412
|
end
|
408
413
|
```
|
409
414
|
|
410
|
-
|
411
|
-
will
|
415
|
+
If the `title` is not blank, then only changes to the `title`
|
416
|
+
will create a version record.
|
412
417
|
|
413
418
|
```ruby
|
414
419
|
a = Article.create
|
415
420
|
a.versions.length # 1
|
416
|
-
a.update_attributes :
|
421
|
+
a.update_attributes content: 'Hello'
|
417
422
|
a.versions.length # 2
|
418
|
-
a.update_attributes :
|
423
|
+
a.update_attributes title: 'Title One'
|
419
424
|
a.versions.length # 3
|
420
|
-
a.update_attributes :
|
425
|
+
a.update_attributes content: 'Hai'
|
421
426
|
a.versions.length # 3
|
422
427
|
a.paper_trail.previous_version.content # "Hello"
|
423
|
-
a.update_attributes :
|
428
|
+
a.update_attributes title: 'Title Two'
|
424
429
|
a.versions.length # 4
|
425
430
|
a.paper_trail.previous_version.content # "Hai"
|
426
431
|
```
|
427
432
|
|
428
|
-
|
429
|
-
|
433
|
+
Configuring both `:ignore` and `:only` is not recommended, but it should work as
|
434
|
+
expected. Passing both `:ignore` and `:only` options will result in the
|
435
|
+
article being saved if a changed attribute is included in `:only` but not in
|
436
|
+
`:ignore`.
|
430
437
|
|
431
|
-
|
432
|
-
updates to these fields will not create a new `PaperTrail::Version`. In
|
433
|
-
addition, these fields will not be included in the serialized version of the
|
434
|
-
object whenever a new `PaperTrail::Version` is created.
|
438
|
+
#### Skip
|
435
439
|
|
436
|
-
|
440
|
+
You can skip attributes completely with the `:skip` option. As with `:ignore`,
|
441
|
+
updates to these attributes will not create a version record. In addition, if a
|
442
|
+
version record is created for some other reason, these attributes will not be
|
443
|
+
persisted.
|
437
444
|
|
438
445
|
```ruby
|
439
446
|
class Article < ActiveRecord::Base
|
@@ -498,6 +505,9 @@ Or a block:
|
|
498
505
|
end
|
499
506
|
```
|
500
507
|
|
508
|
+
PaperTrail is disabled for the whole model
|
509
|
+
(e.g. `Widget`), not just for the instance (e.g. `@widget`).
|
510
|
+
|
501
511
|
### 2.e. Limiting the Number of Versions Created
|
502
512
|
|
503
513
|
Configure `version_limit` to cap the number of versions saved per record. This
|
@@ -545,7 +555,7 @@ widget = versions.last.reify # the widget as it was before destruction
|
|
545
555
|
widget.save # the widget lives!
|
546
556
|
```
|
547
557
|
|
548
|
-
You could even use PaperTrail to implement an undo system
|
558
|
+
You could even use PaperTrail to implement an undo system; [Ryan Bates has!][3]
|
549
559
|
|
550
560
|
If your model uses [optimistic locking][1] don't forget to [increment your
|
551
561
|
`lock_version`][2] before saving or you'll get a `StaleObjectError`.
|
@@ -1191,7 +1201,7 @@ there's no automatic way to migrate your data. The first (slow) option is to
|
|
1191
1201
|
loop over every record and parse it in Ruby, then write to a temporary column:
|
1192
1202
|
|
1193
1203
|
```ruby
|
1194
|
-
add_column :versions, :
|
1204
|
+
add_column :versions, :new_object, :jsonb # or :json
|
1195
1205
|
|
1196
1206
|
PaperTrail::Version.reset_column_information
|
1197
1207
|
PaperTrail::Version.find_each do |version|
|
@@ -1491,53 +1501,7 @@ require 'paper_trail/frameworks/rspec'
|
|
1491
1501
|
|
1492
1502
|
## 8. Sinatra
|
1493
1503
|
|
1494
|
-
|
1495
|
-
app must be using `ActiveRecord` 3 or 4. There is no released version of sinatra yet
|
1496
|
-
that is compatible with AR 5. We expect sinatra 2.0 to support AR 5, but it will have
|
1497
|
-
breaking changes that will require changes to PaperTrail.
|
1498
|
-
|
1499
|
-
It is also recommended to use the
|
1500
|
-
[Sinatra ActiveRecord Extension][13] or something similar for managing your
|
1501
|
-
applications `ActiveRecord` connection in a manner similar to the way `Rails`
|
1502
|
-
does. If using the aforementioned `Sinatra ActiveRecord Extension`, steps for
|
1503
|
-
setting up your app with PaperTrail will look something like this:
|
1504
|
-
|
1505
|
-
1. Add PaperTrail to your `Gemfile`.
|
1506
|
-
|
1507
|
-
`gem 'paper_trail'`
|
1508
|
-
|
1509
|
-
2. Generate a migration to add a `versions` table to your database.
|
1510
|
-
|
1511
|
-
`bundle exec rake db:create_migration NAME=create_versions`
|
1512
|
-
|
1513
|
-
3. Copy contents of [create_versions.rb][14]
|
1514
|
-
into the `create_versions` migration that was generated into your `db/migrate` directory.
|
1515
|
-
|
1516
|
-
4. Run the migration.
|
1517
|
-
|
1518
|
-
`bundle exec rake db:migrate`
|
1519
|
-
|
1520
|
-
5. Add `has_paper_trail` to the models you want to track.
|
1521
|
-
|
1522
|
-
|
1523
|
-
PaperTrail provides a helper extension that acts similar to the controller mixin
|
1524
|
-
it provides for `Rails` applications.
|
1525
|
-
|
1526
|
-
It will set `PaperTrail.whodunnit` to whatever is returned by a method named
|
1527
|
-
`user_for_paper_trail` which you can define inside your Sinatra Application. (by
|
1528
|
-
default it attempts to invoke a method named `current_user`)
|
1529
|
-
|
1530
|
-
If you're using the modular [`Sinatra::Base`][15] style of application, you will
|
1531
|
-
need to register the extension:
|
1532
|
-
|
1533
|
-
```ruby
|
1534
|
-
# bleh_app.rb
|
1535
|
-
require 'sinatra/base'
|
1536
|
-
|
1537
|
-
class BlehApp < Sinatra::Base
|
1538
|
-
register PaperTrail::Sinatra
|
1539
|
-
end
|
1540
|
-
```
|
1504
|
+
See [paper_trail-sinatra][41].
|
1541
1505
|
|
1542
1506
|
## Articles
|
1543
1507
|
|
@@ -1634,10 +1598,7 @@ Released under the MIT licence.
|
|
1634
1598
|
[9]: https://github.com/airblade/paper_trail/tree/3.0-stable
|
1635
1599
|
[10]: https://github.com/airblade/paper_trail/tree/2.7-stable
|
1636
1600
|
[11]: https://github.com/airblade/paper_trail/tree/rails2
|
1637
|
-
[12]: http://www.sinatrarb.com
|
1638
|
-
[13]: https://github.com/janko-m/sinatra-activerecord
|
1639
1601
|
[14]: https://raw.github.com/airblade/paper_trail/master/lib/generators/paper_trail/templates/create_versions.rb
|
1640
|
-
[15]: http://www.sinatrarb.com/intro.html#Modular%20vs.%20Classic%20Style
|
1641
1602
|
[16]: https://github.com/airblade/paper_trail/issues/113
|
1642
1603
|
[17]: https://github.com/rails/protected_attributes
|
1643
1604
|
[18]: https://github.com/rails/strong_parameters
|
@@ -1663,3 +1624,4 @@ Released under the MIT licence.
|
|
1663
1624
|
[38]: https://github.com/sferik/rails_admin
|
1664
1625
|
[39]: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single+table+inheritance
|
1665
1626
|
[40]: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Polymorphic+Associations
|
1627
|
+
[41]: https://github.com/jaredbeck/paper_trail-sinatra
|