paper_trail 7.0.3 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CONTRIBUTING.md +21 -27
  3. data/.gitignore +4 -4
  4. data/.rubocop.yml +2 -2
  5. data/CHANGELOG.md +17 -0
  6. data/README.md +31 -2
  7. data/Rakefile +4 -1
  8. data/lib/paper_trail.rb +2 -0
  9. data/lib/paper_trail/serializers/json.rb +9 -0
  10. data/lib/paper_trail/version_concern.rb +1 -1
  11. data/lib/paper_trail/version_number.rb +2 -2
  12. data/paper_trail.gemspec +2 -3
  13. data/spec/controllers/widgets_controller_spec.rb +85 -0
  14. data/{test/dummy → spec/dummy_app}/Rakefile +0 -0
  15. data/{test/dummy → spec/dummy_app}/app/controllers/application_controller.rb +0 -0
  16. data/{test/dummy → spec/dummy_app}/app/controllers/articles_controller.rb +0 -0
  17. data/{test/dummy → spec/dummy_app}/app/controllers/test_controller.rb +0 -0
  18. data/{test/dummy → spec/dummy_app}/app/controllers/widgets_controller.rb +0 -0
  19. data/{test/dummy → spec/dummy_app}/app/models/animal.rb +0 -0
  20. data/{test/dummy → spec/dummy_app}/app/models/article.rb +1 -0
  21. data/{test/dummy → spec/dummy_app}/app/models/authorship.rb +0 -0
  22. data/{test/dummy → spec/dummy_app}/app/models/bar_habtm.rb +0 -0
  23. data/{test/dummy → spec/dummy_app}/app/models/book.rb +0 -0
  24. data/{test/dummy → spec/dummy_app}/app/models/boolit.rb +0 -0
  25. data/{test/dummy → spec/dummy_app}/app/models/callback_modifier.rb +0 -0
  26. data/{test/dummy → spec/dummy_app}/app/models/car.rb +0 -0
  27. data/{test/dummy → spec/dummy_app}/app/models/cat.rb +0 -0
  28. data/{test/dummy → spec/dummy_app}/app/models/chapter.rb +0 -0
  29. data/{test/dummy → spec/dummy_app}/app/models/citation.rb +0 -0
  30. data/{test/dummy → spec/dummy_app}/app/models/custom_primary_key_record.rb +0 -0
  31. data/{test/dummy → spec/dummy_app}/app/models/customer.rb +0 -0
  32. data/spec/dummy_app/app/models/document.rb +8 -0
  33. data/{test/dummy → spec/dummy_app}/app/models/dog.rb +0 -0
  34. data/{test/dummy → spec/dummy_app}/app/models/editor.rb +0 -0
  35. data/{test/dummy → spec/dummy_app}/app/models/editorship.rb +0 -0
  36. data/{test/dummy → spec/dummy_app}/app/models/elephant.rb +0 -0
  37. data/{test/dummy → spec/dummy_app}/app/models/fluxor.rb +0 -0
  38. data/{test/dummy → spec/dummy_app}/app/models/foo_habtm.rb +0 -0
  39. data/{test/dummy → spec/dummy_app}/app/models/foo_widget.rb +0 -0
  40. data/{test/dummy → spec/dummy_app}/app/models/fruit.rb +0 -0
  41. data/{test/dummy → spec/dummy_app}/app/models/gadget.rb +0 -0
  42. data/{test/dummy → spec/dummy_app}/app/models/kitchen/banana.rb +0 -0
  43. data/spec/dummy_app/app/models/legacy_widget.rb +6 -0
  44. data/{test/dummy → spec/dummy_app}/app/models/line_item.rb +0 -0
  45. data/{test/dummy → spec/dummy_app}/app/models/not_on_update.rb +0 -0
  46. data/{test/dummy → spec/dummy_app}/app/models/on/create.rb +0 -0
  47. data/{test/dummy → spec/dummy_app}/app/models/on/destroy.rb +0 -0
  48. data/{test/dummy → spec/dummy_app}/app/models/on/empty_array.rb +0 -0
  49. data/{test/dummy → spec/dummy_app}/app/models/on/update.rb +0 -0
  50. data/{test/dummy → spec/dummy_app}/app/models/order.rb +0 -0
  51. data/{test/dummy → spec/dummy_app}/app/models/paragraph.rb +0 -0
  52. data/{test/dummy → spec/dummy_app}/app/models/person.rb +0 -0
  53. data/{test/dummy → spec/dummy_app}/app/models/post.rb +0 -0
  54. data/{test/dummy → spec/dummy_app}/app/models/post_with_status.rb +0 -0
  55. data/{test/dummy → spec/dummy_app}/app/models/quotation.rb +0 -0
  56. data/{test/dummy → spec/dummy_app}/app/models/section.rb +0 -0
  57. data/{test/dummy → spec/dummy_app}/app/models/skipper.rb +0 -0
  58. data/{test/dummy → spec/dummy_app}/app/models/song.rb +0 -0
  59. data/{test/dummy → spec/dummy_app}/app/models/thing.rb +0 -0
  60. data/spec/dummy_app/app/models/translation.rb +11 -0
  61. data/{test/dummy → spec/dummy_app}/app/models/truck.rb +0 -0
  62. data/{test/dummy → spec/dummy_app}/app/models/vehicle.rb +0 -0
  63. data/{test/dummy → spec/dummy_app}/app/models/whatchamajigger.rb +0 -0
  64. data/{test/dummy → spec/dummy_app}/app/models/widget.rb +0 -0
  65. data/{test/dummy → spec/dummy_app}/app/models/wotsit.rb +0 -0
  66. data/{test/dummy → spec/dummy_app}/app/versions/custom_primary_key_record_version.rb +0 -0
  67. data/{test/dummy → spec/dummy_app}/app/versions/joined_version.rb +0 -0
  68. data/{test/dummy → spec/dummy_app}/app/versions/json_version.rb +0 -0
  69. data/{test/dummy → spec/dummy_app}/app/versions/kitchen/banana_version.rb +0 -0
  70. data/{test/dummy → spec/dummy_app}/app/versions/post_version.rb +0 -0
  71. data/{test/dummy → spec/dummy_app}/config.ru +0 -0
  72. data/{test/dummy → spec/dummy_app}/config/application.rb +0 -0
  73. data/{test/dummy → spec/dummy_app}/config/boot.rb +0 -0
  74. data/{test/dummy → spec/dummy_app}/config/database.mysql.yml +0 -0
  75. data/{test/dummy → spec/dummy_app}/config/database.postgres.yml +0 -0
  76. data/{test/dummy → spec/dummy_app}/config/database.sqlite.yml +0 -0
  77. data/{test/dummy → spec/dummy_app}/config/environment.rb +0 -0
  78. data/{test/dummy → spec/dummy_app}/config/environments/development.rb +0 -0
  79. data/{test/dummy → spec/dummy_app}/config/environments/production.rb +0 -0
  80. data/{test/dummy → spec/dummy_app}/config/environments/test.rb +0 -0
  81. data/{test/dummy → spec/dummy_app}/config/initializers/backtrace_silencers.rb +0 -0
  82. data/{test/dummy → spec/dummy_app}/config/initializers/inflections.rb +0 -0
  83. data/{test/dummy → spec/dummy_app}/config/initializers/mime_types.rb +0 -0
  84. data/{test/dummy → spec/dummy_app}/config/initializers/paper_trail.rb +0 -0
  85. data/{test/dummy → spec/dummy_app}/config/initializers/secret_token.rb +0 -0
  86. data/{test/dummy → spec/dummy_app}/config/initializers/session_store.rb +0 -0
  87. data/{test/dummy → spec/dummy_app}/config/locales/en.yml +0 -0
  88. data/{test/dummy → spec/dummy_app}/config/routes.rb +0 -0
  89. data/{test/dummy → spec/dummy_app}/db/migrate/20110208155312_set_up_test_tables.rb +0 -0
  90. data/{test/dummy → spec/dummy_app}/db/schema.rb +0 -0
  91. data/spec/models/article_spec.rb +186 -0
  92. data/spec/models/document_spec.rb +41 -5
  93. data/spec/models/legacy_widget_spec.rb +40 -0
  94. data/spec/models/on/create_spec.rb +27 -0
  95. data/spec/models/on/destroy_spec.rb +27 -0
  96. data/spec/models/on/empty_array_spec.rb +30 -0
  97. data/spec/models/on/update_spec.rb +27 -0
  98. data/spec/models/translation_spec.rb +70 -0
  99. data/spec/models/version_spec.rb +7 -3
  100. data/spec/paper_trail/config_spec.rb +12 -0
  101. data/spec/paper_trail/model_spec.rb +0 -429
  102. data/spec/paper_trail/serializers/custom_json_serializer_spec.rb +18 -0
  103. data/spec/paper_trail/thread_safety_spec.rb +44 -0
  104. data/spec/paper_trail_spec.rb +9 -0
  105. data/spec/spec_helper.rb +6 -10
  106. metadata +178 -179
  107. data/test/dummy/app/models/document.rb +0 -6
  108. data/test/dummy/app/models/legacy_widget.rb +0 -3
  109. data/test/dummy/app/models/translation.rb +0 -6
  110. data/test/functional/controller_test.rb +0 -90
  111. data/test/functional/thread_safety_test.rb +0 -46
  112. data/test/test_helper.rb +0 -68
  113. data/test/unit/serializers/mixin_json_test.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11a429887d7b9272fd54814535da3c8d5beff4f0
4
- data.tar.gz: 2d58e73069b0b929789382f3119bcdfa42c651ec
3
+ metadata.gz: '022806af0ea91aee393c67adb08dcf4a322c7652'
4
+ data.tar.gz: 50d52e94b4a93c6f89de10638cb3ddcad73a8312
5
5
  SHA512:
6
- metadata.gz: 9b8bc23a333b80008c006bca40968f587ac40c71231326c4f8b1f3ef460e09fe3c4ad00085de912ce1991fa1007d2e50c04596a64181c4fae2ef8b7c18d51baa
7
- data.tar.gz: 0c3ba5b7dfaaf2a448efa2a59dc2a4afbc15eb6a57cec024a536853172f561678afadf738320f01d212b6fa541053029982baadb9449a4fef0587e21ca7d2a8f
6
+ metadata.gz: 5282396646c7f8174d2cd866e5ee0d64f394e1f967a8c4ab979b593f772f0360f825f7312418edba016622f6088fb2cdae1264142c9b83fb2310309cd3868ff4
7
+ data.tar.gz: 48ab8574011657bcb0e4d2dbe60a78a53187ca79cef2d3a8770992bc0cf2ce179a144c821cbae194d8dc54e6a7cb4a0b44968ff513f60a16788dc2729efcff86
@@ -7,10 +7,7 @@ https://stackoverflow.com/tags/paper-trail-gem
7
7
 
8
8
  **Please do not use github issues to ask usage questions.**
9
9
 
10
- On github, we appreciate bug reports, feature
11
- suggestions, and especially pull requests.
12
-
13
- Thanks, and happy (paper) trails :)
10
+ On github, we appreciate bug reports, feature suggestions, and pull requests.
14
11
 
15
12
  ## Reporting Bugs
16
13
 
@@ -18,9 +15,7 @@ Please use our [bug report template][1].
18
15
 
19
16
  ## Development
20
17
 
21
- Install gems with `bundle exec appraisal install`. This requires ruby >= 2.0.
22
- (It is still possible to run the `ar-4.2` gemfile locally on ruby 1.9.3, but
23
- not the `ar-5.0` gemfile.)
18
+ Install gems with `bundle exec appraisal install`.
24
19
 
25
20
  Testing is a little awkward because the test suite:
26
21
 
@@ -32,13 +27,13 @@ Testing is a little awkward because the test suite:
32
27
 
33
28
  ```
34
29
  # Create the appropriate database config. file
35
- rm test/dummy/config/database.yml
30
+ rm spec/dummy_app/config/database.yml
36
31
  DB=sqlite bundle exec rake prepare
37
32
 
38
33
  # If this is the first test run ever, create databases.
39
- # We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`.
40
- # See test/dummy/config/boot.rb for a complete explanation.
41
- cd test/dummy
34
+ # We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`.
35
+ # See spec/dummy_app/config/boot.rb for a complete explanation.
36
+ cd spec/dummy_app
42
37
  export BUNDLE_GEMFILE=../../gemfiles/ar_4.2.gemfile
43
38
  RAILS_ENV=test bundle exec rake db:setup
44
39
  RAILS_ENV=foo bundle exec rake db:setup
@@ -49,8 +44,7 @@ cd ../..
49
44
  # Run tests
50
45
  DB=sqlite bundle exec appraisal ar-4.2 rake
51
46
 
52
- # Run a single test file
53
- DB=sqlite bundle exec appraisal ar-4.2 ruby -I test test/unit/associations_test.rb
47
+ # Run a single test
54
48
  DB=sqlite bundle exec appraisal ar-4.2 rspec spec/paper_trail/serializers/json_spec.rb
55
49
  ```
56
50
 
@@ -58,13 +52,13 @@ DB=sqlite bundle exec appraisal ar-4.2 rspec spec/paper_trail/serializers/json_s
58
52
 
59
53
  ```
60
54
  # Create the appropriate database config. file
61
- rm test/dummy/config/database.yml
55
+ rm spec/dummy_app/config/database.yml
62
56
  DB=sqlite bundle exec rake prepare
63
57
 
64
58
  # If this is the first test run ever, create databases.
65
- # We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`.
66
- # See test/dummy/config/boot.rb for a complete explanation.
67
- cd test/dummy
59
+ # We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`.
60
+ # See spec/dummy_app/config/boot.rb for a complete explanation.
61
+ cd spec/dummy_app
68
62
  export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile
69
63
  RAILS_ENV=test bundle exec rake db:environment:set db:setup
70
64
  RAILS_ENV=foo bundle exec rake db:environment:set db:setup
@@ -80,13 +74,13 @@ DB=sqlite bundle exec appraisal ar-5.0 rake
80
74
 
81
75
  ```
82
76
  # Create the appropriate database config. file
83
- rm test/dummy/config/database.yml
77
+ rm spec/dummy_app/config/database.yml
84
78
  DB=mysql bundle exec rake prepare
85
79
 
86
80
  # If this is the first test run ever, create databases.
87
- # We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`.
88
- # See test/dummy/config/boot.rb for a complete explanation.
89
- cd test/dummy
81
+ # We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`.
82
+ # See spec/dummy_app/config/boot.rb for a complete explanation.
83
+ cd spec/dummy_app
90
84
  export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile
91
85
  RAILS_ENV=test bundle exec rake db:environment:set db:setup
92
86
  RAILS_ENV=foo bundle exec rake db:environment:set db:setup
@@ -102,14 +96,14 @@ DB=mysql bundle exec appraisal ar-5.0 rake
102
96
 
103
97
  ```
104
98
  # Create the appropriate database config. file
105
- rm test/dummy/config/database.yml
99
+ rm spec/dummy_app/config/database.yml
106
100
  DB=postgres bundle exec rake prepare
107
101
 
108
102
  # If this is the first test run ever, create databases.
109
103
  # Unlike mysql, use create/migrate instead of setup.
110
- # We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`.
111
- # See test/dummy/config/boot.rb for a complete explanation.
112
- cd test/dummy
104
+ # We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`.
105
+ # See spec/dummy_app/config/boot.rb for a complete explanation.
106
+ cd spec/dummy_app
113
107
  export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile
114
108
  DB=postgres RAILS_ENV=test bundle exec rake db:drop db:create db:migrate
115
109
  DB=postgres RAILS_ENV=foo bundle exec rake db:drop db:create db:migrate
@@ -124,10 +118,10 @@ DB=postgres bundle exec appraisal ar-5.0 rake
124
118
 
125
119
  ## Editing the migration
126
120
 
127
- After editing `test/dummy/db/migrate/20110208155312_set_up_test_tables.rb` ..
121
+ After editing `spec/dummy_app/db/migrate/20110208155312_set_up_test_tables.rb` ..
128
122
 
129
123
  ```
130
- cd test/dummy
124
+ cd spec/dummy_app
131
125
  export BUNDLE_GEMFILE=../../gemfiles/ar_5.1.gemfile
132
126
  RAILS_ENV=test bundle exec rake db:environment:set db:drop db:create db:migrate
133
127
  RAILS_ENV=foo bundle exec rake db:environment:set db:drop db:create db:migrate
data/.gitignore CHANGED
@@ -2,10 +2,10 @@ gemfiles/*.lock
2
2
  NOTES
3
3
  test/debug.log
4
4
  test/paper_trail_plugin.sqlite3.db
5
- test/dummy/config/database.yml
6
- test/dummy/db/*.sqlite3
7
- test/dummy/log/*
8
- test/dummy/tmp/*
5
+ spec/dummy_app/config/database.yml
6
+ spec/dummy_app/db/*.sqlite3
7
+ spec/dummy_app/log/*
8
+ spec/dummy_app/tmp/*
9
9
  spec/dummy/
10
10
  coverage
11
11
  pkg/*
data/.rubocop.yml CHANGED
@@ -12,7 +12,7 @@ inherit_from: .rubocop_todo.yml
12
12
  AllCops:
13
13
  Exclude:
14
14
  - gemfiles/vendor/bundle/**/* # This dir only shows up on travis ¯\_(ツ)_/¯
15
- - test/dummy/db/schema.rb # Generated, out of our control
15
+ - spec/dummy_app/db/schema.rb # Generated, out of our control
16
16
 
17
17
  # Set to lowest supported version
18
18
  TargetRubyVersion: 2.1
@@ -21,7 +21,7 @@ AllCops:
21
21
  # from these is of questionable value.
22
22
  Metrics/AbcSize:
23
23
  Exclude:
24
- - 'test/dummy/db/migrate/*'
24
+ - 'spec/dummy_app/db/migrate/*'
25
25
 
26
26
  # Not a useful metric compared to, e.g. `AbcSize`.
27
27
  Metrics/BlockLength:
data/CHANGELOG.md CHANGED
@@ -17,6 +17,23 @@ recommendations of [keepachangelog.com](http://keepachangelog.com/).
17
17
 
18
18
  - None
19
19
 
20
+ ## 7.1.0 (2017-07-09)
21
+
22
+ ### Breaking Changes
23
+
24
+ - None
25
+
26
+ ### Added
27
+
28
+ - [#803](https://github.com/airblade/paper_trail/issues/803)
29
+ Deprecate `where_object_changes` when reading json from a text column
30
+ - [#976](https://github.com/airblade/paper_trail/pull/976)
31
+ `PaperTrail.whodunnit` accepts a `Proc`
32
+
33
+ ### Fixed
34
+
35
+ - None
36
+
20
37
  ## 7.0.3 (2017-06-01)
21
38
 
22
39
  ### Breaking Changes
data/README.md CHANGED
@@ -11,7 +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.3 | https://github.com/airblade/paper_trail/blob/v7.0.3/README.md |
14
+ | 7.1.0 | https://github.com/airblade/paper_trail/blob/v7.1.0/README.md |
15
15
  | 6.0.2 | https://github.com/airblade/paper_trail/blob/v6.0.2/README.md |
16
16
  | 5.2.3 | https://github.com/airblade/paper_trail/blob/v5.2.3/README.md |
17
17
  | 4.2.0 | https://github.com/airblade/paper_trail/blob/v4.2.0/README.md |
@@ -716,6 +716,14 @@ PaperTrail.whodunnit('Dorian Marié') do
716
716
  end
717
717
  ```
718
718
 
719
+ `whodunnit` also accepts a `Proc`.
720
+
721
+ ```ruby
722
+ PaperTrail.whodunnit = proc do
723
+ caller.first{ |c| c.starts_with? Rails.root.to_s }
724
+ end
725
+ ```
726
+
719
727
  If your controller has a `current_user` method, PaperTrail provides a
720
728
  `before_action` that will assign `current_user.id` to `PaperTrail.whodunnit`.
721
729
  You can add this `before_action` to your `ApplicationController`.
@@ -1090,7 +1098,23 @@ Generates (but does not run) a migration to add a versions table. Also generate
1090
1098
 
1091
1099
  As of version 6, PT no longer supports rails 3 or the [protected_attributes][17]
1092
1100
  gem. If you are still using them, you may use PT 5 or lower. We recommend
1093
- upgrading to [strong_parameters][18] as soon as possible.
1101
+ upgrading to [strong_parameters][18] as soon as possible.
1102
+
1103
+ If you must use [protected_attributes][17] for now, and want to use PT > 5, you
1104
+ can reopen `PaperTrail::Version` and add the following `attr_accessible` fields:
1105
+
1106
+ ```ruby
1107
+ # app/models/paper_trail/version.rb
1108
+ module PaperTrail
1109
+ class Version < ActiveRecord::Base
1110
+ include PaperTrail::VersionConcern
1111
+ attr_accessible :item_type, :item_id, :event, :whodunnit, :object, :object_changes, :created_at
1112
+ end
1113
+ end
1114
+ ```
1115
+
1116
+ This unsupported workaround has been tested with protected_attributes 1.0.9 /
1117
+ rails 4.2.8 / paper_trail 7.0.3.
1094
1118
 
1095
1119
  ## 6. Extensibility
1096
1120
 
@@ -1534,6 +1558,10 @@ by Jared Beck, with contributions by over 150 people.
1534
1558
 
1535
1559
  https://github.com/airblade/paper_trail/graphs/contributors
1536
1560
 
1561
+ ## Contributing
1562
+
1563
+ See our [contribution guidelines][43]
1564
+
1537
1565
  ## Inspirations
1538
1566
 
1539
1567
  * [Simply Versioned](http://github.com/github/simply_versioned)
@@ -1582,3 +1610,4 @@ Released under the MIT licence.
1582
1610
  [40]: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Polymorphic+Associations
1583
1611
  [41]: https://github.com/jaredbeck/paper_trail-sinatra
1584
1612
  [42]: https://github.com/activeadmin/activeadmin/wiki/Auditing-via-paper_trail-%28change-history%29
1613
+ [43]: https://github.com/airblade/paper_trail/blob/master/.github/CONTRIBUTING.md
data/Rakefile CHANGED
@@ -4,7 +4,10 @@ Bundler::GemHelper.install_tasks
4
4
  desc "Set a relevant database.yml for testing"
5
5
  task :prepare do
6
6
  ENV["DB"] ||= "sqlite"
7
- FileUtils.cp "test/dummy/config/database.#{ENV['DB']}.yml", "test/dummy/config/database.yml"
7
+ FileUtils.cp(
8
+ "spec/dummy_app/config/database.#{ENV['DB']}.yml",
9
+ "spec/dummy_app/config/database.yml"
10
+ )
8
11
  end
9
12
 
10
13
  require "rake/testtask"
data/lib/paper_trail.rb CHANGED
@@ -111,6 +111,8 @@ module PaperTrail
111
111
  ensure
112
112
  paper_trail_store[:whodunnit] = previous_whodunnit
113
113
  end
114
+ elsif paper_trail_store[:whodunnit].respond_to?(:call)
115
+ paper_trail_store[:whodunnit].call
114
116
  else
115
117
  paper_trail_store[:whodunnit]
116
118
  end
@@ -4,6 +4,13 @@ module PaperTrail
4
4
  module Serializers
5
5
  # An alternate serializer for, e.g. `versions.object`.
6
6
  module JSON
7
+ E_WHERE_OBJ_CHANGES = <<-STR.squish.freeze
8
+ where_object_changes has a known issue. When reading json from a text
9
+ column, it may return more records than expected. Instead of a warning,
10
+ this method may raise an error in the future. Please join the discussion
11
+ at https://github.com/airblade/paper_trail/issues/803
12
+ STR
13
+
7
14
  extend self # makes all instance methods become module methods as well
8
15
 
9
16
  def load(string)
@@ -35,6 +42,8 @@ module PaperTrail
35
42
  # Returns a SQL LIKE condition to be used to match the given field and
36
43
  # value in the serialized `object_changes`.
37
44
  def where_object_changes_condition(arel_field, field, value)
45
+ ::ActiveSupport::Deprecation.warn(E_WHERE_OBJ_CHANGES)
46
+
38
47
  # Convert to JSON to handle strings and nulls correctly.
39
48
  json_value = value.to_json
40
49
 
@@ -17,7 +17,7 @@ module PaperTrail
17
17
  # Since the test suite has test coverage for this, we want to declare
18
18
  # the association when the test suite is running. This makes it pass when
19
19
  # DB is not initialized prior to test runs such as when we run on Travis
20
- # CI (there won't be a db in `test/dummy/db/`).
20
+ # CI (there won't be a db in `spec/dummy_app/db/`).
21
21
  if PaperTrail.config.track_associations?
22
22
  has_many :version_associations, dependent: :destroy
23
23
  end
@@ -6,8 +6,8 @@ module PaperTrail
6
6
  # People are encouraged to use `PaperTrail.gem_version` instead.
7
7
  module VERSION
8
8
  MAJOR = 7
9
- MINOR = 0
10
- TINY = 3
9
+ MINOR = 1
10
+ TINY = 0
11
11
  PRE = nil
12
12
 
13
13
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".").freeze
data/paper_trail.gemspec CHANGED
@@ -12,7 +12,7 @@ at any stage in its lifecycle, revert it to any version, or restore it after it
12
12
  has been destroyed.
13
13
  EOS
14
14
  s.homepage = "https://github.com/airblade/paper_trail"
15
- s.authors = ["Andy Stewart", "Ben Atkins"]
15
+ s.authors = ["Andy Stewart", "Ben Atkins", "Jared Beck"]
16
16
  s.email = "batkinz@gmail.com"
17
17
  s.license = "MIT"
18
18
 
@@ -30,10 +30,9 @@ has been destroyed.
30
30
 
31
31
  s.add_development_dependency "appraisal", "~> 2.1"
32
32
  s.add_development_dependency "rake", "~> 12.0"
33
- s.add_development_dependency "shoulda", "~> 3.5"
34
33
  s.add_development_dependency "ffaker", "~> 2.5"
35
34
 
36
- # Why `railties`? Possibly used by `test/dummy` boot up?
35
+ # Why `railties`? Possibly used by `spec/dummy_app` boot up?
37
36
  s.add_development_dependency "railties", [">= 4.0", "< 5.2"]
38
37
 
39
38
  s.add_development_dependency "rack-test", "~> 0.6.3"
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe WidgetsController, type: :controller, versioning: true do
4
+ before { request.env["REMOTE_ADDR"] = "127.0.0.1" }
5
+ after { RequestStore.store[:paper_trail] = nil }
6
+
7
+ describe "#create" do
8
+ context "PT enabled" do
9
+ it "stores information like IP address in version" do
10
+ post(:create, params_wrapper(widget: { name: "Flugel" }))
11
+ widget = assigns(:widget)
12
+ expect(widget.versions.length).to(eq(1))
13
+ expect(widget.versions.last.whodunnit.to_i).to(eq(153))
14
+ expect(widget.versions.last.ip).to(eq("127.0.0.1"))
15
+ expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
16
+ end
17
+
18
+ it "controller metadata methods should get evaluated" do
19
+ request.env["HTTP_USER_AGENT"] = "User-Agent"
20
+ post :create, params_wrapper(widget: { name: "Flugel" })
21
+ expect(PaperTrail.enabled_for_controller?).to(eq(true))
22
+ expect(PaperTrail.whodunnit).to(eq(153))
23
+ expect(PaperTrail.controller_info.present?).to(eq(true))
24
+ expect(PaperTrail.controller_info.keys.include?(:ip)).to(eq(true))
25
+ expect(PaperTrail.controller_info.keys.include?(:user_agent)).to(eq(true))
26
+ end
27
+ end
28
+
29
+ context "PT disabled" do
30
+ it "does not save a version, and metadata is not set" do
31
+ request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
32
+ post :create, params_wrapper(widget: { name: "Flugel" })
33
+ expect(assigns(:widget).versions.length).to(eq(0))
34
+ expect(PaperTrail).not_to be_enabled_for_controller
35
+ expect(PaperTrail.whodunnit).to be_nil
36
+ expect(PaperTrail.controller_info).to eq({})
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "#destroy" do
42
+ it "can be disabled" do
43
+ request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
44
+ post(:create, params_wrapper(widget: { name: "Flugel" }))
45
+ w = assigns(:widget)
46
+ expect(w.versions.length).to(eq(0))
47
+ delete(:destroy, params_wrapper(id: w.id))
48
+ expect(PaperTrail::Version.with_item_keys("Widget", w.id).size).to(eq(0))
49
+ end
50
+
51
+ it "stores information like IP address in version" do
52
+ w = Widget.create(name: "Roundel")
53
+ expect(w.versions.length).to(eq(1))
54
+ delete(:destroy, params_wrapper(id: w.id))
55
+ widget = assigns(:widget)
56
+ expect(widget.versions.length).to(eq(2))
57
+ expect(widget.versions.last.ip).to(eq("127.0.0.1"))
58
+ expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
59
+ expect(widget.versions.last.whodunnit.to_i).to(eq(153))
60
+ end
61
+ end
62
+
63
+ describe "#update" do
64
+ it "stores information like IP address in version" do
65
+ w = Widget.create(name: "Duvel")
66
+ expect(w.versions.length).to(eq(1))
67
+ put(:update, params_wrapper(id: w.id, widget: { name: "Bugle" }))
68
+ widget = assigns(:widget)
69
+ expect(widget.versions.length).to(eq(2))
70
+ expect(widget.versions.last.whodunnit.to_i).to(eq(153))
71
+ expect(widget.versions.last.ip).to(eq("127.0.0.1"))
72
+ expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
73
+ end
74
+
75
+ it "can be disabled" do
76
+ request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
77
+ post(:create, params_wrapper(widget: { name: "Flugel" }))
78
+ w = assigns(:widget)
79
+ expect(w.versions.length).to(eq(0))
80
+ put(:update, params_wrapper(id: w.id, widget: { name: "Bugle" }))
81
+ widget = assigns(:widget)
82
+ expect(widget.versions.length).to(eq(0))
83
+ end
84
+ end
85
+ end
File without changes
File without changes
@@ -1,3 +1,4 @@
1
+ # Demonstrates the `only` and `ignore` attributes, among other things.
1
2
  class Article < ActiveRecord::Base
2
3
  has_paper_trail(
3
4
  ignore: [