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.
- checksums.yaml +5 -5
- data/lib/generators/paper_trail/install/USAGE +3 -0
- data/lib/generators/paper_trail/install/install_generator.rb +75 -0
- data/lib/generators/paper_trail/{templates/add_object_changes_to_versions.rb → install/templates/add_object_changes_to_versions.rb.erb} +1 -1
- data/lib/generators/paper_trail/install/templates/create_versions.rb.erb +36 -0
- data/lib/generators/paper_trail/migration_generator.rb +38 -0
- data/lib/generators/paper_trail/update_item_subtype/USAGE +4 -0
- data/lib/generators/paper_trail/update_item_subtype/templates/update_versions_for_item_subtype.rb.erb +85 -0
- data/lib/generators/paper_trail/update_item_subtype/update_item_subtype_generator.rb +17 -0
- data/lib/paper_trail.rb +82 -130
- data/lib/paper_trail/attribute_serializers/attribute_serializer_factory.rb +27 -0
- data/lib/paper_trail/attribute_serializers/cast_attribute_serializer.rb +15 -44
- data/lib/paper_trail/attribute_serializers/object_attribute.rb +2 -0
- data/lib/paper_trail/attribute_serializers/object_changes_attribute.rb +2 -0
- data/lib/paper_trail/cleaner.rb +3 -1
- data/lib/paper_trail/compatibility.rb +51 -0
- data/lib/paper_trail/config.rb +11 -49
- data/lib/paper_trail/events/base.rb +323 -0
- data/lib/paper_trail/events/create.rb +32 -0
- data/lib/paper_trail/events/destroy.rb +42 -0
- data/lib/paper_trail/events/update.rb +60 -0
- data/lib/paper_trail/frameworks/active_record.rb +2 -1
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version.rb +8 -3
- data/lib/paper_trail/frameworks/cucumber.rb +5 -3
- data/lib/paper_trail/frameworks/rails.rb +2 -0
- data/lib/paper_trail/frameworks/rails/controller.rb +33 -43
- data/lib/paper_trail/frameworks/rails/engine.rb +34 -1
- data/lib/paper_trail/frameworks/rspec.rb +17 -4
- data/lib/paper_trail/frameworks/rspec/helpers.rb +2 -0
- data/lib/paper_trail/has_paper_trail.rb +22 -310
- data/lib/paper_trail/model_config.rb +157 -109
- data/lib/paper_trail/queries/versions/where_object.rb +65 -0
- data/lib/paper_trail/queries/versions/where_object_changes.rb +75 -0
- data/lib/paper_trail/record_history.rb +3 -9
- data/lib/paper_trail/record_trail.rb +169 -319
- data/lib/paper_trail/reifier.rb +53 -374
- data/lib/paper_trail/request.rb +166 -0
- data/lib/paper_trail/serializers/json.rb +9 -10
- data/lib/paper_trail/serializers/yaml.rb +15 -28
- data/lib/paper_trail/type_serializers/postgres_array_serializer.rb +48 -0
- data/lib/paper_trail/version_concern.rb +160 -155
- data/lib/paper_trail/version_number.rb +12 -4
- metadata +77 -372
- data/.github/CONTRIBUTING.md +0 -109
- data/.github/ISSUE_TEMPLATE.md +0 -13
- data/.gitignore +0 -23
- data/.rspec +0 -2
- data/.rubocop.yml +0 -99
- data/.rubocop_todo.yml +0 -22
- data/.travis.yml +0 -41
- data/Appraisals +0 -38
- data/CHANGELOG.md +0 -560
- data/Gemfile +0 -2
- data/MIT-LICENSE +0 -20
- data/README.md +0 -1654
- data/Rakefile +0 -30
- data/doc/bug_report_template.rb +0 -69
- data/doc/warning_about_not_setting_whodunnit.md +0 -32
- data/gemfiles/ar3.gemfile +0 -19
- data/gemfiles/ar4.gemfile +0 -8
- data/gemfiles/ar5.gemfile +0 -9
- data/lib/generators/paper_trail/USAGE +0 -2
- data/lib/generators/paper_trail/default_initializer.rb +0 -0
- data/lib/generators/paper_trail/install_generator.rb +0 -57
- data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +0 -13
- data/lib/generators/paper_trail/templates/create_version_associations.rb +0 -22
- data/lib/generators/paper_trail/templates/create_versions.rb +0 -80
- data/lib/paper_trail/attribute_serializers/legacy_active_record_shim.rb +0 -48
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +0 -11
- data/lib/paper_trail/frameworks/sinatra.rb +0 -40
- data/lib/paper_trail/version_association_concern.rb +0 -17
- data/paper_trail.gemspec +0 -56
- data/spec/generators/install_generator_spec.rb +0 -66
- data/spec/generators/paper_trail/templates/create_versions_spec.rb +0 -51
- data/spec/models/animal_spec.rb +0 -36
- data/spec/models/boolit_spec.rb +0 -48
- data/spec/models/callback_modifier_spec.rb +0 -96
- data/spec/models/car_spec.rb +0 -13
- data/spec/models/custom_primary_key_record_spec.rb +0 -18
- data/spec/models/fluxor_spec.rb +0 -17
- data/spec/models/gadget_spec.rb +0 -68
- data/spec/models/joined_version_spec.rb +0 -47
- data/spec/models/json_version_spec.rb +0 -102
- data/spec/models/kitchen/banana_spec.rb +0 -14
- data/spec/models/not_on_update_spec.rb +0 -22
- data/spec/models/post_with_status_spec.rb +0 -50
- data/spec/models/skipper_spec.rb +0 -46
- data/spec/models/thing_spec.rb +0 -11
- data/spec/models/truck_spec.rb +0 -5
- data/spec/models/vehicle_spec.rb +0 -5
- data/spec/models/version_spec.rb +0 -272
- data/spec/models/widget_spec.rb +0 -343
- data/spec/modules/paper_trail_spec.rb +0 -27
- data/spec/modules/version_concern_spec.rb +0 -31
- data/spec/modules/version_number_spec.rb +0 -43
- data/spec/paper_trail/config_spec.rb +0 -33
- data/spec/paper_trail_spec.rb +0 -79
- data/spec/rails_helper.rb +0 -34
- data/spec/requests/articles_spec.rb +0 -34
- data/spec/spec_helper.rb +0 -114
- data/spec/support/alt_db_init.rb +0 -54
- data/test/custom_json_serializer.rb +0 -13
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/controllers/application_controller.rb +0 -33
- data/test/dummy/app/controllers/articles_controller.rb +0 -20
- data/test/dummy/app/controllers/test_controller.rb +0 -5
- data/test/dummy/app/controllers/widgets_controller.rb +0 -32
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/animal.rb +0 -6
- data/test/dummy/app/models/article.rb +0 -24
- data/test/dummy/app/models/authorship.rb +0 -5
- data/test/dummy/app/models/bar_habtm.rb +0 -4
- data/test/dummy/app/models/book.rb +0 -9
- data/test/dummy/app/models/boolit.rb +0 -4
- data/test/dummy/app/models/callback_modifier.rb +0 -45
- data/test/dummy/app/models/car.rb +0 -3
- data/test/dummy/app/models/cat.rb +0 -2
- data/test/dummy/app/models/chapter.rb +0 -9
- data/test/dummy/app/models/citation.rb +0 -5
- data/test/dummy/app/models/custom_primary_key_record.rb +0 -13
- data/test/dummy/app/models/customer.rb +0 -4
- data/test/dummy/app/models/document.rb +0 -4
- data/test/dummy/app/models/dog.rb +0 -2
- data/test/dummy/app/models/editor.rb +0 -4
- data/test/dummy/app/models/editorship.rb +0 -5
- data/test/dummy/app/models/elephant.rb +0 -3
- data/test/dummy/app/models/fluxor.rb +0 -3
- data/test/dummy/app/models/foo_habtm.rb +0 -5
- data/test/dummy/app/models/foo_widget.rb +0 -2
- data/test/dummy/app/models/fruit.rb +0 -5
- data/test/dummy/app/models/gadget.rb +0 -3
- data/test/dummy/app/models/kitchen/banana.rb +0 -5
- data/test/dummy/app/models/legacy_widget.rb +0 -4
- data/test/dummy/app/models/line_item.rb +0 -4
- data/test/dummy/app/models/not_on_update.rb +0 -4
- data/test/dummy/app/models/order.rb +0 -5
- data/test/dummy/app/models/paragraph.rb +0 -5
- data/test/dummy/app/models/person.rb +0 -38
- data/test/dummy/app/models/post.rb +0 -3
- data/test/dummy/app/models/post_with_status.rb +0 -8
- data/test/dummy/app/models/protected_widget.rb +0 -3
- data/test/dummy/app/models/quotation.rb +0 -5
- data/test/dummy/app/models/section.rb +0 -6
- data/test/dummy/app/models/skipper.rb +0 -6
- data/test/dummy/app/models/song.rb +0 -41
- data/test/dummy/app/models/thing.rb +0 -3
- data/test/dummy/app/models/translation.rb +0 -4
- data/test/dummy/app/models/truck.rb +0 -4
- data/test/dummy/app/models/vehicle.rb +0 -4
- data/test/dummy/app/models/whatchamajigger.rb +0 -4
- data/test/dummy/app/models/widget.rb +0 -16
- data/test/dummy/app/models/wotsit.rb +0 -8
- data/test/dummy/app/versions/custom_primary_key_record_version.rb +0 -3
- data/test/dummy/app/versions/joined_version.rb +0 -6
- data/test/dummy/app/versions/json_version.rb +0 -3
- data/test/dummy/app/versions/kitchen/banana_version.rb +0 -5
- data/test/dummy/app/versions/post_version.rb +0 -3
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -80
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.mysql.yml +0 -19
- data/test/dummy/config/database.postgres.yml +0 -15
- data/test/dummy/config/database.sqlite.yml +0 -15
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -41
- data/test/dummy/config/environments/production.rb +0 -74
- data/test/dummy/config/environments/test.rb +0 -51
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -9
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/paper_trail.rb +0 -9
- data/test/dummy/config/initializers/secret_token.rb +0 -9
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -4
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +0 -361
- data/test/dummy/db/schema.rb +0 -288
- data/test/dummy/script/rails +0 -8
- data/test/functional/controller_test.rb +0 -90
- data/test/functional/enabled_for_controller_test.rb +0 -28
- data/test/functional/modular_sinatra_test.rb +0 -46
- data/test/functional/sinatra_test.rb +0 -51
- data/test/functional/thread_safety_test.rb +0 -46
- data/test/test_helper.rb +0 -127
- data/test/time_travel_helper.rb +0 -1
- data/test/unit/associations_test.rb +0 -1016
- data/test/unit/cleaner_test.rb +0 -188
- data/test/unit/inheritance_column_test.rb +0 -43
- data/test/unit/model_test.rb +0 -1489
- data/test/unit/protected_attrs_test.rb +0 -52
- data/test/unit/serializer_test.rb +0 -119
- data/test/unit/serializers/json_test.rb +0 -95
- data/test/unit/serializers/mixin_json_test.rb +0 -37
- data/test/unit/serializers/mixin_yaml_test.rb +0 -53
- data/test/unit/serializers/yaml_test.rb +0 -54
- data/test/unit/timestamp_test.rb +0 -41
- 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
|
data/test/unit/timestamp_test.rb
DELETED
@@ -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
|