paper_trail 5.2.3 → 11.0.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 (198) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/paper_trail/install/USAGE +3 -0
  3. data/lib/generators/paper_trail/install/install_generator.rb +75 -0
  4. data/lib/generators/paper_trail/{templates/add_object_changes_to_versions.rb → install/templates/add_object_changes_to_versions.rb.erb} +1 -1
  5. data/lib/generators/paper_trail/install/templates/create_versions.rb.erb +36 -0
  6. data/lib/generators/paper_trail/migration_generator.rb +38 -0
  7. data/lib/generators/paper_trail/update_item_subtype/USAGE +4 -0
  8. data/lib/generators/paper_trail/update_item_subtype/templates/update_versions_for_item_subtype.rb.erb +85 -0
  9. data/lib/generators/paper_trail/update_item_subtype/update_item_subtype_generator.rb +17 -0
  10. data/lib/paper_trail.rb +82 -130
  11. data/lib/paper_trail/attribute_serializers/attribute_serializer_factory.rb +27 -0
  12. data/lib/paper_trail/attribute_serializers/cast_attribute_serializer.rb +15 -44
  13. data/lib/paper_trail/attribute_serializers/object_attribute.rb +2 -0
  14. data/lib/paper_trail/attribute_serializers/object_changes_attribute.rb +2 -0
  15. data/lib/paper_trail/cleaner.rb +3 -1
  16. data/lib/paper_trail/compatibility.rb +51 -0
  17. data/lib/paper_trail/config.rb +11 -49
  18. data/lib/paper_trail/events/base.rb +323 -0
  19. data/lib/paper_trail/events/create.rb +32 -0
  20. data/lib/paper_trail/events/destroy.rb +42 -0
  21. data/lib/paper_trail/events/update.rb +60 -0
  22. data/lib/paper_trail/frameworks/active_record.rb +2 -1
  23. data/lib/paper_trail/frameworks/active_record/models/paper_trail/version.rb +8 -3
  24. data/lib/paper_trail/frameworks/cucumber.rb +5 -3
  25. data/lib/paper_trail/frameworks/rails.rb +2 -0
  26. data/lib/paper_trail/frameworks/rails/controller.rb +33 -43
  27. data/lib/paper_trail/frameworks/rails/engine.rb +34 -1
  28. data/lib/paper_trail/frameworks/rspec.rb +17 -4
  29. data/lib/paper_trail/frameworks/rspec/helpers.rb +2 -0
  30. data/lib/paper_trail/has_paper_trail.rb +22 -310
  31. data/lib/paper_trail/model_config.rb +157 -109
  32. data/lib/paper_trail/queries/versions/where_object.rb +65 -0
  33. data/lib/paper_trail/queries/versions/where_object_changes.rb +75 -0
  34. data/lib/paper_trail/record_history.rb +3 -9
  35. data/lib/paper_trail/record_trail.rb +169 -319
  36. data/lib/paper_trail/reifier.rb +53 -374
  37. data/lib/paper_trail/request.rb +166 -0
  38. data/lib/paper_trail/serializers/json.rb +9 -10
  39. data/lib/paper_trail/serializers/yaml.rb +15 -28
  40. data/lib/paper_trail/type_serializers/postgres_array_serializer.rb +48 -0
  41. data/lib/paper_trail/version_concern.rb +160 -155
  42. data/lib/paper_trail/version_number.rb +12 -4
  43. metadata +77 -372
  44. data/.github/CONTRIBUTING.md +0 -109
  45. data/.github/ISSUE_TEMPLATE.md +0 -13
  46. data/.gitignore +0 -23
  47. data/.rspec +0 -2
  48. data/.rubocop.yml +0 -99
  49. data/.rubocop_todo.yml +0 -22
  50. data/.travis.yml +0 -41
  51. data/Appraisals +0 -38
  52. data/CHANGELOG.md +0 -560
  53. data/Gemfile +0 -2
  54. data/MIT-LICENSE +0 -20
  55. data/README.md +0 -1654
  56. data/Rakefile +0 -30
  57. data/doc/bug_report_template.rb +0 -69
  58. data/doc/warning_about_not_setting_whodunnit.md +0 -32
  59. data/gemfiles/ar3.gemfile +0 -19
  60. data/gemfiles/ar4.gemfile +0 -8
  61. data/gemfiles/ar5.gemfile +0 -9
  62. data/lib/generators/paper_trail/USAGE +0 -2
  63. data/lib/generators/paper_trail/default_initializer.rb +0 -0
  64. data/lib/generators/paper_trail/install_generator.rb +0 -57
  65. data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +0 -13
  66. data/lib/generators/paper_trail/templates/create_version_associations.rb +0 -22
  67. data/lib/generators/paper_trail/templates/create_versions.rb +0 -80
  68. data/lib/paper_trail/attribute_serializers/legacy_active_record_shim.rb +0 -48
  69. data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +0 -11
  70. data/lib/paper_trail/frameworks/sinatra.rb +0 -40
  71. data/lib/paper_trail/version_association_concern.rb +0 -17
  72. data/paper_trail.gemspec +0 -56
  73. data/spec/generators/install_generator_spec.rb +0 -66
  74. data/spec/generators/paper_trail/templates/create_versions_spec.rb +0 -51
  75. data/spec/models/animal_spec.rb +0 -36
  76. data/spec/models/boolit_spec.rb +0 -48
  77. data/spec/models/callback_modifier_spec.rb +0 -96
  78. data/spec/models/car_spec.rb +0 -13
  79. data/spec/models/custom_primary_key_record_spec.rb +0 -18
  80. data/spec/models/fluxor_spec.rb +0 -17
  81. data/spec/models/gadget_spec.rb +0 -68
  82. data/spec/models/joined_version_spec.rb +0 -47
  83. data/spec/models/json_version_spec.rb +0 -102
  84. data/spec/models/kitchen/banana_spec.rb +0 -14
  85. data/spec/models/not_on_update_spec.rb +0 -22
  86. data/spec/models/post_with_status_spec.rb +0 -50
  87. data/spec/models/skipper_spec.rb +0 -46
  88. data/spec/models/thing_spec.rb +0 -11
  89. data/spec/models/truck_spec.rb +0 -5
  90. data/spec/models/vehicle_spec.rb +0 -5
  91. data/spec/models/version_spec.rb +0 -272
  92. data/spec/models/widget_spec.rb +0 -343
  93. data/spec/modules/paper_trail_spec.rb +0 -27
  94. data/spec/modules/version_concern_spec.rb +0 -31
  95. data/spec/modules/version_number_spec.rb +0 -43
  96. data/spec/paper_trail/config_spec.rb +0 -33
  97. data/spec/paper_trail_spec.rb +0 -79
  98. data/spec/rails_helper.rb +0 -34
  99. data/spec/requests/articles_spec.rb +0 -34
  100. data/spec/spec_helper.rb +0 -114
  101. data/spec/support/alt_db_init.rb +0 -54
  102. data/test/custom_json_serializer.rb +0 -13
  103. data/test/dummy/Rakefile +0 -7
  104. data/test/dummy/app/controllers/application_controller.rb +0 -33
  105. data/test/dummy/app/controllers/articles_controller.rb +0 -20
  106. data/test/dummy/app/controllers/test_controller.rb +0 -5
  107. data/test/dummy/app/controllers/widgets_controller.rb +0 -32
  108. data/test/dummy/app/helpers/application_helper.rb +0 -2
  109. data/test/dummy/app/models/animal.rb +0 -6
  110. data/test/dummy/app/models/article.rb +0 -24
  111. data/test/dummy/app/models/authorship.rb +0 -5
  112. data/test/dummy/app/models/bar_habtm.rb +0 -4
  113. data/test/dummy/app/models/book.rb +0 -9
  114. data/test/dummy/app/models/boolit.rb +0 -4
  115. data/test/dummy/app/models/callback_modifier.rb +0 -45
  116. data/test/dummy/app/models/car.rb +0 -3
  117. data/test/dummy/app/models/cat.rb +0 -2
  118. data/test/dummy/app/models/chapter.rb +0 -9
  119. data/test/dummy/app/models/citation.rb +0 -5
  120. data/test/dummy/app/models/custom_primary_key_record.rb +0 -13
  121. data/test/dummy/app/models/customer.rb +0 -4
  122. data/test/dummy/app/models/document.rb +0 -4
  123. data/test/dummy/app/models/dog.rb +0 -2
  124. data/test/dummy/app/models/editor.rb +0 -4
  125. data/test/dummy/app/models/editorship.rb +0 -5
  126. data/test/dummy/app/models/elephant.rb +0 -3
  127. data/test/dummy/app/models/fluxor.rb +0 -3
  128. data/test/dummy/app/models/foo_habtm.rb +0 -5
  129. data/test/dummy/app/models/foo_widget.rb +0 -2
  130. data/test/dummy/app/models/fruit.rb +0 -5
  131. data/test/dummy/app/models/gadget.rb +0 -3
  132. data/test/dummy/app/models/kitchen/banana.rb +0 -5
  133. data/test/dummy/app/models/legacy_widget.rb +0 -4
  134. data/test/dummy/app/models/line_item.rb +0 -4
  135. data/test/dummy/app/models/not_on_update.rb +0 -4
  136. data/test/dummy/app/models/order.rb +0 -5
  137. data/test/dummy/app/models/paragraph.rb +0 -5
  138. data/test/dummy/app/models/person.rb +0 -38
  139. data/test/dummy/app/models/post.rb +0 -3
  140. data/test/dummy/app/models/post_with_status.rb +0 -8
  141. data/test/dummy/app/models/protected_widget.rb +0 -3
  142. data/test/dummy/app/models/quotation.rb +0 -5
  143. data/test/dummy/app/models/section.rb +0 -6
  144. data/test/dummy/app/models/skipper.rb +0 -6
  145. data/test/dummy/app/models/song.rb +0 -41
  146. data/test/dummy/app/models/thing.rb +0 -3
  147. data/test/dummy/app/models/translation.rb +0 -4
  148. data/test/dummy/app/models/truck.rb +0 -4
  149. data/test/dummy/app/models/vehicle.rb +0 -4
  150. data/test/dummy/app/models/whatchamajigger.rb +0 -4
  151. data/test/dummy/app/models/widget.rb +0 -16
  152. data/test/dummy/app/models/wotsit.rb +0 -8
  153. data/test/dummy/app/versions/custom_primary_key_record_version.rb +0 -3
  154. data/test/dummy/app/versions/joined_version.rb +0 -6
  155. data/test/dummy/app/versions/json_version.rb +0 -3
  156. data/test/dummy/app/versions/kitchen/banana_version.rb +0 -5
  157. data/test/dummy/app/versions/post_version.rb +0 -3
  158. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  159. data/test/dummy/config.ru +0 -4
  160. data/test/dummy/config/application.rb +0 -80
  161. data/test/dummy/config/boot.rb +0 -10
  162. data/test/dummy/config/database.mysql.yml +0 -19
  163. data/test/dummy/config/database.postgres.yml +0 -15
  164. data/test/dummy/config/database.sqlite.yml +0 -15
  165. data/test/dummy/config/environment.rb +0 -5
  166. data/test/dummy/config/environments/development.rb +0 -41
  167. data/test/dummy/config/environments/production.rb +0 -74
  168. data/test/dummy/config/environments/test.rb +0 -51
  169. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -9
  170. data/test/dummy/config/initializers/inflections.rb +0 -10
  171. data/test/dummy/config/initializers/mime_types.rb +0 -5
  172. data/test/dummy/config/initializers/paper_trail.rb +0 -9
  173. data/test/dummy/config/initializers/secret_token.rb +0 -9
  174. data/test/dummy/config/initializers/session_store.rb +0 -8
  175. data/test/dummy/config/locales/en.yml +0 -5
  176. data/test/dummy/config/routes.rb +0 -4
  177. data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +0 -361
  178. data/test/dummy/db/schema.rb +0 -288
  179. data/test/dummy/script/rails +0 -8
  180. data/test/functional/controller_test.rb +0 -90
  181. data/test/functional/enabled_for_controller_test.rb +0 -28
  182. data/test/functional/modular_sinatra_test.rb +0 -46
  183. data/test/functional/sinatra_test.rb +0 -51
  184. data/test/functional/thread_safety_test.rb +0 -46
  185. data/test/test_helper.rb +0 -127
  186. data/test/time_travel_helper.rb +0 -1
  187. data/test/unit/associations_test.rb +0 -1016
  188. data/test/unit/cleaner_test.rb +0 -188
  189. data/test/unit/inheritance_column_test.rb +0 -43
  190. data/test/unit/model_test.rb +0 -1489
  191. data/test/unit/protected_attrs_test.rb +0 -52
  192. data/test/unit/serializer_test.rb +0 -119
  193. data/test/unit/serializers/json_test.rb +0 -95
  194. data/test/unit/serializers/mixin_json_test.rb +0 -37
  195. data/test/unit/serializers/mixin_yaml_test.rb +0 -53
  196. data/test/unit/serializers/yaml_test.rb +0 -54
  197. data/test/unit/timestamp_test.rb +0 -41
  198. data/test/unit/version_test.rb +0 -119
@@ -1,52 +0,0 @@
1
- require "test_helper"
2
-
3
- class ProtectedAttrsTest < ActiveSupport::TestCase
4
- subject { ProtectedWidget.new }
5
-
6
- # These ActiveModel matchers (provided by shoulda-matchers) only work for
7
- # Rails 3.
8
- if ActiveRecord::VERSION::MAJOR < 4
9
- accessible_attrs = ProtectedWidget.accessible_attributes.to_a
10
- accessible_attrs.each do |attr_name|
11
- should allow_mass_assignment_of(attr_name.to_sym)
12
- end
13
- inaccessible = ProtectedWidget.
14
- column_names.
15
- reject { |column_name| accessible_attrs.include?(column_name) }
16
- inaccessible.each do |attr_name|
17
- should_not allow_mass_assignment_of(attr_name.to_sym)
18
- end
19
- end
20
-
21
- context "A model with `attr_accessible` created" do
22
- setup do
23
- @widget = ProtectedWidget.create! name: "Henry"
24
- @initial_attributes = @widget.attributes
25
- end
26
-
27
- should "be `nil` in its previous version" do
28
- assert_nil @widget.paper_trail.previous_version
29
- end
30
-
31
- context "which is then updated" do
32
- setup do
33
- @widget.assign_attributes(name: "Jeff", a_text: "Short statement")
34
- @widget.an_integer = 42
35
- @widget.save!
36
- end
37
-
38
- should "not be `nil` in its previous version" do
39
- assert_not_nil @widget.paper_trail.previous_version
40
- end
41
-
42
- should "the previous version should contain right attributes" do
43
- # For some reason this test seems to be broken in JRuby 1.9 mode in the
44
- # test env even though it works in the console. WTF?
45
- unless ActiveRecord::VERSION::MAJOR >= 4 && defined?(JRUBY_VERSION)
46
- previous_attributes = @widget.paper_trail.previous_version.attributes
47
- assert_attributes_equal previous_attributes, @initial_attributes
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,119 +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
- Fluxor.instance_eval <<-END
8
- has_paper_trail
9
- END
10
-
11
- @fluxor = Fluxor.create name: "Some text."
12
-
13
- # this is exactly what PaperTrail serializes
14
- @original_fluxor_attributes = @fluxor.paper_trail.attributes_before_change
15
-
16
- @fluxor.update_attributes name: "Some more text."
17
- end
18
-
19
- should "work with the default `YAML` serializer" do
20
- # Normal behaviour
21
- assert_equal 2, @fluxor.versions.length
22
- assert_nil @fluxor.versions[0].reify
23
- assert_equal "Some text.", @fluxor.versions[1].reify.name
24
-
25
- # Check values are stored as `YAML`.
26
- assert_equal @original_fluxor_attributes, YAML.load(@fluxor.versions[1].object)
27
- assert_equal YAML.dump(@original_fluxor_attributes), @fluxor.versions[1].object
28
- end
29
- end
30
-
31
- context "JSON Serializer" do
32
- setup do
33
- PaperTrail.configure do |config|
34
- config.serializer = PaperTrail::Serializers::JSON
35
- end
36
-
37
- Fluxor.instance_eval <<-END
38
- has_paper_trail
39
- END
40
-
41
- @fluxor = Fluxor.create name: "Some text."
42
-
43
- # this is exactly what PaperTrail serializes
44
- @original_fluxor_attributes = @fluxor.paper_trail.attributes_before_change
45
-
46
- @fluxor.update_attributes name: "Some more text."
47
- end
48
-
49
- teardown do
50
- PaperTrail.config.serializer = PaperTrail::Serializers::YAML
51
- end
52
-
53
- should "reify with JSON serializer" do
54
- # Normal behaviour
55
- assert_equal 2, @fluxor.versions.length
56
- assert_nil @fluxor.versions[0].reify
57
- assert_equal "Some text.", @fluxor.versions[1].reify.name
58
-
59
- # Check values are stored as JSON.
60
- assert_equal @original_fluxor_attributes,
61
- ActiveSupport::JSON.decode(@fluxor.versions[1].object)
62
- assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes),
63
- @fluxor.versions[1].object
64
- end
65
-
66
- should "store object_changes" do
67
- initial_changeset = { "name" => [nil, "Some text."], "id" => [nil, @fluxor.id] }
68
- second_changeset = { "name" => ["Some text.", "Some more text."] }
69
- assert_equal initial_changeset, @fluxor.versions[0].changeset
70
- assert_equal second_changeset, @fluxor.versions[1].changeset
71
- end
72
- end
73
-
74
- context "Custom Serializer" do
75
- setup do
76
- PaperTrail.configure do |config|
77
- config.serializer = CustomJsonSerializer
78
- end
79
-
80
- Fluxor.instance_eval <<-END
81
- has_paper_trail
82
- END
83
-
84
- @fluxor = Fluxor.create
85
-
86
- # this is exactly what PaperTrail serializes
87
- @original_fluxor_attributes = @fluxor.
88
- paper_trail.
89
- attributes_before_change.
90
- reject { |_k, v| v.nil? }
91
-
92
- @fluxor.update_attributes name: "Some more text."
93
- end
94
-
95
- teardown do
96
- PaperTrail.config.serializer = PaperTrail::Serializers::YAML
97
- end
98
-
99
- should "reify with custom serializer" do
100
- # Normal behaviour
101
- assert_equal 2, @fluxor.versions.length
102
- assert_nil @fluxor.versions[0].reify
103
- assert_nil @fluxor.versions[1].reify.name
104
-
105
- # Check values are stored as JSON.
106
- assert_equal @original_fluxor_attributes,
107
- ActiveSupport::JSON.decode(@fluxor.versions[1].object)
108
- assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes),
109
- @fluxor.versions[1].object
110
- end
111
-
112
- should "store object_changes" do
113
- initial_changeset = { "id" => [nil, @fluxor.id] }
114
- second_changeset = { "name" => [nil, "Some more text."] }
115
- assert_equal initial_changeset, @fluxor.versions[0].changeset
116
- assert_equal second_changeset, @fluxor.versions[1].changeset
117
- end
118
- end
119
- end
@@ -1,95 +0,0 @@
1
- require "test_helper"
2
-
3
- class JSONTest < ActiveSupport::TestCase
4
- setup do
5
- # Setup a hash with random values
6
- @hash = {}
7
- (1..4).each do |i|
8
- @hash["key#{i}"] = FFaker::Lorem.word
9
- end
10
- @hash_as_json = @hash.to_json
11
- # Setup an array of random words
12
- @array = []
13
- (rand(5) + 4).times { @array << FFaker::Lorem.word }
14
- @array_as_json = @array.to_json
15
- end
16
-
17
- context "`load` class method" do
18
- should "exist" do
19
- assert PaperTrail::Serializers::JSON.respond_to?(:load)
20
- end
21
-
22
- should "`deserialize` JSON to Ruby" do
23
- assert_equal @hash, PaperTrail::Serializers::JSON.load(@hash_as_json)
24
- assert_equal @array, PaperTrail::Serializers::JSON.load(@array_as_json)
25
- end
26
- end
27
-
28
- context "`dump` class method" do
29
- should "exist" do
30
- assert PaperTrail::Serializers::JSON.respond_to?(:dump)
31
- end
32
-
33
- should "`serialize` Ruby to JSON" do
34
- assert_equal @hash_as_json, PaperTrail::Serializers::JSON.dump(@hash)
35
- assert_equal @array_as_json, PaperTrail::Serializers::JSON.dump(@array)
36
- end
37
- end
38
-
39
- context "`where_object` class method" do
40
- context "when value is a string" do
41
- should "construct correct WHERE query" do
42
- matches = PaperTrail::Serializers::JSON.where_object_condition(
43
- PaperTrail::Version.arel_table[:object], :arg1,
44
- "Val 1"
45
- )
46
-
47
- assert matches.instance_of?(Arel::Nodes::Matches)
48
- if Arel::VERSION >= "6"
49
- assert_equal matches.right.val, "%\"arg1\":\"Val 1\"%"
50
- else
51
- assert_equal matches.right, "%\"arg1\":\"Val 1\"%"
52
- end
53
- end
54
- end
55
-
56
- context "when value is `null`" do
57
- should "construct correct WHERE query" do
58
- matches = PaperTrail::Serializers::JSON.where_object_condition(
59
- PaperTrail::Version.arel_table[:object],
60
- :arg1,
61
- nil
62
- )
63
-
64
- assert matches.instance_of?(Arel::Nodes::Matches)
65
- if Arel::VERSION >= "6"
66
- assert_equal matches.right.val, "%\"arg1\":null%"
67
- else
68
- assert_equal matches.right, "%\"arg1\":null%"
69
- end
70
- end
71
- end
72
-
73
- context "when value is a number" do
74
- should "construct correct WHERE query" do
75
- grouping = PaperTrail::Serializers::JSON.where_object_condition(
76
- PaperTrail::Version.arel_table[:object],
77
- :arg1,
78
- -3.5
79
- )
80
-
81
- assert grouping.instance_of?(Arel::Nodes::Grouping)
82
- matches = grouping.select { |v| v.instance_of?(Arel::Nodes::Matches) }
83
- # Numeric arguments need to ensure that they match for only the number, not the beginning
84
- # of a #, so it uses an Grouping matcher (See notes on `PaperTrail::Serializers::JSON`)
85
- if Arel::VERSION >= "6"
86
- assert_equal matches.first.right.val, "%\"arg1\":-3.5,%"
87
- assert_equal matches.last.right.val, "%\"arg1\":-3.5}%"
88
- else
89
- assert_equal matches.first.right, "%\"arg1\":-3.5,%"
90
- assert_equal matches.last.right, "%\"arg1\":-3.5}%"
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,37 +0,0 @@
1
- require "test_helper"
2
- require "custom_json_serializer"
3
-
4
- class MixinJsonTest < ActiveSupport::TestCase
5
- setup do
6
- # Setup a hash with random values, ensuring some values are nil
7
- @hash = {}
8
- (1..4).each do |i|
9
- @hash["key#{i}"] = [FFaker::Lorem.word, nil].sample
10
- end
11
- @hash["tkey"] = nil
12
- @hash[""] = "foo"
13
- @hash_as_json = @hash.to_json
14
- end
15
-
16
- context "`load` class method" do
17
- should "exist" do
18
- assert CustomJsonSerializer.respond_to?(:load)
19
- end
20
-
21
- should "`deserialize` JSON to Ruby, removing pairs with `blank` keys or values" do
22
- assert_equal @hash.reject { |k, v| k.blank? || v.blank? },
23
- CustomJsonSerializer.load(@hash_as_json)
24
- end
25
- end
26
-
27
- context "`dump` class method" do
28
- should "exist" do
29
- assert CustomJsonSerializer.respond_to?(:dump)
30
- end
31
-
32
- should "`serialize` Ruby to JSON, removing pairs with `nil` values" do
33
- assert_equal @hash.reject { |_k, v| v.nil? }.to_json,
34
- CustomJsonSerializer.dump(@hash)
35
- end
36
- end
37
- end
@@ -1,53 +0,0 @@
1
- require "test_helper"
2
-
3
- module CustomYamlSerializer
4
- extend PaperTrail::Serializers::YAML
5
-
6
- def self.load(string)
7
- parsed_value = super(string)
8
- if parsed_value.is_a?(Hash)
9
- parsed_value.reject { |k, v| k.blank? || v.blank? }
10
- else
11
- parsed_value
12
- end
13
- end
14
-
15
- def self.dump(object)
16
- object.is_a?(Hash) ? super(object.reject { |_k, v| v.nil? }) : super
17
- end
18
- end
19
-
20
- class MixinYamlTest < ActiveSupport::TestCase
21
- setup do
22
- # Setup a hash with random values, ensuring some values are nil
23
- @hash = {}
24
- (1..4).each do |i|
25
- @hash["key#{i}"] = [FFaker::Lorem.word, nil].sample
26
- end
27
- @hash["tkey"] = nil
28
- @hash[""] = "foo"
29
- @hash_as_yaml = @hash.to_yaml
30
- end
31
-
32
- context "`load` class method" do
33
- should "exist" do
34
- assert CustomYamlSerializer.respond_to?(:load)
35
- end
36
-
37
- should "`deserialize` YAML to Ruby, removing pairs with `blank` keys or values" do
38
- assert_equal @hash.reject { |k, v| k.blank? || v.blank? },
39
- CustomYamlSerializer.load(@hash_as_yaml)
40
- end
41
- end
42
-
43
- context "`dump` class method" do
44
- should "exist" do
45
- assert CustomYamlSerializer.respond_to?(:dump)
46
- end
47
-
48
- should "`serialize` Ruby to YAML, removing pairs with `nil` values" do
49
- assert_equal @hash.reject { |_k, v| v.nil? }.to_yaml,
50
- CustomYamlSerializer.dump(@hash)
51
- end
52
- end
53
- end
@@ -1,54 +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
- if Arel::VERSION >= "6"
48
- assert_equal matches.right.val, "%\narg1: Val 1\n%"
49
- else
50
- assert_equal matches.right, "%\narg1: Val 1\n%"
51
- end
52
- end
53
- end
54
- end
@@ -1,41 +0,0 @@
1
- require "test_helper"
2
-
3
- class TimestampTest < ActiveSupport::TestCase
4
- setup do
5
- PaperTrail.timestamp_field = :custom_created_at
6
- change_schema
7
-
8
- Fluxor.instance_eval <<-END
9
- has_paper_trail
10
- END
11
-
12
- @fluxor = Fluxor.create name: "Some text."
13
- @fluxor.update_attributes name: "Some more text."
14
- @fluxor.update_attributes name: "Even more text."
15
- end
16
-
17
- teardown do
18
- PaperTrail.timestamp_field = :created_at
19
- restore_schema
20
- end
21
-
22
- test "versions works with custom timestamp field" do
23
- # Normal behaviour
24
- assert_equal 3, @fluxor.versions.length
25
- assert_nil @fluxor.versions[0].reify
26
- assert_equal "Some text.", @fluxor.versions[1].reify.name
27
- assert_equal "Some more text.", @fluxor.versions[2].reify.name
28
-
29
- # Tinker with custom timestamps.
30
- now = Time.now.utc
31
- @fluxor.versions.reverse.each_with_index do |version, index|
32
- version.update_attribute :custom_created_at, (now + index.seconds)
33
- end
34
-
35
- # Test we are ordering by custom timestamps.
36
- @fluxor.versions.reload # reload association
37
- assert_nil @fluxor.versions[2].reify
38
- assert_equal "Some text.", @fluxor.versions[1].reify.name
39
- assert_equal "Some more text.", @fluxor.versions[0].reify.name
40
- end
41
- end