paper_trail_manager 0.6.0 → 0.7.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.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +88 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +33 -0
- data/Appraisals +23 -12
- data/CHANGES.md +6 -0
- data/Gemfile +2 -1
- data/Rakefile +17 -5
- data/app/controllers/paper_trail_manager/changes_controller.rb +103 -100
- data/app/helpers/paper_trail_manager/changes_helper.rb +15 -11
- data/app/views/paper_trail_manager/changes/index.atom.builder +23 -19
- data/gemfiles/rails_4.2.2_paper_trail_3.0_kaminari.gemfile +9 -5
- data/gemfiles/rails_4.2.2_paper_trail_3.0_will_paginate.gemfile +9 -5
- data/gemfiles/rails_4.2.2_paper_trail_4.0_kaminari.gemfile +9 -5
- data/gemfiles/rails_4.2.2_paper_trail_4.0_will_paginate.gemfile +9 -5
- data/gemfiles/rails_4.2.2_paper_trail_5.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_5.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_6.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_6.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_7.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_7.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_8.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_4.2.2_paper_trail_8.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_5.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_5.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_6.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_6.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_7.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_7.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_8.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.0.0_paper_trail_8.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_10.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_10.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_7.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_7.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_8.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_8.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_9.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.1.0_paper_trail_9.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.2.0_paper_trail_10.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.2.0_paper_trail_10.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_5.2.0_paper_trail_9.0_kaminari.gemfile +13 -0
- data/gemfiles/rails_5.2.0_paper_trail_9.0_will_paginate.gemfile +13 -0
- data/gemfiles/rails_6.0.0_paper_trail_10.0_kaminari.gemfile +14 -0
- data/gemfiles/rails_6.0.0_paper_trail_10.0_will_paginate.gemfile +15 -0
- data/lib/paper_trail_manager.rb +10 -10
- data/paper_trail_manager.gemspec +22 -21
- data/spec/app_template.rb +30 -0
- data/spec/integration/navigation_spec.rb +4 -2
- data/spec/integration/paper_trail_manager_spec.rb +94 -110
- data/spec/rails_helper.rb +6 -4
- data/spec/spec_helper.rb +7 -5
- data/spec/support/factories.rb +2 -1
- data/spec/support/rspec_html_matchers.rb +7 -0
- metadata +78 -229
- data/.travis.yml +0 -23
- data/gemfiles/rails_3.2.0_paper_trail_3.0_kaminari.gemfile +0 -10
- data/gemfiles/rails_3.2.0_paper_trail_3.0_will_paginate.gemfile +0 -10
- data/gemfiles/rails_3.2.0_paper_trail_4.0_kaminari.gemfile +0 -10
- data/gemfiles/rails_3.2.0_paper_trail_4.0_will_paginate.gemfile +0 -10
- data/gemfiles/rails_4.0.0_paper_trail_3.0_kaminari.gemfile +0 -9
- data/gemfiles/rails_4.0.0_paper_trail_3.0_will_paginate.gemfile +0 -9
- data/gemfiles/rails_4.0.0_paper_trail_4.0_kaminari.gemfile +0 -9
- data/gemfiles/rails_4.0.0_paper_trail_4.0_will_paginate.gemfile +0 -9
- data/gemfiles/rails_4.1.0_paper_trail_3.0_kaminari.gemfile +0 -9
- data/gemfiles/rails_4.1.0_paper_trail_3.0_will_paginate.gemfile +0 -9
- data/gemfiles/rails_4.1.0_paper_trail_4.0_kaminari.gemfile +0 -9
- data/gemfiles/rails_4.1.0_paper_trail_4.0_will_paginate.gemfile +0 -9
- data/spec/controllers/entities_controller_spec.rb +0 -125
- data/spec/controllers/platforms_controller_spec.rb +0 -125
- data/spec/dummy/.gitignore +0 -15
- data/spec/dummy/Gemfile +0 -9
- data/spec/dummy/README.rdoc +0 -261
- data/spec/dummy/Rakefile +0 -7
- data/spec/dummy/app/assets/images/rails.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +0 -15
- data/spec/dummy/app/assets/stylesheets/application.css +0 -13
- data/spec/dummy/app/controllers/application_controller.rb +0 -6
- data/spec/dummy/app/controllers/entities_controller.rb +0 -83
- data/spec/dummy/app/controllers/platforms_controller.rb +0 -83
- data/spec/dummy/app/helpers/application_helper.rb +0 -2
- data/spec/dummy/app/helpers/entities_helper.rb +0 -2
- data/spec/dummy/app/helpers/platforms_helper.rb +0 -2
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/entity.rb +0 -6
- data/spec/dummy/app/models/platform.rb +0 -6
- data/spec/dummy/app/views/application/index.html.erb +0 -6
- data/spec/dummy/app/views/entities/_form.html.erb +0 -17
- data/spec/dummy/app/views/entities/edit.html.erb +0 -6
- data/spec/dummy/app/views/entities/index.html.erb +0 -21
- data/spec/dummy/app/views/entities/new.html.erb +0 -5
- data/spec/dummy/app/views/entities/show.html.erb +0 -5
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
- data/spec/dummy/app/views/platforms/_form.html.erb +0 -17
- data/spec/dummy/app/views/platforms/edit.html.erb +0 -6
- data/spec/dummy/app/views/platforms/index.html.erb +0 -21
- data/spec/dummy/app/views/platforms/new.html.erb +0 -5
- data/spec/dummy/app/views/platforms/show.html.erb +0 -5
- data/spec/dummy/config/application.rb +0 -64
- data/spec/dummy/config/boot.rb +0 -6
- data/spec/dummy/config/database.yml +0 -22
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -37
- data/spec/dummy/config/environments/production.rb +0 -67
- data/spec/dummy/config/environments/test.rb +0 -36
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/inflections.rb +0 -15
- data/spec/dummy/config/initializers/mime_types.rb +0 -5
- data/spec/dummy/config/initializers/secret_token.rb +0 -7
- data/spec/dummy/config/initializers/session_store.rb +0 -8
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/locales/en.yml +0 -5
- data/spec/dummy/config/routes.rb +0 -8
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/db/migrate/20110228091428_create_entities.rb +0 -14
- data/spec/dummy/db/migrate/20110228093241_create_platforms.rb +0 -14
- data/spec/dummy/db/migrate/20110228094444_create_versions.rb +0 -18
- data/spec/dummy/db/schema.rb +0 -41
- data/spec/dummy/db/seeds.rb +0 -7
- data/spec/dummy/doc/README_FOR_APP +0 -2
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/lib/tasks/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +0 -26
- data/spec/dummy/public/422.html +0 -26
- data/spec/dummy/public/500.html +0 -25
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/index.html +0 -241
- data/spec/dummy/public/robots.txt +0 -5
- data/spec/dummy/script/rails +0 -6
- data/spec/dummy/test/fixtures/.gitkeep +0 -0
- data/spec/dummy/test/functional/.gitkeep +0 -0
- data/spec/dummy/test/integration/.gitkeep +0 -0
- data/spec/dummy/test/performance/browsing_test.rb +0 -12
- data/spec/dummy/test/test_helper.rb +0 -13
- data/spec/dummy/test/unit/.gitkeep +0 -0
- data/spec/dummy/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/dummy/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/dummy/vendor/plugins/.gitkeep +0 -0
- data/spec/helpers/entities_helper_spec.rb +0 -15
- data/spec/helpers/platforms_helper_spec.rb +0 -15
- data/spec/models/entity_spec.rb +0 -14
- data/spec/models/platform_spec.rb +0 -14
- data/spec/requests/entities_spec.rb +0 -11
- data/spec/requests/platforms_spec.rb +0 -11
- data/spec/routing/entities_routing_spec.rb +0 -35
- data/spec/routing/platforms_routing_spec.rb +0 -35
- data/spec/views/entities/edit.html.erb_spec.rb +0 -15
- data/spec/views/entities/index.html.erb_spec.rb +0 -14
- data/spec/views/entities/new.html.erb_spec.rb +0 -15
- data/spec/views/entities/show.html.erb_spec.rb +0 -11
- data/spec/views/platforms/edit.html.erb_spec.rb +0 -15
- data/spec/views/platforms/index.html.erb_spec.rb +0 -14
- data/spec/views/platforms/new.html.erb_spec.rb +0 -15
- data/spec/views/platforms/show.html.erb_spec.rb +0 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: fcc29d8525d99579c156724e3ae0632d363f633419b1fe2e3d8424be01a2cc8f
|
|
4
|
+
data.tar.gz: 4a18af9ec1ce747d7f1be7cb090172694ac1cd05ff7bfdfe8b4cfbf7a064f73b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b8d7880ea9aee2269b2d99702559bc30323bc3ba932c850124c640e0508ed841f1eb9ed11c81c1af9a233903cfa83f9cc526c0e57e6648a1d3b163c2d48439a8
|
|
7
|
+
data.tar.gz: d4daf880c144649090bf0d29d373783890d9b332f41a39c032aa11efb4489432272e60b683904884facdbdc1f62d4ee67d7f8109549e262c5ad3625f7c668240
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- reopened
|
|
8
|
+
- synchronize
|
|
9
|
+
- ready_for_review
|
|
10
|
+
push:
|
|
11
|
+
branches:
|
|
12
|
+
- 'master'
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
test:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
ruby:
|
|
22
|
+
- 2.5.7
|
|
23
|
+
- 2.6.5
|
|
24
|
+
gemfile:
|
|
25
|
+
- gemfiles/rails_4.2.2_paper_trail_3.0_kaminari.gemfile
|
|
26
|
+
- gemfiles/rails_4.2.2_paper_trail_3.0_will_paginate.gemfile
|
|
27
|
+
- gemfiles/rails_4.2.2_paper_trail_4.0_kaminari.gemfile
|
|
28
|
+
- gemfiles/rails_4.2.2_paper_trail_4.0_will_paginate.gemfile
|
|
29
|
+
- gemfiles/rails_4.2.2_paper_trail_5.0_kaminari.gemfile
|
|
30
|
+
- gemfiles/rails_4.2.2_paper_trail_5.0_will_paginate.gemfile
|
|
31
|
+
- gemfiles/rails_4.2.2_paper_trail_6.0_kaminari.gemfile
|
|
32
|
+
- gemfiles/rails_4.2.2_paper_trail_6.0_will_paginate.gemfile
|
|
33
|
+
- gemfiles/rails_4.2.2_paper_trail_7.0_kaminari.gemfile
|
|
34
|
+
- gemfiles/rails_4.2.2_paper_trail_7.0_will_paginate.gemfile
|
|
35
|
+
- gemfiles/rails_4.2.2_paper_trail_8.0_kaminari.gemfile
|
|
36
|
+
- gemfiles/rails_4.2.2_paper_trail_8.0_will_paginate.gemfile
|
|
37
|
+
- gemfiles/rails_5.0.0_paper_trail_5.0_kaminari.gemfile
|
|
38
|
+
- gemfiles/rails_5.0.0_paper_trail_5.0_will_paginate.gemfile
|
|
39
|
+
- gemfiles/rails_5.0.0_paper_trail_6.0_kaminari.gemfile
|
|
40
|
+
- gemfiles/rails_5.0.0_paper_trail_6.0_will_paginate.gemfile
|
|
41
|
+
- gemfiles/rails_5.0.0_paper_trail_7.0_kaminari.gemfile
|
|
42
|
+
- gemfiles/rails_5.0.0_paper_trail_7.0_will_paginate.gemfile
|
|
43
|
+
- gemfiles/rails_5.0.0_paper_trail_8.0_kaminari.gemfile
|
|
44
|
+
- gemfiles/rails_5.0.0_paper_trail_8.0_will_paginate.gemfile
|
|
45
|
+
- gemfiles/rails_5.1.0_paper_trail_10.0_kaminari.gemfile
|
|
46
|
+
- gemfiles/rails_5.1.0_paper_trail_10.0_will_paginate.gemfile
|
|
47
|
+
- gemfiles/rails_5.1.0_paper_trail_7.0_kaminari.gemfile
|
|
48
|
+
- gemfiles/rails_5.1.0_paper_trail_7.0_will_paginate.gemfile
|
|
49
|
+
- gemfiles/rails_5.1.0_paper_trail_8.0_kaminari.gemfile
|
|
50
|
+
- gemfiles/rails_5.1.0_paper_trail_8.0_will_paginate.gemfile
|
|
51
|
+
- gemfiles/rails_5.1.0_paper_trail_9.0_kaminari.gemfile
|
|
52
|
+
- gemfiles/rails_5.1.0_paper_trail_9.0_will_paginate.gemfile
|
|
53
|
+
- gemfiles/rails_5.2.0_paper_trail_10.0_kaminari.gemfile
|
|
54
|
+
- gemfiles/rails_5.2.0_paper_trail_10.0_will_paginate.gemfile
|
|
55
|
+
- gemfiles/rails_5.2.0_paper_trail_9.0_kaminari.gemfile
|
|
56
|
+
- gemfiles/rails_5.2.0_paper_trail_9.0_will_paginate.gemfile
|
|
57
|
+
- gemfiles/rails_6.0.0_paper_trail_10.0_kaminari.gemfile
|
|
58
|
+
- gemfiles/rails_6.0.0_paper_trail_10.0_will_paginate.gemfile
|
|
59
|
+
|
|
60
|
+
env:
|
|
61
|
+
BUNDLER_VERSION: 1.17.3
|
|
62
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v2
|
|
66
|
+
- uses: actions/setup-ruby@v1
|
|
67
|
+
with:
|
|
68
|
+
ruby-version: ${{ matrix.ruby }}
|
|
69
|
+
- uses: actions/cache@v1
|
|
70
|
+
with:
|
|
71
|
+
path: vendor/bundle
|
|
72
|
+
key: ${{ runner.os }}-${{ matrix.ruby}}-gems-${{ hashFiles('**/paper_trail_manager.gemspec') }}
|
|
73
|
+
restore-keys: |
|
|
74
|
+
${{ runner.os }}-${{ matrix.ruby }}-gems-
|
|
75
|
+
- name: Install System Dependencies
|
|
76
|
+
run: |
|
|
77
|
+
sudo apt-get update
|
|
78
|
+
sudo apt-get install sqlite3 libsqlite3-dev
|
|
79
|
+
gem install bundler -v $BUNDLER_VERSION
|
|
80
|
+
- name: bundle install
|
|
81
|
+
run: |
|
|
82
|
+
bundle config path vendor/bundle
|
|
83
|
+
bundle install --jobs 4 --retry 3
|
|
84
|
+
- name: Generate host app for testing
|
|
85
|
+
run: bundle exec rake generate_spec_app
|
|
86
|
+
- name: Run RSpec
|
|
87
|
+
run: |
|
|
88
|
+
bundle exec rake spec
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require:
|
|
2
|
+
- rubocop-performance
|
|
3
|
+
- rubocop-rails
|
|
4
|
+
- rubocop-rspec
|
|
5
|
+
|
|
6
|
+
AllCops:
|
|
7
|
+
TargetRubyVersion: 2.5
|
|
8
|
+
Exclude:
|
|
9
|
+
- 'spec/dummy/**/*'
|
|
10
|
+
|
|
11
|
+
Rails:
|
|
12
|
+
Enabled: true
|
|
13
|
+
|
|
14
|
+
Style/HashEachMethods:
|
|
15
|
+
Enabled: true
|
|
16
|
+
|
|
17
|
+
Style/HashTransformKeys:
|
|
18
|
+
Enabled: true
|
|
19
|
+
|
|
20
|
+
Style/HashTransformValues:
|
|
21
|
+
Enabled: true
|
|
22
|
+
|
|
23
|
+
Layout/LineLength:
|
|
24
|
+
Max: 120
|
|
25
|
+
|
|
26
|
+
RSpec/NestedGroups:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
29
|
+
RSpec/MultipleExpectations:
|
|
30
|
+
Enabled: false
|
|
31
|
+
|
|
32
|
+
Metrics/BlockLength:
|
|
33
|
+
Enabled: false
|
data/Appraisals
CHANGED
|
@@ -1,20 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
PAPER_TRAIL_VERSIONS = ["3.0", "4.0"]
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
{
|
|
4
|
+
'4.2.2' => %w[3.0 4.0 5.0 6.0 7.0 8.0],
|
|
5
|
+
'5.0.0' => %w[5.0 6.0 7.0 8.0],
|
|
6
|
+
'5.1.0' => %w[7.0 8.0 9.0 10.0],
|
|
7
|
+
'5.2.0' => %w[9.0 10.0],
|
|
8
|
+
'6.0.0' => %w[10.0]
|
|
9
|
+
}.each do |rails_version, paper_trail_versions|
|
|
10
|
+
paper_trail_versions.each do |paper_trail_version|
|
|
6
11
|
appraise "rails-#{rails_version}-paper_trail-#{paper_trail_version}-will-paginate" do
|
|
7
|
-
gem
|
|
8
|
-
gem
|
|
9
|
-
gem
|
|
10
|
-
gem
|
|
12
|
+
gem 'rails', "~> #{rails_version}"
|
|
13
|
+
gem 'jquery-rails'
|
|
14
|
+
gem 'sqlite3', rails_version == '6.0.0' ? '~> 1.4' : '~> 1.3.6'
|
|
15
|
+
gem 'paper_trail', "~> #{paper_trail_version}"
|
|
16
|
+
gem 'will_paginate', '~> 3.0'
|
|
17
|
+
|
|
18
|
+
gem 'webpacker' if rails_version == '6.0.0'
|
|
11
19
|
end
|
|
12
20
|
|
|
13
21
|
appraise "rails-#{rails_version}-paper_trail-#{paper_trail_version}-kaminari" do
|
|
14
|
-
gem
|
|
15
|
-
gem
|
|
16
|
-
gem
|
|
17
|
-
gem
|
|
22
|
+
gem 'rails', "~> #{rails_version}"
|
|
23
|
+
gem 'jquery-rails'
|
|
24
|
+
gem 'sqlite3', rails_version == '6.0.0' ? '~> 1.4' : '~> 1.3.6'
|
|
25
|
+
gem 'paper_trail', "~> #{paper_trail_version}"
|
|
26
|
+
gem 'kaminari', '>= 0.16'
|
|
27
|
+
|
|
28
|
+
gem 'webpacker' if rails_version == '6.0.0'
|
|
18
29
|
end
|
|
19
30
|
end
|
|
20
31
|
end
|
data/CHANGES.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
Changes to `paper_trail_manager`
|
|
2
2
|
================================
|
|
3
3
|
|
|
4
|
+
* 0.7.0
|
|
5
|
+
* Add support for Rails 5 and 6
|
|
6
|
+
* Add support for paper_trail 5.x – 10.x
|
|
7
|
+
* Drop support for Rails < 4.1
|
|
8
|
+
* Drop support for Ruby < 2.5
|
|
9
|
+
|
|
4
10
|
* 0.6.0
|
|
5
11
|
* Add support for linking changes to user records via `PaperTrailManager.whodunnit_name_method` and `PaperTrailManager.user_path_method`
|
|
6
12
|
* Add new `PaperTrailManager.item_name_method` configuration option
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'rubygems'
|
|
4
4
|
|
|
5
|
-
require
|
|
5
|
+
require 'bundler/gem_tasks'
|
|
6
6
|
Bundler::GemHelper.install_tasks
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
app_rakefile_path = File.expand_path('spec/dummy/Rakefile', __dir__)
|
|
9
|
+
|
|
10
|
+
if File.exist?(app_rakefile_path)
|
|
11
|
+
APP_RAKEFILE = app_rakefile_path
|
|
12
|
+
load 'rails/tasks/engine.rake'
|
|
13
|
+
end
|
|
9
14
|
|
|
10
15
|
require 'rake'
|
|
11
16
|
require 'rdoc/task'
|
|
12
17
|
|
|
13
18
|
require 'rspec/core/rake_task'
|
|
14
19
|
RSpec::Core::RakeTask.new
|
|
15
|
-
task :
|
|
20
|
+
task default: ['db:create', 'db:migrate', 'spec']
|
|
16
21
|
|
|
17
22
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
18
23
|
rdoc.rdoc_dir = 'rdoc'
|
|
@@ -22,3 +27,10 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
|
22
27
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
23
28
|
end
|
|
24
29
|
|
|
30
|
+
task :generate_spec_app do
|
|
31
|
+
sh 'rm -rf spec/dummy'
|
|
32
|
+
sh 'rails new spec/dummy --skip-bootsnap --skip-bundle --skip-yarn \
|
|
33
|
+
--skip-git --skip-action-mailer --skip-puma --skip-test --skip-coffee \
|
|
34
|
+
--skip-spring --skip-listen --skip-turbolinks \
|
|
35
|
+
--template=spec/app_template.rb'
|
|
36
|
+
end
|
|
@@ -1,128 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Allow the parent class of ChangesController to be configured in the host app
|
|
2
4
|
PaperTrailManager::ChangesController = Class.new(PaperTrailManager.base_controller.constantize)
|
|
3
5
|
|
|
4
|
-
class PaperTrailManager
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
class PaperTrailManager
|
|
7
|
+
class ChangesController
|
|
8
|
+
# Default number of changes to list on a pagenated index page.
|
|
9
|
+
PER_PAGE = 50
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
helper PaperTrailManager.route_helpers if PaperTrailManager.route_helpers
|
|
12
|
+
helper PaperTrailManager::ChangesHelper
|
|
13
|
+
layout PaperTrailManager.layout if PaperTrailManager.layout
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
# List changes
|
|
16
|
+
def index
|
|
17
|
+
unless change_index_allowed?
|
|
18
|
+
flash[:error] = 'You do not have permission to list changes.'
|
|
19
|
+
return(redirect_to root_url)
|
|
20
|
+
end
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@versions = @versions.where(:
|
|
22
|
-
end
|
|
23
|
-
if params[:id]
|
|
24
|
-
@versions = @versions.where(:item_id => params[:id])
|
|
25
|
-
end
|
|
22
|
+
@versions = PaperTrail::Version.order('created_at DESC, id DESC')
|
|
23
|
+
@versions = @versions.where(item_type: params[:type]) if params[:type]
|
|
24
|
+
@versions = @versions.where(item_id: params[:id]) if params[:id]
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
# Ensure pagination parameters have sensible values
|
|
27
|
+
@page = params[:page].to_i
|
|
28
|
+
@page = nil if @page.zero?
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
@
|
|
33
|
-
else
|
|
34
|
-
@versions = @versions.page(@page).per(@per_page)
|
|
35
|
-
end
|
|
30
|
+
@per_page = params[:per_page].to_i
|
|
31
|
+
@per_page = nil if @per_page.zero?
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
end
|
|
33
|
+
@versions = if defined?(WillPaginate)
|
|
34
|
+
@versions.paginate(page: @page, per_page: @per_page)
|
|
35
|
+
else
|
|
36
|
+
@versions.page(@page).per(@per_page)
|
|
37
|
+
end
|
|
43
38
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
flash[:error] = "No such version."
|
|
50
|
-
return(redirect_to :action => :index)
|
|
39
|
+
respond_to do |format|
|
|
40
|
+
format.html # index.html.erb
|
|
41
|
+
format.atom # index.atom.builder
|
|
42
|
+
format.json { render json: @versions }
|
|
43
|
+
end
|
|
51
44
|
end
|
|
52
45
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
# Show a change
|
|
47
|
+
def show
|
|
48
|
+
begin
|
|
49
|
+
@version = PaperTrail::Version.find(params[:id])
|
|
50
|
+
rescue ActiveRecord::RecordNotFound
|
|
51
|
+
flash[:error] = 'No such version.'
|
|
52
|
+
return(redirect_to action: :index)
|
|
53
|
+
end
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
end
|
|
55
|
+
unless change_show_allowed?(@version)
|
|
56
|
+
flash[:error] = 'You do not have permission to show that change.'
|
|
57
|
+
return(redirect_to action: :index)
|
|
58
|
+
end
|
|
63
59
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
rescue ActiveRecord::RecordNotFound
|
|
69
|
-
flash[:error] = "No such version."
|
|
70
|
-
return(redirect_to(changes_path))
|
|
60
|
+
respond_to do |format|
|
|
61
|
+
format.html # show.html.erb
|
|
62
|
+
format.json { render json: @version }
|
|
63
|
+
end
|
|
71
64
|
end
|
|
72
65
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
# Rollback a change
|
|
67
|
+
def update
|
|
68
|
+
begin
|
|
69
|
+
@version = PaperTrail::Version.find(params[:id])
|
|
70
|
+
rescue ActiveRecord::RecordNotFound
|
|
71
|
+
flash[:error] = 'No such version.'
|
|
72
|
+
return(redirect_to(changes_path))
|
|
73
|
+
end
|
|
77
74
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@record = @version.reify
|
|
83
|
-
@result = @record.save
|
|
84
|
-
end
|
|
75
|
+
unless change_revert_allowed?(@version)
|
|
76
|
+
flash[:error] = 'You do not have permission to revert this change.'
|
|
77
|
+
return(redirect_to changes_path)
|
|
78
|
+
end
|
|
85
79
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
redirect_to changes_path
|
|
80
|
+
if @version.event == 'create'
|
|
81
|
+
@record = @version.item_type.constantize.find(@version.item_id)
|
|
82
|
+
@result = @record.destroy
|
|
90
83
|
else
|
|
91
|
-
|
|
92
|
-
|
|
84
|
+
@record = @version.reify
|
|
85
|
+
@result = @record.save
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
if @result
|
|
89
|
+
if @version.event == 'create'
|
|
90
|
+
flash[:notice] = 'Rolled back newly-created record by destroying it.'
|
|
91
|
+
redirect_to changes_path
|
|
92
|
+
else
|
|
93
|
+
flash[:notice] = 'Rolled back changes to this record.'
|
|
94
|
+
redirect_to change_item_url(@version)
|
|
95
|
+
end
|
|
96
|
+
else
|
|
97
|
+
flash[:error] = "Couldn't rollback. Sorry."
|
|
98
|
+
redirect_to changes_path
|
|
93
99
|
end
|
|
94
|
-
else
|
|
95
|
-
flash[:error] = "Couldn't rollback. Sorry."
|
|
96
|
-
redirect_to changes_path
|
|
97
100
|
end
|
|
98
|
-
end
|
|
99
101
|
|
|
100
|
-
protected
|
|
102
|
+
protected
|
|
101
103
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
# Return the URL for the item represented by the +version+, e.g. a Company record instance referenced by a version.
|
|
105
|
+
def change_item_url(version)
|
|
106
|
+
version_type = version.item_type.underscore.split('/').last
|
|
107
|
+
send("#{version_type}_url", version.item_id)
|
|
108
|
+
rescue NoMethodError
|
|
109
|
+
nil
|
|
110
|
+
end
|
|
111
|
+
helper_method :change_item_url
|
|
110
112
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
# Allow index?
|
|
114
|
+
def change_index_allowed?
|
|
115
|
+
PaperTrailManager.allow_index?(self)
|
|
116
|
+
end
|
|
117
|
+
helper_method :change_index_allowed?
|
|
116
118
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
# Allow show?
|
|
120
|
+
def change_show_allowed?(version)
|
|
121
|
+
PaperTrailManager.allow_show?(self, version)
|
|
122
|
+
end
|
|
123
|
+
helper_method :change_show_allowed?
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
# Allow revert?
|
|
126
|
+
def change_revert_allowed?(version)
|
|
127
|
+
PaperTrailManager.allow_revert?(self, version)
|
|
128
|
+
end
|
|
129
|
+
helper_method :change_revert_allowed?
|
|
126
130
|
end
|
|
127
|
-
helper_method :change_revert_allowed?
|
|
128
131
|
end
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class PaperTrailManager
|
|
2
4
|
module ChangesHelper
|
|
3
5
|
# Return HTML representing the +object+, which is either its text or a stylized "nil".
|
|
4
6
|
def text_or_nil(object)
|
|
5
7
|
if object.nil?
|
|
6
|
-
|
|
8
|
+
content_tag('em', 'nil')
|
|
7
9
|
else
|
|
8
|
-
|
|
10
|
+
h(object)
|
|
9
11
|
end
|
|
10
12
|
end
|
|
11
13
|
|
|
@@ -26,16 +28,18 @@ class PaperTrailManager
|
|
|
26
28
|
# }
|
|
27
29
|
def changes_for(version)
|
|
28
30
|
case version.event
|
|
29
|
-
when
|
|
31
|
+
when 'create', 'update'
|
|
30
32
|
return {} unless version.changeset
|
|
33
|
+
|
|
31
34
|
version.changeset.inject({}) do |changes, (attr, (prev, curr))|
|
|
32
|
-
changes.store(attr, {previous: prev, current: curr}) && changes
|
|
35
|
+
changes.store(attr, { previous: prev, current: curr }) && changes
|
|
33
36
|
end
|
|
34
|
-
when
|
|
37
|
+
when 'destroy'
|
|
35
38
|
record = version_reify(version)
|
|
36
39
|
return {} unless record
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
|
|
41
|
+
record.attributes.reject { |_k, v| v.nil? }.inject({}) do |changes, (attr, value)|
|
|
42
|
+
changes.store(attr, { previous: value, current: nil }) && changes
|
|
39
43
|
end
|
|
40
44
|
else
|
|
41
45
|
raise ArgumentError, "Unknown event: #{version.event}"
|
|
@@ -51,7 +55,7 @@ class PaperTrailManager
|
|
|
51
55
|
name = "#{version.item_type} #{version.item_id}"
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
h(name)
|
|
55
59
|
end
|
|
56
60
|
|
|
57
61
|
def change_item_types
|
|
@@ -62,10 +66,10 @@ class PaperTrailManager
|
|
|
62
66
|
|
|
63
67
|
# Returns HTML link for the item stored in the version, e.g. a link to a Company record stored in the version.
|
|
64
68
|
def change_item_link(version)
|
|
65
|
-
if url = change_item_url(version)
|
|
66
|
-
|
|
69
|
+
if (url = change_item_url(version))
|
|
70
|
+
link_to(change_title_for(version), url, class: 'change_item')
|
|
67
71
|
else
|
|
68
|
-
|
|
72
|
+
content_tag(:span, change_title_for(version), class: 'change_item')
|
|
69
73
|
end
|
|
70
74
|
end
|
|
71
75
|
|
|
@@ -1,44 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
atom_feed do |feed|
|
|
2
|
-
feed.title(
|
|
3
|
-
date = @versions.first.try(:created_at) || Time.at(0)
|
|
4
|
+
feed.title('Changes')
|
|
5
|
+
date = @versions.first.try(:created_at) || Time.zone.at(0)
|
|
4
6
|
feed.updated(date)
|
|
5
7
|
|
|
6
8
|
@versions.each do |version|
|
|
7
9
|
next unless change_show_allowed?(version)
|
|
8
10
|
|
|
9
|
-
feed.entry(version, :
|
|
11
|
+
feed.entry(version, url: change_url(version)) do |entry|
|
|
10
12
|
changes = changes_for(version)
|
|
11
13
|
|
|
12
|
-
if PaperTrailManager.whodunnit_class && version.whodunnit
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
user = if PaperTrailManager.whodunnit_class && version.whodunnit
|
|
15
|
+
begin
|
|
16
|
+
PaperTrailManager.whodunnit_class.find(version.whodunnit)
|
|
17
|
+
rescue StandardError
|
|
18
|
+
nil
|
|
19
|
+
end
|
|
20
|
+
end
|
|
17
21
|
|
|
18
|
-
entry.title "#{version.event.upcase} #{version.item_type} «#{change_title_for(version)}» #{user ? 'by '+user.send(PaperTrailManager.whodunnit_name_method) : ''}"
|
|
22
|
+
entry.title "#{version.event.upcase} #{version.item_type} «#{change_title_for(version)}» #{user ? 'by ' + user.send(PaperTrailManager.whodunnit_name_method) : ''}"
|
|
19
23
|
entry.updated version.created_at.utc.xmlschema
|
|
20
24
|
|
|
21
25
|
xm = ::Builder::XmlMarkup.new
|
|
22
|
-
xm.div
|
|
23
|
-
xm.p
|
|
26
|
+
xm.div do
|
|
27
|
+
xm.p do
|
|
24
28
|
xm.span << 'Go to: '
|
|
25
29
|
xm.span << link_to('Change', change_url(version))
|
|
26
30
|
xm.span << ' | '
|
|
27
31
|
xm.span << link_to('Record', change_item_url(version))
|
|
28
|
-
|
|
29
|
-
xm.table
|
|
32
|
+
end
|
|
33
|
+
xm.table do
|
|
30
34
|
changes.keys.sort.each do |key|
|
|
31
|
-
xm.tr
|
|
35
|
+
xm.tr do
|
|
32
36
|
xm.td { xm.b key }
|
|
33
37
|
xm.td changes[key][:previous].inspect
|
|
34
|
-
xm.td { xm.span <<
|
|
38
|
+
xm.td { xm.span << '→' }
|
|
35
39
|
xm.td changes[key][:current].inspect
|
|
36
|
-
|
|
40
|
+
end
|
|
37
41
|
end
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
end
|
|
43
|
+
end
|
|
40
44
|
|
|
41
|
-
entry.content(xm.to_s, :
|
|
45
|
+
entry.content(xm.to_s, type: 'html')
|
|
42
46
|
end
|
|
43
47
|
end
|
|
44
48
|
end
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# This file was generated by Appraisal
|
|
2
4
|
|
|
3
|
-
source
|
|
5
|
+
source 'https://rubygems.org'
|
|
4
6
|
|
|
5
|
-
gem
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
7
|
+
gem 'jquery-rails'
|
|
8
|
+
gem 'kaminari', '>= 0.16'
|
|
9
|
+
gem 'paper_trail', '~> 3.0'
|
|
10
|
+
gem 'rails', '~> 4.2.2'
|
|
11
|
+
gem 'sqlite3', '~> 1.3.6'
|
|
8
12
|
|
|
9
|
-
gemspec :
|
|
13
|
+
gemspec path: '../'
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# This file was generated by Appraisal
|
|
2
4
|
|
|
3
|
-
source
|
|
5
|
+
source 'https://rubygems.org'
|
|
4
6
|
|
|
5
|
-
gem
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
7
|
+
gem 'jquery-rails'
|
|
8
|
+
gem 'paper_trail', '~> 3.0'
|
|
9
|
+
gem 'rails', '~> 4.2.2'
|
|
10
|
+
gem 'sqlite3', '~> 1.3.6'
|
|
11
|
+
gem 'will_paginate', '~> 3.0'
|
|
8
12
|
|
|
9
|
-
gemspec :
|
|
13
|
+
gemspec path: '../'
|