paper_trail 3.0.6 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.rspec +1 -2
- data/.travis.yml +14 -5
- data/CHANGELOG.md +215 -8
- data/CONTRIBUTING.md +84 -0
- data/README.md +922 -502
- data/Rakefile +2 -2
- data/doc/bug_report_template.rb +65 -0
- data/gemfiles/ar3.gemfile +61 -0
- data/lib/generators/paper_trail/install_generator.rb +22 -3
- data/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb +6 -1
- data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +11 -0
- data/lib/generators/paper_trail/templates/create_version_associations.rb +17 -0
- data/lib/generators/paper_trail/templates/create_versions.rb +22 -1
- data/lib/paper_trail.rb +52 -22
- data/lib/paper_trail/attributes_serialization.rb +89 -0
- data/lib/paper_trail/cleaner.rb +32 -15
- data/lib/paper_trail/config.rb +35 -2
- data/lib/paper_trail/frameworks/active_record.rb +4 -5
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +7 -0
- data/lib/paper_trail/frameworks/rails.rb +1 -0
- data/lib/paper_trail/frameworks/rails/controller.rb +27 -11
- data/lib/paper_trail/frameworks/rspec.rb +5 -0
- data/lib/paper_trail/frameworks/sinatra.rb +3 -1
- data/lib/paper_trail/has_paper_trail.rb +304 -148
- data/lib/paper_trail/record_history.rb +59 -0
- data/lib/paper_trail/reifier.rb +270 -0
- data/lib/paper_trail/serializers/json.rb +13 -2
- data/lib/paper_trail/serializers/yaml.rb +16 -2
- data/lib/paper_trail/version_association_concern.rb +15 -0
- data/lib/paper_trail/version_concern.rb +160 -122
- data/lib/paper_trail/version_number.rb +3 -3
- data/paper_trail.gemspec +22 -9
- data/spec/generators/install_generator_spec.rb +4 -4
- data/spec/models/animal_spec.rb +36 -0
- data/spec/models/boolit_spec.rb +48 -0
- data/spec/models/callback_modifier_spec.rb +96 -0
- data/spec/models/fluxor_spec.rb +19 -0
- data/spec/models/gadget_spec.rb +14 -12
- data/spec/models/joined_version_spec.rb +9 -9
- data/spec/models/json_version_spec.rb +103 -0
- data/spec/models/kitchen/banana_spec.rb +14 -0
- data/spec/models/not_on_update_spec.rb +19 -0
- data/spec/models/post_with_status_spec.rb +3 -3
- data/spec/models/skipper_spec.rb +46 -0
- data/spec/models/thing_spec.rb +11 -0
- data/spec/models/version_spec.rb +195 -44
- data/spec/models/widget_spec.rb +136 -76
- data/spec/modules/paper_trail_spec.rb +27 -0
- data/spec/modules/version_concern_spec.rb +8 -8
- data/spec/modules/version_number_spec.rb +16 -16
- data/spec/paper_trail/config_spec.rb +52 -0
- data/spec/paper_trail_spec.rb +17 -17
- data/spec/rails_helper.rb +34 -0
- data/spec/requests/articles_spec.rb +10 -14
- data/spec/spec_helper.rb +81 -34
- data/spec/support/alt_db_init.rb +1 -1
- data/test/dummy/app/controllers/application_controller.rb +1 -1
- data/test/dummy/app/controllers/articles_controller.rb +4 -1
- data/test/dummy/app/models/animal.rb +2 -0
- data/test/dummy/app/models/book.rb +4 -0
- data/test/dummy/app/models/boolit.rb +4 -0
- data/test/dummy/app/models/callback_modifier.rb +45 -0
- data/test/dummy/app/models/chapter.rb +9 -0
- data/test/dummy/app/models/citation.rb +5 -0
- data/test/dummy/app/models/customer.rb +4 -0
- data/test/dummy/app/models/editor.rb +4 -0
- data/test/dummy/app/models/editorship.rb +5 -0
- data/test/dummy/app/models/fruit.rb +5 -0
- data/test/dummy/app/models/kitchen/banana.rb +5 -0
- data/test/dummy/app/models/line_item.rb +4 -0
- data/test/dummy/app/models/not_on_update.rb +4 -0
- data/test/dummy/app/models/order.rb +5 -0
- data/test/dummy/app/models/paragraph.rb +5 -0
- data/test/dummy/app/models/person.rb +13 -3
- data/test/dummy/app/models/post.rb +0 -1
- data/test/dummy/app/models/quotation.rb +5 -0
- data/test/dummy/app/models/section.rb +6 -0
- data/test/dummy/app/models/skipper.rb +6 -0
- data/test/dummy/app/models/song.rb +20 -0
- data/test/dummy/app/models/thing.rb +3 -0
- data/test/dummy/app/models/whatchamajigger.rb +4 -0
- data/test/dummy/app/models/widget.rb +5 -0
- data/test/dummy/app/versions/json_version.rb +3 -0
- data/test/dummy/app/versions/kitchen/banana_version.rb +5 -0
- data/test/dummy/config/application.rb +6 -0
- data/test/dummy/config/database.postgres.yml +1 -1
- data/test/dummy/config/environments/test.rb +5 -1
- data/test/dummy/config/initializers/paper_trail.rb +6 -1
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +143 -3
- data/test/dummy/db/schema.rb +169 -25
- data/test/functional/controller_test.rb +4 -2
- data/test/functional/modular_sinatra_test.rb +1 -1
- data/test/functional/sinatra_test.rb +1 -1
- data/test/paper_trail_test.rb +7 -0
- data/test/test_helper.rb +38 -2
- data/test/time_travel_helper.rb +15 -0
- data/test/unit/associations_test.rb +726 -0
- data/test/unit/inheritance_column_test.rb +6 -6
- data/test/unit/model_test.rb +109 -125
- data/test/unit/protected_attrs_test.rb +4 -3
- data/test/unit/serializer_test.rb +6 -6
- data/test/unit/serializers/json_test.rb +17 -4
- data/test/unit/serializers/yaml_test.rb +5 -1
- data/test/unit/version_test.rb +87 -69
- metadata +172 -75
- data/gemfiles/3.0.gemfile +0 -42
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/javascripts/application.js +0 -2
- data/test/dummy/public/javascripts/controls.js +0 -965
- data/test/dummy/public/javascripts/dragdrop.js +0 -974
- data/test/dummy/public/javascripts/effects.js +0 -1123
- data/test/dummy/public/javascripts/prototype.js +0 -6001
- data/test/dummy/public/javascripts/rails.js +0 -175
- data/test/dummy/public/stylesheets/.gitkeep +0 -0
@@ -10,7 +10,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
10
10
|
END
|
11
11
|
|
12
12
|
@fluxor = Fluxor.create :name => 'Some text.'
|
13
|
-
@original_fluxor_attributes = @fluxor.send(:
|
13
|
+
@original_fluxor_attributes = @fluxor.send(:attributes_before_change) # this is exactly what PaperTrail serializes
|
14
14
|
@fluxor.update_attributes :name => 'Some more text.'
|
15
15
|
end
|
16
16
|
|
@@ -24,7 +24,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
24
24
|
assert_equal @original_fluxor_attributes, YAML.load(@fluxor.versions[1].object)
|
25
25
|
# This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
|
26
26
|
# attributes in the `YAML` can't be ensured.
|
27
|
-
if RUBY_VERSION
|
27
|
+
if RUBY_VERSION >= '1.9'
|
28
28
|
assert_equal YAML.dump(@original_fluxor_attributes), @fluxor.versions[1].object
|
29
29
|
end
|
30
30
|
end
|
@@ -41,7 +41,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
41
41
|
END
|
42
42
|
|
43
43
|
@fluxor = Fluxor.create :name => 'Some text.'
|
44
|
-
@original_fluxor_attributes = @fluxor.send(:
|
44
|
+
@original_fluxor_attributes = @fluxor.send(:attributes_before_change) # this is exactly what PaperTrail serializes
|
45
45
|
@fluxor.update_attributes :name => 'Some more text.'
|
46
46
|
end
|
47
47
|
|
@@ -59,7 +59,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
59
59
|
assert_equal @original_fluxor_attributes, ActiveSupport::JSON.decode(@fluxor.versions[1].object)
|
60
60
|
# This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
|
61
61
|
# attributes in the JSON can't be ensured.
|
62
|
-
if RUBY_VERSION
|
62
|
+
if RUBY_VERSION >= '1.9'
|
63
63
|
assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes), @fluxor.versions[1].object
|
64
64
|
end
|
65
65
|
end
|
@@ -83,7 +83,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
83
83
|
END
|
84
84
|
|
85
85
|
@fluxor = Fluxor.create
|
86
|
-
@original_fluxor_attributes = @fluxor.send(:
|
86
|
+
@original_fluxor_attributes = @fluxor.send(:attributes_before_change).reject { |k,v| v.nil? } # this is exactly what PaperTrail serializes
|
87
87
|
@fluxor.update_attributes :name => 'Some more text.'
|
88
88
|
end
|
89
89
|
|
@@ -101,7 +101,7 @@ class SerializerTest < ActiveSupport::TestCase
|
|
101
101
|
assert_equal @original_fluxor_attributes, ActiveSupport::JSON.decode(@fluxor.versions[1].object)
|
102
102
|
# This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
|
103
103
|
# attributes in the JSON can't be ensured.
|
104
|
-
if RUBY_VERSION
|
104
|
+
if RUBY_VERSION >= '1.9'
|
105
105
|
assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes), @fluxor.versions[1].object
|
106
106
|
end
|
107
107
|
end
|
@@ -44,7 +44,11 @@ class JSONTest < ActiveSupport::TestCase
|
|
44
44
|
PaperTrail::Version.arel_table[:object], :arg1, "Val 1")
|
45
45
|
|
46
46
|
assert matches.instance_of?(Arel::Nodes::Matches)
|
47
|
-
|
47
|
+
if Arel::VERSION >= '6'
|
48
|
+
assert_equal matches.right.val, "%\"arg1\":\"Val 1\"%"
|
49
|
+
else
|
50
|
+
assert_equal matches.right, "%\"arg1\":\"Val 1\"%"
|
51
|
+
end
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -54,7 +58,11 @@ class JSONTest < ActiveSupport::TestCase
|
|
54
58
|
PaperTrail::Version.arel_table[:object], :arg1, nil)
|
55
59
|
|
56
60
|
assert matches.instance_of?(Arel::Nodes::Matches)
|
57
|
-
|
61
|
+
if Arel::VERSION >= '6'
|
62
|
+
assert_equal matches.right.val, "%\"arg1\":null%"
|
63
|
+
else
|
64
|
+
assert_equal matches.right, "%\"arg1\":null%"
|
65
|
+
end
|
58
66
|
end
|
59
67
|
end
|
60
68
|
|
@@ -67,8 +75,13 @@ class JSONTest < ActiveSupport::TestCase
|
|
67
75
|
matches = grouping.select { |v| v.instance_of?(Arel::Nodes::Matches) }
|
68
76
|
# Numeric arguments need to ensure that they match for only the number, not the beginning
|
69
77
|
# of a #, so it uses an Grouping matcher (See notes on `PaperTrail::Serializers::JSON`)
|
70
|
-
|
71
|
-
|
78
|
+
if Arel::VERSION >= '6'
|
79
|
+
assert_equal matches.first.right.val, "%\"arg1\":-3.5,%"
|
80
|
+
assert_equal matches.last.right.val, "%\"arg1\":-3.5}%"
|
81
|
+
else
|
82
|
+
assert_equal matches.first.right, "%\"arg1\":-3.5,%"
|
83
|
+
assert_equal matches.last.right, "%\"arg1\":-3.5}%"
|
84
|
+
end
|
72
85
|
end
|
73
86
|
end
|
74
87
|
end
|
@@ -42,7 +42,11 @@ class YamlTest < ActiveSupport::TestCase
|
|
42
42
|
matches = PaperTrail::Serializers::YAML.where_object_condition(
|
43
43
|
PaperTrail::Version.arel_table[:object], :arg1, "Val 1")
|
44
44
|
assert matches.instance_of?(Arel::Nodes::Matches)
|
45
|
-
|
45
|
+
if Arel::VERSION >= '6'
|
46
|
+
assert_equal matches.right.val, "%\narg1: Val 1\n%"
|
47
|
+
else
|
48
|
+
assert_equal matches.right, "%\narg1: Val 1\n%"
|
49
|
+
end
|
46
50
|
end
|
47
51
|
end
|
48
52
|
end
|
data/test/unit/version_test.rb
CHANGED
@@ -1,100 +1,118 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module PaperTrail
|
4
|
+
class VersionTest < ActiveSupport::TestCase
|
5
|
+
setup do
|
6
|
+
change_schema
|
7
|
+
@animal = Animal.create
|
8
|
+
assert Version.creates.present?
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
teardown do
|
12
|
+
restore_schema
|
13
|
+
Animal.connection.schema_cache.clear!
|
14
|
+
Animal.reset_column_information
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
context ".creates" do
|
18
|
+
should "return only create events" do
|
19
|
+
Version.creates.each do |version|
|
20
|
+
assert_equal "create", version.event
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
|
-
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
context ".updates" do
|
26
|
+
setup {
|
27
|
+
@animal.update_attributes(:name => 'Animal')
|
28
|
+
assert Version.updates.present?
|
29
|
+
}
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
should "return only update events" do
|
32
|
+
Version.updates.each do |version|
|
33
|
+
assert_equal "update", version.event
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
35
|
-
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
context ".destroys" do
|
39
|
+
setup {
|
40
|
+
@animal.destroy
|
41
|
+
assert Version.destroys.present?
|
42
|
+
}
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
should "return only destroy events" do
|
45
|
+
Version.destroys.each do |version|
|
46
|
+
assert_equal "destroy", version.event
|
47
|
+
end
|
46
48
|
end
|
47
49
|
end
|
48
|
-
end
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
51
|
+
context ".not_creates" do
|
52
|
+
setup {
|
53
|
+
@animal.update_attributes(:name => 'Animal')
|
54
|
+
@animal.destroy
|
55
|
+
assert Version.not_creates.present?
|
56
|
+
}
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
should "return all versions except create events" do
|
59
|
+
Version.not_creates.each do |version|
|
60
|
+
assert_not_equal "create", version.event
|
61
|
+
end
|
60
62
|
end
|
61
63
|
end
|
62
|
-
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
context ".subsequent" do
|
66
|
+
setup do
|
67
|
+
2.times do
|
68
|
+
@animal.update_attributes(:name => Faker::Lorem.word)
|
69
|
+
end
|
70
|
+
end
|
66
71
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
+
context "given a timestamp" do
|
73
|
+
should "return all versions that were created after the timestamp" do
|
74
|
+
value = Version.subsequent(1.hour.ago, true)
|
75
|
+
assert_equal @animal.versions.to_a, value
|
76
|
+
assert_match(
|
77
|
+
/ORDER BY #{Version.arel_table[:created_at].asc.to_sql}/,
|
78
|
+
value.to_sql
|
79
|
+
)
|
80
|
+
end
|
72
81
|
end
|
73
|
-
end
|
74
82
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
83
|
+
context "given a Version" do
|
84
|
+
should "grab the timestamp from the version and use that as the value" do
|
85
|
+
expected = @animal.versions.to_a.tap { |assoc| assoc.shift }
|
86
|
+
actual = Version.subsequent(@animal.versions.first)
|
87
|
+
assert_equal expected, actual
|
88
|
+
end
|
79
89
|
end
|
80
90
|
end
|
81
|
-
end
|
82
91
|
|
83
|
-
|
84
|
-
|
92
|
+
context ".preceding" do
|
93
|
+
setup do
|
94
|
+
2.times do
|
95
|
+
@animal.update_attributes(:name => Faker::Lorem.word)
|
96
|
+
end
|
97
|
+
end
|
85
98
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
99
|
+
context "given a timestamp" do
|
100
|
+
should "return all versions that were created before the timestamp" do
|
101
|
+
value = Version.preceding(5.seconds.from_now, true)
|
102
|
+
assert_equal @animal.versions.reverse, value
|
103
|
+
assert_match(
|
104
|
+
/ORDER BY #{Version.arel_table[:created_at].desc.to_sql}/,
|
105
|
+
value.to_sql
|
106
|
+
)
|
107
|
+
end
|
91
108
|
end
|
92
|
-
end
|
93
109
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
110
|
+
context "given a Version" do
|
111
|
+
should "grab the timestamp from the version and use that as the value" do
|
112
|
+
expected = @animal.versions.to_a.tap { |assoc| assoc.pop }.reverse
|
113
|
+
actual = Version.preceding(@animal.versions.last)
|
114
|
+
assert_equal expected, actual
|
115
|
+
end
|
98
116
|
end
|
99
117
|
end
|
100
118
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paper_trail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Stewart
|
@@ -9,220 +9,262 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-06-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.0'
|
21
|
-
- - <
|
21
|
+
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '6.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '3.0'
|
31
|
-
- - <
|
31
|
+
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '6.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: activesupport
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
- - <
|
41
|
+
- - "<"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '6.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '3.0'
|
51
|
-
- - <
|
51
|
+
- - "<"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '6.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: request_store
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.1'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.1'
|
54
68
|
- !ruby/object:Gem::Dependency
|
55
69
|
name: rake
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
57
71
|
requirements:
|
58
|
-
- - ~>
|
72
|
+
- - "~>"
|
59
73
|
- !ruby/object:Gem::Version
|
60
74
|
version: 10.1.1
|
61
75
|
type: :development
|
62
76
|
prerelease: false
|
63
77
|
version_requirements: !ruby/object:Gem::Requirement
|
64
78
|
requirements:
|
65
|
-
- - ~>
|
79
|
+
- - "~>"
|
66
80
|
- !ruby/object:Gem::Version
|
67
81
|
version: 10.1.1
|
68
82
|
- !ruby/object:Gem::Dependency
|
69
83
|
name: shoulda
|
70
84
|
requirement: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
72
|
-
- - ~>
|
86
|
+
- - "~>"
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: '3.5'
|
75
89
|
type: :development
|
76
90
|
prerelease: false
|
77
91
|
version_requirements: !ruby/object:Gem::Requirement
|
78
92
|
requirements:
|
79
|
-
- - ~>
|
93
|
+
- - "~>"
|
80
94
|
- !ruby/object:Gem::Version
|
81
95
|
version: '3.5'
|
82
96
|
- !ruby/object:Gem::Dependency
|
83
97
|
name: ffaker
|
84
98
|
requirement: !ruby/object:Gem::Requirement
|
85
99
|
requirements:
|
86
|
-
- -
|
100
|
+
- - "<="
|
87
101
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
102
|
+
version: 1.31.0
|
89
103
|
type: :development
|
90
104
|
prerelease: false
|
91
105
|
version_requirements: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
|
-
- -
|
107
|
+
- - "<="
|
94
108
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
109
|
+
version: 1.31.0
|
96
110
|
- !ruby/object:Gem::Dependency
|
97
111
|
name: railties
|
98
112
|
requirement: !ruby/object:Gem::Requirement
|
99
113
|
requirements:
|
100
|
-
- -
|
114
|
+
- - ">="
|
101
115
|
- !ruby/object:Gem::Version
|
102
116
|
version: '3.0'
|
103
|
-
- - <
|
117
|
+
- - "<"
|
104
118
|
- !ruby/object:Gem::Version
|
105
119
|
version: '5.0'
|
106
120
|
type: :development
|
107
121
|
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
109
123
|
requirements:
|
110
|
-
- -
|
124
|
+
- - ">="
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '3.0'
|
113
|
-
- - <
|
127
|
+
- - "<"
|
114
128
|
- !ruby/object:Gem::Version
|
115
129
|
version: '5.0'
|
116
130
|
- !ruby/object:Gem::Dependency
|
117
131
|
name: sinatra
|
118
132
|
requirement: !ruby/object:Gem::Requirement
|
119
133
|
requirements:
|
120
|
-
- - ~>
|
134
|
+
- - "~>"
|
121
135
|
- !ruby/object:Gem::Version
|
122
136
|
version: '1.0'
|
123
137
|
type: :development
|
124
138
|
prerelease: false
|
125
139
|
version_requirements: !ruby/object:Gem::Requirement
|
126
140
|
requirements:
|
127
|
-
- - ~>
|
141
|
+
- - "~>"
|
128
142
|
- !ruby/object:Gem::Version
|
129
143
|
version: '1.0'
|
130
144
|
- !ruby/object:Gem::Dependency
|
131
145
|
name: rack-test
|
132
146
|
requirement: !ruby/object:Gem::Requirement
|
133
147
|
requirements:
|
134
|
-
- -
|
148
|
+
- - ">="
|
135
149
|
- !ruby/object:Gem::Version
|
136
150
|
version: '0.6'
|
137
151
|
type: :development
|
138
152
|
prerelease: false
|
139
153
|
version_requirements: !ruby/object:Gem::Requirement
|
140
154
|
requirements:
|
141
|
-
- -
|
155
|
+
- - ">="
|
142
156
|
- !ruby/object:Gem::Version
|
143
157
|
version: '0.6'
|
144
158
|
- !ruby/object:Gem::Dependency
|
145
159
|
name: rspec-rails
|
146
160
|
requirement: !ruby/object:Gem::Requirement
|
147
161
|
requirements:
|
148
|
-
- - ~>
|
162
|
+
- - "~>"
|
149
163
|
- !ruby/object:Gem::Version
|
150
|
-
version:
|
164
|
+
version: 3.1.0
|
151
165
|
type: :development
|
152
166
|
prerelease: false
|
153
167
|
version_requirements: !ruby/object:Gem::Requirement
|
154
168
|
requirements:
|
155
|
-
- - ~>
|
169
|
+
- - "~>"
|
156
170
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
171
|
+
version: 3.1.0
|
158
172
|
- !ruby/object:Gem::Dependency
|
159
173
|
name: generator_spec
|
160
174
|
requirement: !ruby/object:Gem::Requirement
|
161
175
|
requirements:
|
162
|
-
- -
|
176
|
+
- - ">="
|
163
177
|
- !ruby/object:Gem::Version
|
164
178
|
version: '0'
|
165
179
|
type: :development
|
166
180
|
prerelease: false
|
167
181
|
version_requirements: !ruby/object:Gem::Requirement
|
168
182
|
requirements:
|
169
|
-
- -
|
183
|
+
- - ">="
|
170
184
|
- !ruby/object:Gem::Version
|
171
185
|
version: '0'
|
172
186
|
- !ruby/object:Gem::Dependency
|
173
187
|
name: database_cleaner
|
174
188
|
requirement: !ruby/object:Gem::Requirement
|
175
189
|
requirements:
|
176
|
-
- - ~>
|
190
|
+
- - "~>"
|
177
191
|
- !ruby/object:Gem::Version
|
178
192
|
version: '1.2'
|
179
193
|
type: :development
|
180
194
|
prerelease: false
|
181
195
|
version_requirements: !ruby/object:Gem::Requirement
|
182
196
|
requirements:
|
183
|
-
- - ~>
|
197
|
+
- - "~>"
|
184
198
|
- !ruby/object:Gem::Version
|
185
199
|
version: '1.2'
|
200
|
+
- !ruby/object:Gem::Dependency
|
201
|
+
name: pry-nav
|
202
|
+
requirement: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
type: :development
|
208
|
+
prerelease: false
|
209
|
+
version_requirements: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
- !ruby/object:Gem::Dependency
|
215
|
+
name: timecop
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
221
|
+
type: :development
|
222
|
+
prerelease: false
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
224
|
+
requirements:
|
225
|
+
- - ">="
|
226
|
+
- !ruby/object:Gem::Version
|
227
|
+
version: '0'
|
186
228
|
- !ruby/object:Gem::Dependency
|
187
229
|
name: sqlite3
|
188
230
|
requirement: !ruby/object:Gem::Requirement
|
189
231
|
requirements:
|
190
|
-
- - ~>
|
232
|
+
- - "~>"
|
191
233
|
- !ruby/object:Gem::Version
|
192
234
|
version: '1.2'
|
193
235
|
type: :development
|
194
236
|
prerelease: false
|
195
237
|
version_requirements: !ruby/object:Gem::Requirement
|
196
238
|
requirements:
|
197
|
-
- - ~>
|
239
|
+
- - "~>"
|
198
240
|
- !ruby/object:Gem::Version
|
199
241
|
version: '1.2'
|
200
242
|
- !ruby/object:Gem::Dependency
|
201
243
|
name: mysql2
|
202
244
|
requirement: !ruby/object:Gem::Requirement
|
203
245
|
requirements:
|
204
|
-
- - ~>
|
246
|
+
- - "~>"
|
205
247
|
- !ruby/object:Gem::Version
|
206
|
-
version:
|
248
|
+
version: 0.3.20
|
207
249
|
type: :development
|
208
250
|
prerelease: false
|
209
251
|
version_requirements: !ruby/object:Gem::Requirement
|
210
252
|
requirements:
|
211
|
-
- - ~>
|
253
|
+
- - "~>"
|
212
254
|
- !ruby/object:Gem::Version
|
213
|
-
version:
|
255
|
+
version: 0.3.20
|
214
256
|
- !ruby/object:Gem::Dependency
|
215
257
|
name: pg
|
216
258
|
requirement: !ruby/object:Gem::Requirement
|
217
259
|
requirements:
|
218
|
-
- - ~>
|
260
|
+
- - "~>"
|
219
261
|
- !ruby/object:Gem::Version
|
220
262
|
version: '0.17'
|
221
263
|
type: :development
|
222
264
|
prerelease: false
|
223
265
|
version_requirements: !ruby/object:Gem::Requirement
|
224
266
|
requirements:
|
225
|
-
- - ~>
|
267
|
+
- - "~>"
|
226
268
|
- !ruby/object:Gem::Version
|
227
269
|
version: '0.17'
|
228
270
|
description: Track changes to your models' data. Good for auditing or versioning.
|
@@ -231,24 +273,30 @@ executables: []
|
|
231
273
|
extensions: []
|
232
274
|
extra_rdoc_files: []
|
233
275
|
files:
|
234
|
-
- .gitignore
|
235
|
-
- .rspec
|
236
|
-
- .travis.yml
|
276
|
+
- ".gitignore"
|
277
|
+
- ".rspec"
|
278
|
+
- ".travis.yml"
|
237
279
|
- CHANGELOG.md
|
280
|
+
- CONTRIBUTING.md
|
238
281
|
- Gemfile
|
239
282
|
- MIT-LICENSE
|
240
283
|
- README.md
|
241
284
|
- Rakefile
|
242
|
-
-
|
285
|
+
- doc/bug_report_template.rb
|
286
|
+
- gemfiles/ar3.gemfile
|
243
287
|
- lib/generators/paper_trail/USAGE
|
244
288
|
- lib/generators/paper_trail/install_generator.rb
|
245
289
|
- lib/generators/paper_trail/templates/add_object_changes_to_versions.rb
|
290
|
+
- lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb
|
291
|
+
- lib/generators/paper_trail/templates/create_version_associations.rb
|
246
292
|
- lib/generators/paper_trail/templates/create_versions.rb
|
247
293
|
- lib/paper_trail.rb
|
294
|
+
- lib/paper_trail/attributes_serialization.rb
|
248
295
|
- lib/paper_trail/cleaner.rb
|
249
296
|
- lib/paper_trail/config.rb
|
250
297
|
- lib/paper_trail/frameworks/active_record.rb
|
251
298
|
- lib/paper_trail/frameworks/active_record/models/paper_trail/version.rb
|
299
|
+
- lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb
|
252
300
|
- lib/paper_trail/frameworks/cucumber.rb
|
253
301
|
- lib/paper_trail/frameworks/rails.rb
|
254
302
|
- lib/paper_trail/frameworks/rails/controller.rb
|
@@ -257,20 +305,35 @@ files:
|
|
257
305
|
- lib/paper_trail/frameworks/rspec/helpers.rb
|
258
306
|
- lib/paper_trail/frameworks/sinatra.rb
|
259
307
|
- lib/paper_trail/has_paper_trail.rb
|
308
|
+
- lib/paper_trail/record_history.rb
|
309
|
+
- lib/paper_trail/reifier.rb
|
260
310
|
- lib/paper_trail/serializers/json.rb
|
261
311
|
- lib/paper_trail/serializers/yaml.rb
|
312
|
+
- lib/paper_trail/version_association_concern.rb
|
262
313
|
- lib/paper_trail/version_concern.rb
|
263
314
|
- lib/paper_trail/version_number.rb
|
264
315
|
- paper_trail.gemspec
|
265
316
|
- spec/generators/install_generator_spec.rb
|
317
|
+
- spec/models/animal_spec.rb
|
318
|
+
- spec/models/boolit_spec.rb
|
319
|
+
- spec/models/callback_modifier_spec.rb
|
320
|
+
- spec/models/fluxor_spec.rb
|
266
321
|
- spec/models/gadget_spec.rb
|
267
322
|
- spec/models/joined_version_spec.rb
|
323
|
+
- spec/models/json_version_spec.rb
|
324
|
+
- spec/models/kitchen/banana_spec.rb
|
325
|
+
- spec/models/not_on_update_spec.rb
|
268
326
|
- spec/models/post_with_status_spec.rb
|
327
|
+
- spec/models/skipper_spec.rb
|
328
|
+
- spec/models/thing_spec.rb
|
269
329
|
- spec/models/version_spec.rb
|
270
330
|
- spec/models/widget_spec.rb
|
331
|
+
- spec/modules/paper_trail_spec.rb
|
271
332
|
- spec/modules/version_concern_spec.rb
|
272
333
|
- spec/modules/version_number_spec.rb
|
334
|
+
- spec/paper_trail/config_spec.rb
|
273
335
|
- spec/paper_trail_spec.rb
|
336
|
+
- spec/rails_helper.rb
|
274
337
|
- spec/requests/articles_spec.rb
|
275
338
|
- spec/spec_helper.rb
|
276
339
|
- spec/support/alt_db_init.rb
|
@@ -285,23 +348,43 @@ files:
|
|
285
348
|
- test/dummy/app/models/article.rb
|
286
349
|
- test/dummy/app/models/authorship.rb
|
287
350
|
- test/dummy/app/models/book.rb
|
351
|
+
- test/dummy/app/models/boolit.rb
|
352
|
+
- test/dummy/app/models/callback_modifier.rb
|
288
353
|
- test/dummy/app/models/cat.rb
|
354
|
+
- test/dummy/app/models/chapter.rb
|
355
|
+
- test/dummy/app/models/citation.rb
|
356
|
+
- test/dummy/app/models/customer.rb
|
289
357
|
- test/dummy/app/models/document.rb
|
290
358
|
- test/dummy/app/models/dog.rb
|
359
|
+
- test/dummy/app/models/editor.rb
|
360
|
+
- test/dummy/app/models/editorship.rb
|
291
361
|
- test/dummy/app/models/elephant.rb
|
292
362
|
- test/dummy/app/models/fluxor.rb
|
293
363
|
- test/dummy/app/models/foo_widget.rb
|
364
|
+
- test/dummy/app/models/fruit.rb
|
294
365
|
- test/dummy/app/models/gadget.rb
|
366
|
+
- test/dummy/app/models/kitchen/banana.rb
|
295
367
|
- test/dummy/app/models/legacy_widget.rb
|
368
|
+
- test/dummy/app/models/line_item.rb
|
369
|
+
- test/dummy/app/models/not_on_update.rb
|
370
|
+
- test/dummy/app/models/order.rb
|
371
|
+
- test/dummy/app/models/paragraph.rb
|
296
372
|
- test/dummy/app/models/person.rb
|
297
373
|
- test/dummy/app/models/post.rb
|
298
374
|
- test/dummy/app/models/post_with_status.rb
|
299
375
|
- test/dummy/app/models/protected_widget.rb
|
376
|
+
- test/dummy/app/models/quotation.rb
|
377
|
+
- test/dummy/app/models/section.rb
|
378
|
+
- test/dummy/app/models/skipper.rb
|
300
379
|
- test/dummy/app/models/song.rb
|
380
|
+
- test/dummy/app/models/thing.rb
|
301
381
|
- test/dummy/app/models/translation.rb
|
382
|
+
- test/dummy/app/models/whatchamajigger.rb
|
302
383
|
- test/dummy/app/models/widget.rb
|
303
384
|
- test/dummy/app/models/wotsit.rb
|
304
385
|
- test/dummy/app/versions/joined_version.rb
|
386
|
+
- test/dummy/app/versions/json_version.rb
|
387
|
+
- test/dummy/app/versions/kitchen/banana_version.rb
|
305
388
|
- test/dummy/app/versions/post_version.rb
|
306
389
|
- test/dummy/app/views/layouts/application.html.erb
|
307
390
|
- test/dummy/config.ru
|
@@ -324,17 +407,6 @@ files:
|
|
324
407
|
- test/dummy/config/routes.rb
|
325
408
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
326
409
|
- test/dummy/db/schema.rb
|
327
|
-
- test/dummy/public/404.html
|
328
|
-
- test/dummy/public/422.html
|
329
|
-
- test/dummy/public/500.html
|
330
|
-
- test/dummy/public/favicon.ico
|
331
|
-
- test/dummy/public/javascripts/application.js
|
332
|
-
- test/dummy/public/javascripts/controls.js
|
333
|
-
- test/dummy/public/javascripts/dragdrop.js
|
334
|
-
- test/dummy/public/javascripts/effects.js
|
335
|
-
- test/dummy/public/javascripts/prototype.js
|
336
|
-
- test/dummy/public/javascripts/rails.js
|
337
|
-
- test/dummy/public/stylesheets/.gitkeep
|
338
410
|
- test/dummy/script/rails
|
339
411
|
- test/functional/controller_test.rb
|
340
412
|
- test/functional/enabled_for_controller_test.rb
|
@@ -343,6 +415,8 @@ files:
|
|
343
415
|
- test/functional/thread_safety_test.rb
|
344
416
|
- test/paper_trail_test.rb
|
345
417
|
- test/test_helper.rb
|
418
|
+
- test/time_travel_helper.rb
|
419
|
+
- test/unit/associations_test.rb
|
346
420
|
- test/unit/cleaner_test.rb
|
347
421
|
- test/unit/inheritance_column_test.rb
|
348
422
|
- test/unit/model_test.rb
|
@@ -364,30 +438,42 @@ require_paths:
|
|
364
438
|
- lib
|
365
439
|
required_ruby_version: !ruby/object:Gem::Requirement
|
366
440
|
requirements:
|
367
|
-
- -
|
441
|
+
- - ">="
|
368
442
|
- !ruby/object:Gem::Version
|
369
443
|
version: '0'
|
370
444
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
371
445
|
requirements:
|
372
|
-
- -
|
446
|
+
- - ">="
|
373
447
|
- !ruby/object:Gem::Version
|
374
448
|
version: 1.3.6
|
375
449
|
requirements: []
|
376
450
|
rubyforge_project:
|
377
|
-
rubygems_version: 2.
|
451
|
+
rubygems_version: 2.5.1
|
378
452
|
signing_key:
|
379
453
|
specification_version: 4
|
380
454
|
summary: Track changes to your models' data. Good for auditing or versioning.
|
381
455
|
test_files:
|
382
456
|
- spec/generators/install_generator_spec.rb
|
457
|
+
- spec/models/animal_spec.rb
|
458
|
+
- spec/models/boolit_spec.rb
|
459
|
+
- spec/models/callback_modifier_spec.rb
|
460
|
+
- spec/models/fluxor_spec.rb
|
383
461
|
- spec/models/gadget_spec.rb
|
384
462
|
- spec/models/joined_version_spec.rb
|
463
|
+
- spec/models/json_version_spec.rb
|
464
|
+
- spec/models/kitchen/banana_spec.rb
|
465
|
+
- spec/models/not_on_update_spec.rb
|
385
466
|
- spec/models/post_with_status_spec.rb
|
467
|
+
- spec/models/skipper_spec.rb
|
468
|
+
- spec/models/thing_spec.rb
|
386
469
|
- spec/models/version_spec.rb
|
387
470
|
- spec/models/widget_spec.rb
|
471
|
+
- spec/modules/paper_trail_spec.rb
|
388
472
|
- spec/modules/version_concern_spec.rb
|
389
473
|
- spec/modules/version_number_spec.rb
|
474
|
+
- spec/paper_trail/config_spec.rb
|
390
475
|
- spec/paper_trail_spec.rb
|
476
|
+
- spec/rails_helper.rb
|
391
477
|
- spec/requests/articles_spec.rb
|
392
478
|
- spec/spec_helper.rb
|
393
479
|
- spec/support/alt_db_init.rb
|
@@ -402,23 +488,43 @@ test_files:
|
|
402
488
|
- test/dummy/app/models/article.rb
|
403
489
|
- test/dummy/app/models/authorship.rb
|
404
490
|
- test/dummy/app/models/book.rb
|
491
|
+
- test/dummy/app/models/boolit.rb
|
492
|
+
- test/dummy/app/models/callback_modifier.rb
|
405
493
|
- test/dummy/app/models/cat.rb
|
494
|
+
- test/dummy/app/models/chapter.rb
|
495
|
+
- test/dummy/app/models/citation.rb
|
496
|
+
- test/dummy/app/models/customer.rb
|
406
497
|
- test/dummy/app/models/document.rb
|
407
498
|
- test/dummy/app/models/dog.rb
|
499
|
+
- test/dummy/app/models/editor.rb
|
500
|
+
- test/dummy/app/models/editorship.rb
|
408
501
|
- test/dummy/app/models/elephant.rb
|
409
502
|
- test/dummy/app/models/fluxor.rb
|
410
503
|
- test/dummy/app/models/foo_widget.rb
|
504
|
+
- test/dummy/app/models/fruit.rb
|
411
505
|
- test/dummy/app/models/gadget.rb
|
506
|
+
- test/dummy/app/models/kitchen/banana.rb
|
412
507
|
- test/dummy/app/models/legacy_widget.rb
|
508
|
+
- test/dummy/app/models/line_item.rb
|
509
|
+
- test/dummy/app/models/not_on_update.rb
|
510
|
+
- test/dummy/app/models/order.rb
|
511
|
+
- test/dummy/app/models/paragraph.rb
|
413
512
|
- test/dummy/app/models/person.rb
|
414
513
|
- test/dummy/app/models/post.rb
|
415
514
|
- test/dummy/app/models/post_with_status.rb
|
416
515
|
- test/dummy/app/models/protected_widget.rb
|
516
|
+
- test/dummy/app/models/quotation.rb
|
517
|
+
- test/dummy/app/models/section.rb
|
518
|
+
- test/dummy/app/models/skipper.rb
|
417
519
|
- test/dummy/app/models/song.rb
|
520
|
+
- test/dummy/app/models/thing.rb
|
418
521
|
- test/dummy/app/models/translation.rb
|
522
|
+
- test/dummy/app/models/whatchamajigger.rb
|
419
523
|
- test/dummy/app/models/widget.rb
|
420
524
|
- test/dummy/app/models/wotsit.rb
|
421
525
|
- test/dummy/app/versions/joined_version.rb
|
526
|
+
- test/dummy/app/versions/json_version.rb
|
527
|
+
- test/dummy/app/versions/kitchen/banana_version.rb
|
422
528
|
- test/dummy/app/versions/post_version.rb
|
423
529
|
- test/dummy/app/views/layouts/application.html.erb
|
424
530
|
- test/dummy/config.ru
|
@@ -441,17 +547,6 @@ test_files:
|
|
441
547
|
- test/dummy/config/routes.rb
|
442
548
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
443
549
|
- test/dummy/db/schema.rb
|
444
|
-
- test/dummy/public/404.html
|
445
|
-
- test/dummy/public/422.html
|
446
|
-
- test/dummy/public/500.html
|
447
|
-
- test/dummy/public/favicon.ico
|
448
|
-
- test/dummy/public/javascripts/application.js
|
449
|
-
- test/dummy/public/javascripts/controls.js
|
450
|
-
- test/dummy/public/javascripts/dragdrop.js
|
451
|
-
- test/dummy/public/javascripts/effects.js
|
452
|
-
- test/dummy/public/javascripts/prototype.js
|
453
|
-
- test/dummy/public/javascripts/rails.js
|
454
|
-
- test/dummy/public/stylesheets/.gitkeep
|
455
550
|
- test/dummy/script/rails
|
456
551
|
- test/functional/controller_test.rb
|
457
552
|
- test/functional/enabled_for_controller_test.rb
|
@@ -460,6 +555,8 @@ test_files:
|
|
460
555
|
- test/functional/thread_safety_test.rb
|
461
556
|
- test/paper_trail_test.rb
|
462
557
|
- test/test_helper.rb
|
558
|
+
- test/time_travel_helper.rb
|
559
|
+
- test/unit/associations_test.rb
|
463
560
|
- test/unit/cleaner_test.rb
|
464
561
|
- test/unit/inheritance_column_test.rb
|
465
562
|
- test/unit/model_test.rb
|