paper_trail 7.0.2 → 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
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