demingfactor-paper_trail_manager 0.7.3

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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/test.yml +88 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +33 -0
  5. data/.tool-versions +1 -0
  6. data/Appraisals +34 -0
  7. data/CHANGES.md +62 -0
  8. data/Gemfile +7 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.md +109 -0
  11. data/Rakefile +36 -0
  12. data/app/controllers/paper_trail_manager/changes_controller.rb +131 -0
  13. data/app/helpers/paper_trail_manager/changes_helper.rb +82 -0
  14. data/app/views/paper_trail_manager/changes/_version.html.erb +40 -0
  15. data/app/views/paper_trail_manager/changes/index.atom.builder +48 -0
  16. data/app/views/paper_trail_manager/changes/index.html.erb +35 -0
  17. data/app/views/paper_trail_manager/changes/show.html.erb +10 -0
  18. data/demingfactor-paper_trail_manager.gemspec +32 -0
  19. data/gemfiles/rails_4.2.2_paper_trail_3.0_kaminari.gemfile +11 -0
  20. data/gemfiles/rails_4.2.2_paper_trail_3.0_will_paginate.gemfile +11 -0
  21. data/gemfiles/rails_4.2.2_paper_trail_4.0_kaminari.gemfile +11 -0
  22. data/gemfiles/rails_4.2.2_paper_trail_4.0_will_paginate.gemfile +11 -0
  23. data/gemfiles/rails_4.2.2_paper_trail_5.0_kaminari.gemfile +11 -0
  24. data/gemfiles/rails_4.2.2_paper_trail_5.0_will_paginate.gemfile +11 -0
  25. data/gemfiles/rails_4.2.2_paper_trail_6.0_kaminari.gemfile +11 -0
  26. data/gemfiles/rails_4.2.2_paper_trail_6.0_will_paginate.gemfile +11 -0
  27. data/gemfiles/rails_4.2.2_paper_trail_7.0_kaminari.gemfile +11 -0
  28. data/gemfiles/rails_4.2.2_paper_trail_7.0_will_paginate.gemfile +11 -0
  29. data/gemfiles/rails_4.2.2_paper_trail_8.0_kaminari.gemfile +11 -0
  30. data/gemfiles/rails_4.2.2_paper_trail_8.0_will_paginate.gemfile +11 -0
  31. data/gemfiles/rails_5.0.0_paper_trail_5.0_kaminari.gemfile +11 -0
  32. data/gemfiles/rails_5.0.0_paper_trail_5.0_will_paginate.gemfile +11 -0
  33. data/gemfiles/rails_5.0.0_paper_trail_6.0_kaminari.gemfile +11 -0
  34. data/gemfiles/rails_5.0.0_paper_trail_6.0_will_paginate.gemfile +11 -0
  35. data/gemfiles/rails_5.0.0_paper_trail_7.0_kaminari.gemfile +11 -0
  36. data/gemfiles/rails_5.0.0_paper_trail_7.0_will_paginate.gemfile +11 -0
  37. data/gemfiles/rails_5.0.0_paper_trail_8.0_kaminari.gemfile +11 -0
  38. data/gemfiles/rails_5.0.0_paper_trail_8.0_will_paginate.gemfile +11 -0
  39. data/gemfiles/rails_5.1.0_paper_trail_10.0_kaminari.gemfile +11 -0
  40. data/gemfiles/rails_5.1.0_paper_trail_10.0_will_paginate.gemfile +11 -0
  41. data/gemfiles/rails_5.1.0_paper_trail_7.0_kaminari.gemfile +11 -0
  42. data/gemfiles/rails_5.1.0_paper_trail_7.0_will_paginate.gemfile +11 -0
  43. data/gemfiles/rails_5.1.0_paper_trail_8.0_kaminari.gemfile +11 -0
  44. data/gemfiles/rails_5.1.0_paper_trail_8.0_will_paginate.gemfile +11 -0
  45. data/gemfiles/rails_5.1.0_paper_trail_9.0_kaminari.gemfile +11 -0
  46. data/gemfiles/rails_5.1.0_paper_trail_9.0_will_paginate.gemfile +11 -0
  47. data/gemfiles/rails_5.2.0_paper_trail_10.0_kaminari.gemfile +11 -0
  48. data/gemfiles/rails_5.2.0_paper_trail_10.0_will_paginate.gemfile +11 -0
  49. data/gemfiles/rails_5.2.0_paper_trail_9.0_kaminari.gemfile +11 -0
  50. data/gemfiles/rails_5.2.0_paper_trail_9.0_will_paginate.gemfile +11 -0
  51. data/gemfiles/rails_6.0.0_paper_trail_10.0_kaminari.gemfile +12 -0
  52. data/gemfiles/rails_6.0.0_paper_trail_10.0_will_paginate.gemfile +12 -0
  53. data/gemfiles/rails_6.1.0_paper_trail_11.1_kaminari.gemfile +12 -0
  54. data/gemfiles/rails_6.1.0_paper_trail_11.1_will_paginate.gemfile +12 -0
  55. data/lib/paper_trail_manager.rb +67 -0
  56. data/spec/app_template.rb +30 -0
  57. data/spec/integration/navigation_spec.rb +9 -0
  58. data/spec/integration/paper_trail_manager_spec.rb +185 -0
  59. data/spec/rails_helper.rb +29 -0
  60. data/spec/spec_helper.rb +91 -0
  61. data/spec/support/factories.rb +15 -0
  62. data/spec/support/rspec_html_matchers.rb +7 -0
  63. metadata +263 -0
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ gem 'demingfactor-paper_trail_manager', path: __FILE__ + '/../../../'
4
+
5
+ unless File.exist?('app/assets/config/manifest.js')
6
+ create_file 'app/assets/config/manifest.js'
7
+ append_to_file 'app/assets/config/manifest.js', "//= link application.css\n"
8
+ append_to_file 'app/assets/config/manifest.js', "//= link application.js\n"
9
+ end
10
+
11
+ generate 'paper_trail:install'
12
+ generate 'resource', 'entity name:string status:string --no-controller-specs --no-helper-specs'
13
+ generate 'resource', 'platform name:string status:string --no-controller-specs --no-helper-specs'
14
+
15
+ remove_file 'spec/models/entity_spec.rb'
16
+ remove_file 'spec/models/platform_spec.rb'
17
+
18
+ model_body = <<-MODEL
19
+ has_paper_trail
20
+
21
+ validates_presence_of :name
22
+ validates_presence_of :status
23
+ MODEL
24
+
25
+ inject_into_class 'app/models/entity.rb', 'Entity', model_body
26
+ inject_into_class 'app/models/platform.rb', 'Platform', model_body
27
+
28
+ route "resources :changes, :controller => 'paper_trail_manager/changes'"
29
+
30
+ rake 'db:migrate db:test:prepare'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Navigation' do
6
+ it 'is a valid app' do
7
+ ::Rails.application.should be_a_kind_of(Rails::Application)
8
+ end
9
+ end
@@ -0,0 +1,185 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PaperTrailManager, versioning: true do
6
+ context 'without changes' do
7
+ context 'when fetching the index' do
8
+ it 'has no changes by default' do
9
+ get '/changes'
10
+
11
+ expect(response.body).to include('No changes found')
12
+ end
13
+ end
14
+ end
15
+
16
+ context 'with changes' do
17
+ let(:reimu) { FactoryGirl.create(:entity, name: 'Miko Hakurei Reimu', status: 'Highly Responsive to Prayers') }
18
+ let(:flanchan) { FactoryGirl.create(:entity, name: 'Flandre Scarlet', status: 'The Embodiment of Scarlet Devil') }
19
+ let(:sakuya) { FactoryGirl.create(:entity, name: 'Sakuya Izayoi', status: 'Flowering Night') }
20
+ let(:kyuu_hachi) { FactoryGirl.create(:platform, name: 'PC-9801', status: 'SUGOI!!1!') }
21
+ let!(:uinodouzu) { FactoryGirl.create(:platform, name: 'Mikorusofto Uinodouzu', status: 'o-O') }
22
+
23
+ let!(:flanchan_id) { flanchan.id }
24
+
25
+ before do
26
+ sakuya
27
+ reimu.update(name: 'Hakurei Reimu', status: 'Phantasmagoria of Dimensional Dream')
28
+ reimu.update(status: 'Perfect Cherry Blossom')
29
+ flanchan.destroy
30
+ kyuu_hachi.update(status: 'Kimochi warui.')
31
+ kyuu_hachi.destroy
32
+ uinodouzu
33
+ end
34
+
35
+ describe 'index' do
36
+ context 'when getting all changes' do
37
+ context 'with authorization' do
38
+ context 'when getting default index' do
39
+ before { get changes_path }
40
+
41
+ it 'has all changes' do
42
+ expect(response.body).to have_tag('.change_row', count: 10)
43
+ end
44
+
45
+ it 'has changes for all changed item types' do
46
+ expect(response.body).to have_tag('.change_item', text: /Entity/)
47
+ expect(response.body).to have_tag('.change_item', text: /Platform/)
48
+ end
49
+
50
+ it 'orders changes with newest and highest id at the top' do
51
+ ids = response.body.scan(/Change #(\d+)/).flatten.map(&:to_i)
52
+ expect(ids).to eq ids.sort.reverse
53
+ end
54
+ end
55
+ end
56
+
57
+ # TODO
58
+ # context "when not authorized" do
59
+ # it "should display an error if user is not allowed to list changes"
60
+ # end
61
+ end
62
+
63
+ context 'when getting changes for a specific type' do
64
+ context 'when changes exist' do
65
+ before { get changes_path(type: 'Entity') }
66
+
67
+ it 'shows a subset of the changes' do
68
+ expect(response.body).to have_tag('.change_row', count: 6)
69
+ end
70
+
71
+ it 'has changes only for that type' do
72
+ expect(response.body).to have_tag('.change_item', text: /Entity/)
73
+ expect(response.body).not_to have_tag('.change_item', text: /Platform/)
74
+ end
75
+ end
76
+
77
+ # TODO
78
+ # context "that doesn't exist" do
79
+ # it "should display ana error that the type doesn't exist"
80
+ # end
81
+ end
82
+
83
+ context 'when getting changes for a specific record' do
84
+ context 'when changes exist' do
85
+ before { get changes_path(type: 'Entity', id: reimu.id) }
86
+
87
+ it 'shows a subset of the changes' do
88
+ expect(response.body).to have_tag('.change_row', count: 3)
89
+ end
90
+
91
+ it 'has changes only for that type' do
92
+ expect(response.body).to have_tag('.change_item', text: /Entity/)
93
+ expect(response.body).not_to have_tag('.change_item', text: /Platform/)
94
+ end
95
+
96
+ it 'has changes only for that record' do
97
+ expect(response.body.scan(%r{/entities/(#{reimu.id})}).flatten.uniq).to eq [reimu.id.to_s]
98
+ end
99
+ end
100
+
101
+ # TODO
102
+ # context "that doesn't exist" do
103
+ # it "should display an error that the record doesn't exist"
104
+ # end
105
+ end
106
+ end
107
+
108
+ describe 'showing a change' do
109
+ context 'when the change exists' do
110
+ context 'when authorized' do
111
+ let(:version) { reimu.versions.last }
112
+
113
+ before do
114
+ get change_path(version)
115
+ end
116
+
117
+ it 'shows the requested change' do
118
+ expect(response.body).to have_tag('.change_id', text: "Change ##{version.id}")
119
+ end
120
+
121
+ it 'shows a change with the right event' do
122
+ expect(response.body).to have_tag('.change_event_update')
123
+ end
124
+
125
+ it 'is associated with the expected record' do
126
+ expect(response.body).to have_tag('.change_item', text: "Entity #{reimu.id}")
127
+ end
128
+ end
129
+
130
+ # TODO
131
+ # context "when not authorized" do
132
+ # it "should display an error if user is not allowed to show the change"
133
+ # end
134
+ end
135
+
136
+ # TODO
137
+ # context "that doesn't exist" do
138
+ # it "should display an error that the change doesn't exist"
139
+ # end
140
+ end
141
+
142
+ describe 'rolling back changes' do
143
+ context 'when changes exist' do
144
+ context 'when authorized' do
145
+ it 'rollbacks a newly-created record by deleting it' do
146
+ expect(Entity).to exist(reimu.id)
147
+
148
+ put change_path(reimu.versions.first)
149
+
150
+ expect(Entity).not_to exist(reimu.id)
151
+ end
152
+
153
+ it 'rollbacks an edit by reverting to the previous state' do
154
+ reimu.reload
155
+ expect(reimu.status).to eq 'Perfect Cherry Blossom'
156
+
157
+ put change_path(reimu.versions.last)
158
+
159
+ reimu.reload
160
+ expect(reimu.status).to eq 'Phantasmagoria of Dimensional Dream'
161
+ end
162
+
163
+ it 'rollbacks a delete by restoring the record' do
164
+ Entity.exists?(flanchan_id).should be_falsey
165
+
166
+ put change_path(PaperTrail::Version.where(item_id: flanchan_id, item_type: 'Entity').last)
167
+
168
+ found = Entity.find(flanchan_id)
169
+ expect(found.status).to eq 'The Embodiment of Scarlet Devil'
170
+ end
171
+ end
172
+
173
+ # TODO
174
+ # context "when not authorized" do
175
+ # it "should display an error if user is not allowed to revert that change"
176
+ # end
177
+ end
178
+
179
+ # TODO
180
+ # context "that don't exist" do
181
+ # it "should display an error that the change doesn't exist"
182
+ # end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
4
+ ENV['RAILS_ENV'] ||= 'test'
5
+ require File.expand_path('dummy/config/environment', __dir__)
6
+ require 'rspec/rails'
7
+ require 'rspec/active_model/mocks'
8
+
9
+ RSpec.configure do |config|
10
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
11
+ # examples within a transaction, remove the following line or assign false
12
+ # instead of true.
13
+ config.use_transactional_fixtures = true
14
+
15
+ # RSpec Rails can automatically mix in different behaviours to your tests
16
+ # based on their file location, for example enabling you to call `get` and
17
+ # `post` in specs under `spec/controllers`.
18
+ #
19
+ # You can disable this behaviour by removing the line below, and instead
20
+ # explicitly tag your specs with their type, e.g.:
21
+ #
22
+ # RSpec.describe UsersController, :type => :controller do
23
+ # # ...
24
+ # end
25
+ #
26
+ # The different available types are documented in the features, such as in
27
+ # https://relishapp.com/rspec/rspec-rails/docs
28
+ config.infer_spec_type_from_file_location!
29
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+ require 'rspec/its'
5
+
6
+ # This file was generated by the `rails generate rspec:install` command. Conventionally, all
7
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
8
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
9
+ # file to always be loaded, without a need to explicitly require it in any files.
10
+ #
11
+ # Given that it is always loaded, you are encouraged to keep this file as
12
+ # light-weight as possible. Requiring heavyweight dependencies from this file
13
+ # will add to the boot time of your test suite on EVERY test run, even for an
14
+ # individual file that may not need all of that loaded. Instead, make a
15
+ # separate helper file that requires this one and then use it only in the specs
16
+ # that actually need it.
17
+ #
18
+ # The `.rspec` file also contains a few flags that are not defaults but that
19
+ # users commonly want.
20
+ #
21
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
22
+
23
+ # Requires supporting ruby files with custom matchers and macros, etc, in
24
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
25
+ # run as spec files by default. This means that files in spec/support that end
26
+ # in _spec.rb will both be required and run as specs, causing the specs to be
27
+ # run twice. It is recommended that you do not name files matching this glob to
28
+ # end with _spec.rb. You can configure this pattern with with the --pattern
29
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
30
+ Dir['spec/support/**/*.rb'].each { |f| require File.expand_path(f) }
31
+
32
+ RSpec.configure do |config|
33
+ # config.include(Capybara::Webkit::RspecMatchers, :type => :feature)
34
+
35
+ # These two settings work together to allow you to limit a spec run
36
+ # to individual examples or groups you care about by tagging them with
37
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
38
+ # get run.
39
+ config.filter_run :focus
40
+ config.run_all_when_everything_filtered = true
41
+
42
+ # Many RSpec users commonly either run the entire suite or an individual
43
+ # file, and it's useful to allow more verbose output when running an
44
+ # individual spec file.
45
+ if config.files_to_run.one?
46
+ # Use the documentation formatter for detailed output,
47
+ # unless a formatter has already been configured
48
+ # (e.g. via a command-line flag).
49
+ config.default_formatter = 'doc'
50
+ end
51
+
52
+ # Print the 10 slowest examples and example groups at the
53
+ # end of the spec run, to help surface which specs are running
54
+ # particularly slow.
55
+ # config.profile_examples = 10
56
+
57
+ # Run specs in random order to surface order dependencies. If you find an
58
+ # order dependency and want to debug it, you can fix the order by providing
59
+ # the seed, which is printed after each run.
60
+ # --seed 1234
61
+ config.order = :random
62
+
63
+ # Seed global randomization in this process using the `--seed` CLI option.
64
+ # Setting this allows you to use `--seed` to deterministically reproduce
65
+ # test failures related to randomization by passing the same `--seed` value
66
+ # as the one that triggered the failure.
67
+ Kernel.srand config.seed
68
+
69
+ # rspec-expectations config goes here. You can use an alternate
70
+ # assertion/expectation library such as wrong or the stdlib/minitest
71
+ # assertions if you prefer.
72
+ config.expect_with :rspec do |expectations|
73
+ # Enable only the newer, non-monkey-patching expect syntax.
74
+ # For more details, see:
75
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
76
+ expectations.syntax = %i[should expect]
77
+ end
78
+
79
+ # rspec-mocks config goes here. You can use an alternate test double
80
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
81
+ config.mock_with :rspec do |mocks|
82
+ # Enable only the newer, non-monkey-patching expect syntax.
83
+ # For more details, see:
84
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
85
+ mocks.syntax = %i[should expect]
86
+
87
+ # Prevents you from mocking or stubbing a method that does not exist on
88
+ # a real object. This is generally recommended.
89
+ # mocks.verify_partial_doubles = true
90
+ end
91
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'factory_girl_rails'
4
+
5
+ FactoryGirl.define do
6
+ factory :entity do
7
+ sequence(:name) { |n| "name_#{n}" }
8
+ sequence(:status) { |n| "status_#{n}" }
9
+ end
10
+
11
+ factory :platform do
12
+ sequence(:name) { |n| "name_#{n}" }
13
+ sequence(:status) { |n| "status_#{n}" }
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec-html-matchers'
4
+
5
+ RSpec.configure do |config|
6
+ config.include RSpecHtmlMatchers
7
+ end
metadata ADDED
@@ -0,0 +1,263 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: demingfactor-paper_trail_manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.3
5
+ platform: ruby
6
+ authors:
7
+ - dev@demingfactor.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-03-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: paper_trail
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '7.0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '3.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: appraisal
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.5'
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_girl_rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '4.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '10.4'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '10.4'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec-activemodel-mocks
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec-html-matchers
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.2
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.9.2
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec-its
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rspec-rails
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: sqlite3
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 1.3.6
152
+ - - "<="
153
+ - !ruby/object:Gem::Version
154
+ version: 1.5.4
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: 1.3.6
162
+ - - "<="
163
+ - !ruby/object:Gem::Version
164
+ version: 1.5.4
165
+ description: Browse, subscribe, view and revert changes to records when using Rails
166
+ and the `paper_trail` gem.
167
+ email:
168
+ executables: []
169
+ extensions: []
170
+ extra_rdoc_files: []
171
+ files:
172
+ - ".github/workflows/test.yml"
173
+ - ".gitignore"
174
+ - ".rubocop.yml"
175
+ - ".tool-versions"
176
+ - Appraisals
177
+ - CHANGES.md
178
+ - Gemfile
179
+ - LICENSE.txt
180
+ - README.md
181
+ - Rakefile
182
+ - app/controllers/paper_trail_manager/changes_controller.rb
183
+ - app/helpers/paper_trail_manager/changes_helper.rb
184
+ - app/views/paper_trail_manager/changes/_version.html.erb
185
+ - app/views/paper_trail_manager/changes/index.atom.builder
186
+ - app/views/paper_trail_manager/changes/index.html.erb
187
+ - app/views/paper_trail_manager/changes/show.html.erb
188
+ - demingfactor-paper_trail_manager.gemspec
189
+ - gemfiles/rails_4.2.2_paper_trail_3.0_kaminari.gemfile
190
+ - gemfiles/rails_4.2.2_paper_trail_3.0_will_paginate.gemfile
191
+ - gemfiles/rails_4.2.2_paper_trail_4.0_kaminari.gemfile
192
+ - gemfiles/rails_4.2.2_paper_trail_4.0_will_paginate.gemfile
193
+ - gemfiles/rails_4.2.2_paper_trail_5.0_kaminari.gemfile
194
+ - gemfiles/rails_4.2.2_paper_trail_5.0_will_paginate.gemfile
195
+ - gemfiles/rails_4.2.2_paper_trail_6.0_kaminari.gemfile
196
+ - gemfiles/rails_4.2.2_paper_trail_6.0_will_paginate.gemfile
197
+ - gemfiles/rails_4.2.2_paper_trail_7.0_kaminari.gemfile
198
+ - gemfiles/rails_4.2.2_paper_trail_7.0_will_paginate.gemfile
199
+ - gemfiles/rails_4.2.2_paper_trail_8.0_kaminari.gemfile
200
+ - gemfiles/rails_4.2.2_paper_trail_8.0_will_paginate.gemfile
201
+ - gemfiles/rails_5.0.0_paper_trail_5.0_kaminari.gemfile
202
+ - gemfiles/rails_5.0.0_paper_trail_5.0_will_paginate.gemfile
203
+ - gemfiles/rails_5.0.0_paper_trail_6.0_kaminari.gemfile
204
+ - gemfiles/rails_5.0.0_paper_trail_6.0_will_paginate.gemfile
205
+ - gemfiles/rails_5.0.0_paper_trail_7.0_kaminari.gemfile
206
+ - gemfiles/rails_5.0.0_paper_trail_7.0_will_paginate.gemfile
207
+ - gemfiles/rails_5.0.0_paper_trail_8.0_kaminari.gemfile
208
+ - gemfiles/rails_5.0.0_paper_trail_8.0_will_paginate.gemfile
209
+ - gemfiles/rails_5.1.0_paper_trail_10.0_kaminari.gemfile
210
+ - gemfiles/rails_5.1.0_paper_trail_10.0_will_paginate.gemfile
211
+ - gemfiles/rails_5.1.0_paper_trail_7.0_kaminari.gemfile
212
+ - gemfiles/rails_5.1.0_paper_trail_7.0_will_paginate.gemfile
213
+ - gemfiles/rails_5.1.0_paper_trail_8.0_kaminari.gemfile
214
+ - gemfiles/rails_5.1.0_paper_trail_8.0_will_paginate.gemfile
215
+ - gemfiles/rails_5.1.0_paper_trail_9.0_kaminari.gemfile
216
+ - gemfiles/rails_5.1.0_paper_trail_9.0_will_paginate.gemfile
217
+ - gemfiles/rails_5.2.0_paper_trail_10.0_kaminari.gemfile
218
+ - gemfiles/rails_5.2.0_paper_trail_10.0_will_paginate.gemfile
219
+ - gemfiles/rails_5.2.0_paper_trail_9.0_kaminari.gemfile
220
+ - gemfiles/rails_5.2.0_paper_trail_9.0_will_paginate.gemfile
221
+ - gemfiles/rails_6.0.0_paper_trail_10.0_kaminari.gemfile
222
+ - gemfiles/rails_6.0.0_paper_trail_10.0_will_paginate.gemfile
223
+ - gemfiles/rails_6.1.0_paper_trail_11.1_kaminari.gemfile
224
+ - gemfiles/rails_6.1.0_paper_trail_11.1_will_paginate.gemfile
225
+ - lib/paper_trail_manager.rb
226
+ - spec/app_template.rb
227
+ - spec/integration/navigation_spec.rb
228
+ - spec/integration/paper_trail_manager_spec.rb
229
+ - spec/rails_helper.rb
230
+ - spec/spec_helper.rb
231
+ - spec/support/factories.rb
232
+ - spec/support/rspec_html_matchers.rb
233
+ homepage: https://github.com/demingfactor/paper_trail_manager
234
+ licenses:
235
+ - MIT
236
+ metadata: {}
237
+ post_install_message:
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ requirements: []
252
+ rubygems_version: 3.0.3.1
253
+ signing_key:
254
+ specification_version: 4
255
+ summary: A user interface for `paper_trail` versioning data in Rails applications.
256
+ test_files:
257
+ - spec/app_template.rb
258
+ - spec/integration/navigation_spec.rb
259
+ - spec/integration/paper_trail_manager_spec.rb
260
+ - spec/rails_helper.rb
261
+ - spec/spec_helper.rb
262
+ - spec/support/factories.rb
263
+ - spec/support/rspec_html_matchers.rb