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.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +1 -1
- data/.rubocop_todo.yml +10 -0
- data/.travis.yml +4 -4
- data/Appraisals +3 -5
- data/CHANGELOG.md +16 -1
- data/README.md +70 -119
- data/Rakefile +6 -1
- data/doc/bug_report_template.rb +4 -2
- data/doc/warning_about_not_setting_whodunnit.md +6 -5
- data/gemfiles/ar_4.0.gemfile +1 -1
- data/gemfiles/ar_4.2.gemfile +1 -1
- data/gemfiles/ar_5.0.gemfile +2 -3
- data/gemfiles/ar_5.1.gemfile +8 -0
- data/gemfiles/ar_master.gemfile +2 -2
- data/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb.erb +1 -1
- data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb.erb +1 -1
- data/lib/generators/paper_trail/templates/create_version_associations.rb.erb +1 -1
- data/lib/paper_trail/model_config.rb +4 -4
- data/lib/paper_trail/version_concern.rb +4 -4
- data/lib/paper_trail/version_number.rb +1 -1
- data/paper_trail.gemspec +5 -5
- data/spec/controllers/articles_controller_spec.rb +1 -1
- data/spec/generators/install_generator_spec.rb +2 -2
- data/spec/models/animal_spec.rb +5 -5
- data/spec/models/boolit_spec.rb +2 -2
- data/spec/models/callback_modifier_spec.rb +2 -2
- data/spec/models/car_spec.rb +2 -2
- data/spec/models/custom_primary_key_record_spec.rb +2 -2
- data/spec/models/document_spec.rb +2 -2
- data/spec/models/gadget_spec.rb +2 -2
- data/spec/models/joined_version_spec.rb +1 -1
- data/spec/models/json_version_spec.rb +4 -4
- data/spec/models/kitchen/banana_spec.rb +2 -2
- data/spec/models/not_on_update_spec.rb +2 -2
- data/spec/models/post_with_status_spec.rb +4 -4
- data/spec/models/skipper_spec.rb +1 -1
- data/spec/models/thing_spec.rb +2 -2
- data/spec/models/vehicle_spec.rb +2 -2
- data/spec/models/version_spec.rb +26 -5
- data/spec/models/widget_spec.rb +10 -2
- data/spec/modules/paper_trail_spec.rb +2 -2
- data/spec/modules/version_concern_spec.rb +2 -2
- data/spec/modules/version_number_spec.rb +1 -1
- data/spec/paper_trail/associations_spec.rb +965 -0
- data/spec/paper_trail/cleaner_spec.rb +2 -2
- data/spec/paper_trail/config_spec.rb +2 -2
- data/spec/paper_trail/model_spec.rb +1421 -0
- data/spec/paper_trail/serializer_spec.rb +85 -0
- data/spec/paper_trail/serializers/custom_yaml_serializer_spec.rb +1 -1
- data/spec/paper_trail/serializers/json_spec.rb +2 -2
- data/spec/paper_trail/serializers/yaml_spec.rb +42 -0
- data/spec/paper_trail/version_limit_spec.rb +2 -2
- data/spec/paper_trail/version_spec.rb +96 -0
- data/spec/paper_trail_spec.rb +1 -1
- data/spec/requests/articles_spec.rb +2 -2
- data/spec/spec_helper.rb +47 -79
- data/{test → spec/support}/custom_json_serializer.rb +0 -0
- data/test/dummy/app/models/document.rb +1 -1
- data/test/dummy/app/models/not_on_update.rb +1 -1
- data/test/dummy/app/models/widget.rb +1 -1
- data/test/dummy/config/routes.rb +1 -1
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +18 -9
- data/test/dummy/db/schema.rb +64 -64
- data/test/test_helper.rb +1 -33
- data/test/unit/serializers/mixin_json_test.rb +1 -1
- metadata +27 -32
- data/spec/models/truck_spec.rb +0 -5
- data/spec/rails_helper.rb +0 -34
- data/test/time_travel_helper.rb +0 -1
- data/test/unit/associations_test.rb +0 -1032
- data/test/unit/model_test.rb +0 -1416
- data/test/unit/serializer_test.rb +0 -107
- data/test/unit/serializers/yaml_test.rb +0 -50
- 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
|
data/test/unit/version_test.rb
DELETED
@@ -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
|