paper_trail 7.0.2 → 7.0.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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CONTRIBUTING.md +1 -1
  3. data/.rubocop_todo.yml +10 -0
  4. data/.travis.yml +4 -4
  5. data/Appraisals +3 -5
  6. data/CHANGELOG.md +16 -1
  7. data/README.md +70 -119
  8. data/Rakefile +6 -1
  9. data/doc/bug_report_template.rb +4 -2
  10. data/doc/warning_about_not_setting_whodunnit.md +6 -5
  11. data/gemfiles/ar_4.0.gemfile +1 -1
  12. data/gemfiles/ar_4.2.gemfile +1 -1
  13. data/gemfiles/ar_5.0.gemfile +2 -3
  14. data/gemfiles/ar_5.1.gemfile +8 -0
  15. data/gemfiles/ar_master.gemfile +2 -2
  16. data/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb.erb +1 -1
  17. data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb.erb +1 -1
  18. data/lib/generators/paper_trail/templates/create_version_associations.rb.erb +1 -1
  19. data/lib/paper_trail/model_config.rb +4 -4
  20. data/lib/paper_trail/version_concern.rb +4 -4
  21. data/lib/paper_trail/version_number.rb +1 -1
  22. data/paper_trail.gemspec +5 -5
  23. data/spec/controllers/articles_controller_spec.rb +1 -1
  24. data/spec/generators/install_generator_spec.rb +2 -2
  25. data/spec/models/animal_spec.rb +5 -5
  26. data/spec/models/boolit_spec.rb +2 -2
  27. data/spec/models/callback_modifier_spec.rb +2 -2
  28. data/spec/models/car_spec.rb +2 -2
  29. data/spec/models/custom_primary_key_record_spec.rb +2 -2
  30. data/spec/models/document_spec.rb +2 -2
  31. data/spec/models/gadget_spec.rb +2 -2
  32. data/spec/models/joined_version_spec.rb +1 -1
  33. data/spec/models/json_version_spec.rb +4 -4
  34. data/spec/models/kitchen/banana_spec.rb +2 -2
  35. data/spec/models/not_on_update_spec.rb +2 -2
  36. data/spec/models/post_with_status_spec.rb +4 -4
  37. data/spec/models/skipper_spec.rb +1 -1
  38. data/spec/models/thing_spec.rb +2 -2
  39. data/spec/models/vehicle_spec.rb +2 -2
  40. data/spec/models/version_spec.rb +26 -5
  41. data/spec/models/widget_spec.rb +10 -2
  42. data/spec/modules/paper_trail_spec.rb +2 -2
  43. data/spec/modules/version_concern_spec.rb +2 -2
  44. data/spec/modules/version_number_spec.rb +1 -1
  45. data/spec/paper_trail/associations_spec.rb +965 -0
  46. data/spec/paper_trail/cleaner_spec.rb +2 -2
  47. data/spec/paper_trail/config_spec.rb +2 -2
  48. data/spec/paper_trail/model_spec.rb +1421 -0
  49. data/spec/paper_trail/serializer_spec.rb +85 -0
  50. data/spec/paper_trail/serializers/custom_yaml_serializer_spec.rb +1 -1
  51. data/spec/paper_trail/serializers/json_spec.rb +2 -2
  52. data/spec/paper_trail/serializers/yaml_spec.rb +42 -0
  53. data/spec/paper_trail/version_limit_spec.rb +2 -2
  54. data/spec/paper_trail/version_spec.rb +96 -0
  55. data/spec/paper_trail_spec.rb +1 -1
  56. data/spec/requests/articles_spec.rb +2 -2
  57. data/spec/spec_helper.rb +47 -79
  58. data/{test → spec/support}/custom_json_serializer.rb +0 -0
  59. data/test/dummy/app/models/document.rb +1 -1
  60. data/test/dummy/app/models/not_on_update.rb +1 -1
  61. data/test/dummy/app/models/widget.rb +1 -1
  62. data/test/dummy/config/routes.rb +1 -1
  63. data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +18 -9
  64. data/test/dummy/db/schema.rb +64 -64
  65. data/test/test_helper.rb +1 -33
  66. data/test/unit/serializers/mixin_json_test.rb +1 -1
  67. metadata +27 -32
  68. data/spec/models/truck_spec.rb +0 -5
  69. data/spec/rails_helper.rb +0 -34
  70. data/test/time_travel_helper.rb +0 -1
  71. data/test/unit/associations_test.rb +0 -1032
  72. data/test/unit/model_test.rb +0 -1416
  73. data/test/unit/serializer_test.rb +0 -107
  74. data/test/unit/serializers/yaml_test.rb +0 -50
  75. data/test/unit/version_test.rb +0 -112
@@ -1,107 +0,0 @@
1
- require "test_helper"
2
- require "custom_json_serializer"
3
-
4
- class SerializerTest < ActiveSupport::TestCase
5
- context "YAML Serializer" do
6
- setup do
7
- @customer = Customer.create name: "Some text."
8
-
9
- # this is exactly what PaperTrail serializes
10
- @original_attributes = @customer.paper_trail.attributes_before_change
11
-
12
- @customer.update_attributes name: "Some more text."
13
- end
14
-
15
- should "work with the default `YAML` serializer" do
16
- # Normal behaviour
17
- assert_equal 2, @customer.versions.length
18
- assert_nil @customer.versions[0].reify
19
- assert_equal "Some text.", @customer.versions[1].reify.name
20
-
21
- # Check values are stored as `YAML`.
22
- assert_equal @original_attributes, YAML.load(@customer.versions[1].object)
23
- assert_equal YAML.dump(@original_attributes), @customer.versions[1].object
24
- end
25
- end
26
-
27
- context "JSON Serializer" do
28
- setup do
29
- PaperTrail.configure do |config|
30
- config.serializer = PaperTrail::Serializers::JSON
31
- end
32
-
33
- @customer = Customer.create name: "Some text."
34
-
35
- # this is exactly what PaperTrail serializes
36
- @original_attributes = @customer.paper_trail.attributes_before_change
37
-
38
- @customer.update_attributes name: "Some more text."
39
- end
40
-
41
- teardown do
42
- PaperTrail.config.serializer = PaperTrail::Serializers::YAML
43
- end
44
-
45
- should "reify with JSON serializer" do
46
- # Normal behaviour
47
- assert_equal 2, @customer.versions.length
48
- assert_nil @customer.versions[0].reify
49
- assert_equal "Some text.", @customer.versions[1].reify.name
50
-
51
- # Check values are stored as JSON.
52
- assert_equal @original_attributes,
53
- ActiveSupport::JSON.decode(@customer.versions[1].object)
54
- assert_equal ActiveSupport::JSON.encode(@original_attributes),
55
- @customer.versions[1].object
56
- end
57
-
58
- should "store object_changes" do
59
- initial_changeset = { "name" => [nil, "Some text."], "id" => [nil, @customer.id] }
60
- second_changeset = { "name" => ["Some text.", "Some more text."] }
61
- assert_equal initial_changeset, @customer.versions[0].changeset
62
- assert_equal second_changeset, @customer.versions[1].changeset
63
- end
64
- end
65
-
66
- context "Custom Serializer" do
67
- setup do
68
- PaperTrail.configure do |config|
69
- config.serializer = CustomJsonSerializer
70
- end
71
-
72
- @customer = Customer.create
73
-
74
- # this is exactly what PaperTrail serializes
75
- @original_attributes = @customer.
76
- paper_trail.
77
- attributes_before_change.
78
- reject { |_k, v| v.nil? }
79
-
80
- @customer.update_attributes name: "Some more text."
81
- end
82
-
83
- teardown do
84
- PaperTrail.config.serializer = PaperTrail::Serializers::YAML
85
- end
86
-
87
- should "reify with custom serializer" do
88
- # Normal behaviour
89
- assert_equal 2, @customer.versions.length
90
- assert_nil @customer.versions[0].reify
91
- assert_nil @customer.versions[1].reify.name
92
-
93
- # Check values are stored as JSON.
94
- assert_equal @original_attributes,
95
- ActiveSupport::JSON.decode(@customer.versions[1].object)
96
- assert_equal ActiveSupport::JSON.encode(@original_attributes),
97
- @customer.versions[1].object
98
- end
99
-
100
- should "store object_changes" do
101
- initial_changeset = { "id" => [nil, @customer.id] }
102
- second_changeset = { "name" => [nil, "Some more text."] }
103
- assert_equal initial_changeset, @customer.versions[0].changeset
104
- assert_equal second_changeset, @customer.versions[1].changeset
105
- end
106
- end
107
- end
@@ -1,50 +0,0 @@
1
- require "test_helper"
2
-
3
- class YamlTest < ActiveSupport::TestCase
4
- setup do
5
- # Setup a hash with random values
6
- @hash = {}
7
- (1..4).each do |i|
8
- @hash["key#{i}".to_sym] = FFaker::Lorem.word
9
- end
10
- @hash_as_yaml = @hash.to_yaml
11
- # Setup an array of random words
12
- @array = []
13
- (rand(5) + 4).times { @array << FFaker::Lorem.word }
14
- @array_as_yaml = @array.to_yaml
15
- end
16
-
17
- context "`load` class method" do
18
- should "exist" do
19
- assert PaperTrail::Serializers::YAML.respond_to?(:load)
20
- end
21
-
22
- should "deserialize `YAML` to Ruby" do
23
- assert_equal @hash, PaperTrail::Serializers::YAML.load(@hash_as_yaml)
24
- assert_equal @array, PaperTrail::Serializers::YAML.load(@array_as_yaml)
25
- end
26
- end
27
-
28
- context "`dump` class method" do
29
- should "exist" do
30
- assert PaperTrail::Serializers::YAML.respond_to?(:dump)
31
- end
32
-
33
- should "serialize Ruby to `YAML`" do
34
- assert_equal @hash_as_yaml, PaperTrail::Serializers::YAML.dump(@hash)
35
- assert_equal @array_as_yaml, PaperTrail::Serializers::YAML.dump(@array)
36
- end
37
- end
38
-
39
- context "`where_object` class method" do
40
- should "construct correct WHERE query" do
41
- matches = PaperTrail::Serializers::YAML.where_object_condition(
42
- PaperTrail::Version.arel_table[:object],
43
- :arg1,
44
- "Val 1"
45
- )
46
- assert matches.instance_of?(Arel::Nodes::Matches)
47
- assert_equal matches.right.val, "%\narg1: Val 1\n%"
48
- end
49
- end
50
- end
@@ -1,112 +0,0 @@
1
- require "test_helper"
2
-
3
- module PaperTrail
4
- class VersionTest < ActiveSupport::TestCase
5
- setup do
6
- @animal = Animal.create
7
- assert Version.creates.present?
8
- end
9
-
10
- context ".creates" do
11
- should "return only create events" do
12
- Version.creates.each do |version|
13
- assert_equal "create", version.event
14
- end
15
- end
16
- end
17
-
18
- context ".updates" do
19
- setup {
20
- @animal.update_attributes(name: "Animal")
21
- assert Version.updates.present?
22
- }
23
-
24
- should "return only update events" do
25
- Version.updates.each do |version|
26
- assert_equal "update", version.event
27
- end
28
- end
29
- end
30
-
31
- context ".destroys" do
32
- setup {
33
- @animal.destroy
34
- assert Version.destroys.present?
35
- }
36
-
37
- should "return only destroy events" do
38
- Version.destroys.each do |version|
39
- assert_equal "destroy", version.event
40
- end
41
- end
42
- end
43
-
44
- context ".not_creates" do
45
- setup {
46
- @animal.update_attributes(name: "Animal")
47
- @animal.destroy
48
- assert Version.not_creates.present?
49
- }
50
-
51
- should "return all versions except create events" do
52
- Version.not_creates.each do |version|
53
- assert_not_equal "create", version.event
54
- end
55
- end
56
- end
57
-
58
- context ".subsequent" do
59
- setup do
60
- 2.times do
61
- @animal.update_attributes(name: FFaker::Lorem.word)
62
- end
63
- end
64
-
65
- context "given a timestamp" do
66
- should "return all versions that were created after the timestamp" do
67
- value = Version.subsequent(1.hour.ago, true)
68
- assert_equal @animal.versions.to_a, value
69
- assert_match(
70
- /ORDER BY #{Version.arel_table[:created_at].asc.to_sql}/,
71
- value.to_sql
72
- )
73
- end
74
- end
75
-
76
- context "given a Version" do
77
- should "grab the timestamp from the version and use that as the value" do
78
- expected = @animal.versions.to_a.tap(&:shift)
79
- actual = Version.subsequent(@animal.versions.first)
80
- assert_equal expected, actual
81
- end
82
- end
83
- end
84
-
85
- context ".preceding" do
86
- setup do
87
- 2.times do
88
- @animal.update_attributes(name: FFaker::Lorem.word)
89
- end
90
- end
91
-
92
- context "given a timestamp" do
93
- should "return all versions that were created before the timestamp" do
94
- value = Version.preceding(5.seconds.from_now, true)
95
- assert_equal @animal.versions.reverse, value
96
- assert_match(
97
- /ORDER BY #{Version.arel_table[:created_at].desc.to_sql}/,
98
- value.to_sql
99
- )
100
- end
101
- end
102
-
103
- context "given a Version" do
104
- should "grab the timestamp from the version and use that as the value" do
105
- expected = @animal.versions.to_a.tap(&:pop).reverse
106
- actual = Version.preceding(@animal.versions.last)
107
- assert_equal expected, actual
108
- end
109
- end
110
- end
111
- end
112
- end