paper_trail 3.0.6 → 4.2.0

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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -0
  3. data/.rspec +1 -2
  4. data/.travis.yml +14 -5
  5. data/CHANGELOG.md +215 -8
  6. data/CONTRIBUTING.md +84 -0
  7. data/README.md +922 -502
  8. data/Rakefile +2 -2
  9. data/doc/bug_report_template.rb +65 -0
  10. data/gemfiles/ar3.gemfile +61 -0
  11. data/lib/generators/paper_trail/install_generator.rb +22 -3
  12. data/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb +6 -1
  13. data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +11 -0
  14. data/lib/generators/paper_trail/templates/create_version_associations.rb +17 -0
  15. data/lib/generators/paper_trail/templates/create_versions.rb +22 -1
  16. data/lib/paper_trail.rb +52 -22
  17. data/lib/paper_trail/attributes_serialization.rb +89 -0
  18. data/lib/paper_trail/cleaner.rb +32 -15
  19. data/lib/paper_trail/config.rb +35 -2
  20. data/lib/paper_trail/frameworks/active_record.rb +4 -5
  21. data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +7 -0
  22. data/lib/paper_trail/frameworks/rails.rb +1 -0
  23. data/lib/paper_trail/frameworks/rails/controller.rb +27 -11
  24. data/lib/paper_trail/frameworks/rspec.rb +5 -0
  25. data/lib/paper_trail/frameworks/sinatra.rb +3 -1
  26. data/lib/paper_trail/has_paper_trail.rb +304 -148
  27. data/lib/paper_trail/record_history.rb +59 -0
  28. data/lib/paper_trail/reifier.rb +270 -0
  29. data/lib/paper_trail/serializers/json.rb +13 -2
  30. data/lib/paper_trail/serializers/yaml.rb +16 -2
  31. data/lib/paper_trail/version_association_concern.rb +15 -0
  32. data/lib/paper_trail/version_concern.rb +160 -122
  33. data/lib/paper_trail/version_number.rb +3 -3
  34. data/paper_trail.gemspec +22 -9
  35. data/spec/generators/install_generator_spec.rb +4 -4
  36. data/spec/models/animal_spec.rb +36 -0
  37. data/spec/models/boolit_spec.rb +48 -0
  38. data/spec/models/callback_modifier_spec.rb +96 -0
  39. data/spec/models/fluxor_spec.rb +19 -0
  40. data/spec/models/gadget_spec.rb +14 -12
  41. data/spec/models/joined_version_spec.rb +9 -9
  42. data/spec/models/json_version_spec.rb +103 -0
  43. data/spec/models/kitchen/banana_spec.rb +14 -0
  44. data/spec/models/not_on_update_spec.rb +19 -0
  45. data/spec/models/post_with_status_spec.rb +3 -3
  46. data/spec/models/skipper_spec.rb +46 -0
  47. data/spec/models/thing_spec.rb +11 -0
  48. data/spec/models/version_spec.rb +195 -44
  49. data/spec/models/widget_spec.rb +136 -76
  50. data/spec/modules/paper_trail_spec.rb +27 -0
  51. data/spec/modules/version_concern_spec.rb +8 -8
  52. data/spec/modules/version_number_spec.rb +16 -16
  53. data/spec/paper_trail/config_spec.rb +52 -0
  54. data/spec/paper_trail_spec.rb +17 -17
  55. data/spec/rails_helper.rb +34 -0
  56. data/spec/requests/articles_spec.rb +10 -14
  57. data/spec/spec_helper.rb +81 -34
  58. data/spec/support/alt_db_init.rb +1 -1
  59. data/test/dummy/app/controllers/application_controller.rb +1 -1
  60. data/test/dummy/app/controllers/articles_controller.rb +4 -1
  61. data/test/dummy/app/models/animal.rb +2 -0
  62. data/test/dummy/app/models/book.rb +4 -0
  63. data/test/dummy/app/models/boolit.rb +4 -0
  64. data/test/dummy/app/models/callback_modifier.rb +45 -0
  65. data/test/dummy/app/models/chapter.rb +9 -0
  66. data/test/dummy/app/models/citation.rb +5 -0
  67. data/test/dummy/app/models/customer.rb +4 -0
  68. data/test/dummy/app/models/editor.rb +4 -0
  69. data/test/dummy/app/models/editorship.rb +5 -0
  70. data/test/dummy/app/models/fruit.rb +5 -0
  71. data/test/dummy/app/models/kitchen/banana.rb +5 -0
  72. data/test/dummy/app/models/line_item.rb +4 -0
  73. data/test/dummy/app/models/not_on_update.rb +4 -0
  74. data/test/dummy/app/models/order.rb +5 -0
  75. data/test/dummy/app/models/paragraph.rb +5 -0
  76. data/test/dummy/app/models/person.rb +13 -3
  77. data/test/dummy/app/models/post.rb +0 -1
  78. data/test/dummy/app/models/quotation.rb +5 -0
  79. data/test/dummy/app/models/section.rb +6 -0
  80. data/test/dummy/app/models/skipper.rb +6 -0
  81. data/test/dummy/app/models/song.rb +20 -0
  82. data/test/dummy/app/models/thing.rb +3 -0
  83. data/test/dummy/app/models/whatchamajigger.rb +4 -0
  84. data/test/dummy/app/models/widget.rb +5 -0
  85. data/test/dummy/app/versions/json_version.rb +3 -0
  86. data/test/dummy/app/versions/kitchen/banana_version.rb +5 -0
  87. data/test/dummy/config/application.rb +6 -0
  88. data/test/dummy/config/database.postgres.yml +1 -1
  89. data/test/dummy/config/environments/test.rb +5 -1
  90. data/test/dummy/config/initializers/paper_trail.rb +6 -1
  91. data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +143 -3
  92. data/test/dummy/db/schema.rb +169 -25
  93. data/test/functional/controller_test.rb +4 -2
  94. data/test/functional/modular_sinatra_test.rb +1 -1
  95. data/test/functional/sinatra_test.rb +1 -1
  96. data/test/paper_trail_test.rb +7 -0
  97. data/test/test_helper.rb +38 -2
  98. data/test/time_travel_helper.rb +15 -0
  99. data/test/unit/associations_test.rb +726 -0
  100. data/test/unit/inheritance_column_test.rb +6 -6
  101. data/test/unit/model_test.rb +109 -125
  102. data/test/unit/protected_attrs_test.rb +4 -3
  103. data/test/unit/serializer_test.rb +6 -6
  104. data/test/unit/serializers/json_test.rb +17 -4
  105. data/test/unit/serializers/yaml_test.rb +5 -1
  106. data/test/unit/version_test.rb +87 -69
  107. metadata +172 -75
  108. data/gemfiles/3.0.gemfile +0 -42
  109. data/test/dummy/public/404.html +0 -26
  110. data/test/dummy/public/422.html +0 -26
  111. data/test/dummy/public/500.html +0 -26
  112. data/test/dummy/public/favicon.ico +0 -0
  113. data/test/dummy/public/javascripts/application.js +0 -2
  114. data/test/dummy/public/javascripts/controls.js +0 -965
  115. data/test/dummy/public/javascripts/dragdrop.js +0 -974
  116. data/test/dummy/public/javascripts/effects.js +0 -1123
  117. data/test/dummy/public/javascripts/prototype.js +0 -6001
  118. data/test/dummy/public/javascripts/rails.js +0 -175
  119. 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(:item_before_change).attributes # this is exactly what PaperTrail serializes
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.to_f >= 1.9
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(:item_before_change).attributes # this is exactly what PaperTrail serializes
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.to_f >= 1.9
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(:item_before_change).attributes.reject { |k,v| v.nil? } # this is exactly what PaperTrail serializes
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.to_f >= 1.9
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
- assert_equal matches.right, "%\"arg1\":\"Val 1\"%"
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
- assert_equal matches.right, "%\"arg1\":null%"
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
- assert_equal matches.first.right, "%\"arg1\":-3.5,%"
71
- assert_equal matches.last.right, "%\"arg1\":-3.5}%"
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
- assert_equal matches.right, "%\narg1: Val 1\n%"
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
@@ -1,100 +1,118 @@
1
1
  require 'test_helper'
2
2
 
3
- class PaperTrail::VersionTest < ActiveSupport::TestCase
4
- setup do
5
- change_schema
6
- @animal = Animal.create
7
- assert PaperTrail::Version.creates.present?
8
- end
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
- teardown do
11
- restore_schema
12
- Animal.connection.schema_cache.clear!
13
- Animal.reset_column_information
14
- end
11
+ teardown do
12
+ restore_schema
13
+ Animal.connection.schema_cache.clear!
14
+ Animal.reset_column_information
15
+ end
15
16
 
16
- context "PaperTrail::Version.creates" do
17
- should "return only create events" do
18
- PaperTrail::Version.creates.each do |version|
19
- assert_equal "create", version.event
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
- context "PaperTrail::Version.updates" do
25
- setup {
26
- @animal.update_attributes(:name => 'Animal')
27
- assert PaperTrail::Version.updates.present?
28
- }
25
+ context ".updates" do
26
+ setup {
27
+ @animal.update_attributes(:name => 'Animal')
28
+ assert Version.updates.present?
29
+ }
29
30
 
30
- should "return only update events" do
31
- PaperTrail::Version.updates.each do |version|
32
- assert_equal "update", version.event
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
- context "PaperTrail::Version.destroys" do
38
- setup {
39
- @animal.destroy
40
- assert PaperTrail::Version.destroys.present?
41
- }
38
+ context ".destroys" do
39
+ setup {
40
+ @animal.destroy
41
+ assert Version.destroys.present?
42
+ }
42
43
 
43
- should "return only destroy events" do
44
- PaperTrail::Version.destroys.each do |version|
45
- assert_equal "destroy", version.event
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
- context "PaperTrail::Version.not_creates" do
51
- setup {
52
- @animal.update_attributes(:name => 'Animal')
53
- @animal.destroy
54
- assert PaperTrail::Version.not_creates.present?
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
- should "return all versions except create events" do
58
- PaperTrail::Version.not_creates.each do |version|
59
- assert_not_equal "create", version.event
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
- context "PaperTrail::Version.subsequent" do
65
- setup { 2.times { @animal.update_attributes(:name => Faker::Lorem.word) } }
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
- context "receiving a TimeStamp" do
68
- should "return all versions that were created before the Timestamp" do
69
- value = PaperTrail::Version.subsequent(1.hour.ago, true)
70
- assert_equal value, @animal.versions.to_a
71
- assert_not_nil value.to_sql.match(/ORDER BY #{PaperTrail::Version.arel_table[:created_at].asc.to_sql}/)
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
- context "receiving a `PaperTrail::Version`" do
76
- should "grab the Timestamp from the version and use that as the value" do
77
- value = PaperTrail::Version.subsequent(@animal.versions.first)
78
- assert_equal value, @animal.versions.to_a.tap { |assoc| assoc.shift }
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
- context "PaperTrail::Version.preceding" do
84
- setup { 2.times { @animal.update_attributes(:name => Faker::Lorem.word) } }
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
- context "receiving a TimeStamp" do
87
- should "return all versions that were created before the Timestamp" do
88
- value = PaperTrail::Version.preceding(5.seconds.from_now, true)
89
- assert_equal value, @animal.versions.reverse
90
- assert_not_nil value.to_sql.match(/ORDER BY #{PaperTrail::Version.arel_table[:created_at].desc.to_sql}/)
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
- context "receiving a `PaperTrail::Version`" do
95
- should "grab the Timestamp from the version and use that as the value" do
96
- value = PaperTrail::Version.preceding(@animal.versions.last)
97
- assert_equal value, @animal.versions.to_a.tap { |assoc| assoc.pop }.reverse
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: 3.0.6
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: 2014-10-09 00:00:00.000000000 Z
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: '5.0'
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: '5.0'
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: '5.0'
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: '5.0'
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: '1.15'
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: '1.15'
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: '2.14'
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: '2.14'
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: '0.3'
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: '0.3'
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
- - gemfiles/3.0.gemfile
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.2.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