active_model_serializers 0.9.12 → 0.10.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +638 -82
- data/MIT-LICENSE +3 -2
- data/README.md +194 -846
- data/lib/action_controller/serialization.rb +34 -74
- data/lib/active_model/serializable_resource.rb +13 -0
- data/lib/active_model/serializer/adapter/attributes.rb +17 -0
- data/lib/active_model/serializer/adapter/base.rb +20 -0
- data/lib/active_model/serializer/adapter/json.rb +17 -0
- data/lib/active_model/serializer/adapter/json_api.rb +17 -0
- data/lib/active_model/serializer/adapter/null.rb +17 -0
- data/lib/active_model/serializer/adapter.rb +26 -0
- data/lib/active_model/serializer/array_serializer.rb +14 -0
- data/lib/active_model/serializer/association.rb +53 -38
- data/lib/active_model/serializer/attribute.rb +27 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +13 -0
- data/lib/active_model/serializer/collection_serializer.rb +99 -0
- data/lib/active_model/serializer/concerns/caching.rb +305 -0
- data/lib/active_model/serializer/error_serializer.rb +16 -0
- data/lib/active_model/serializer/errors_serializer.rb +34 -0
- data/lib/active_model/serializer/field.rb +92 -0
- data/lib/active_model/serializer/fieldset.rb +33 -0
- data/lib/active_model/serializer/has_many_reflection.rb +12 -0
- data/lib/active_model/serializer/has_one_reflection.rb +9 -0
- data/lib/active_model/serializer/lazy_association.rb +99 -0
- data/lib/active_model/serializer/link.rb +23 -0
- data/lib/active_model/serializer/lint.rb +152 -0
- data/lib/active_model/serializer/null.rb +19 -0
- data/lib/active_model/serializer/reflection.rb +212 -0
- data/lib/active_model/serializer/version.rb +1 -1
- data/lib/active_model/serializer.rb +361 -263
- data/lib/active_model_serializers/adapter/attributes.rb +36 -0
- data/lib/active_model_serializers/adapter/base.rb +85 -0
- data/lib/active_model_serializers/adapter/json.rb +23 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +215 -0
- data/lib/active_model_serializers/adapter/json_api/error.rb +98 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +51 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +85 -0
- data/lib/active_model_serializers/adapter/json_api/meta.rb +39 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +94 -0
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +106 -0
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +68 -0
- data/lib/active_model_serializers/adapter/json_api.rb +535 -0
- data/lib/active_model_serializers/adapter/null.rb +11 -0
- data/lib/active_model_serializers/adapter.rb +100 -0
- data/lib/active_model_serializers/callbacks.rb +57 -0
- data/lib/active_model_serializers/deprecate.rb +56 -0
- data/lib/active_model_serializers/deserialization.rb +17 -0
- data/lib/active_model_serializers/json_pointer.rb +16 -0
- data/lib/active_model_serializers/logging.rb +124 -0
- data/lib/active_model_serializers/lookup_chain.rb +82 -0
- data/lib/active_model_serializers/model.rb +132 -0
- data/lib/active_model_serializers/railtie.rb +62 -0
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
- data/lib/active_model_serializers/serializable_resource.rb +84 -0
- data/lib/active_model_serializers/serialization_context.rb +41 -0
- data/lib/active_model_serializers/test/schema.rb +140 -0
- data/lib/active_model_serializers/test/serializer.rb +127 -0
- data/lib/active_model_serializers/test.rb +9 -0
- data/lib/active_model_serializers.rb +58 -27
- data/lib/generators/rails/USAGE +6 -0
- data/lib/{active_model/serializer/generators → generators/rails}/resource_override.rb +1 -4
- data/lib/{active_model/serializer/generators/serializer → generators/rails}/serializer_generator.rb +4 -5
- data/lib/grape/active_model_serializers.rb +18 -0
- data/lib/grape/formatters/active_model_serializers.rb +34 -0
- data/lib/grape/helpers/active_model_serializers.rb +19 -0
- data/lib/tasks/rubocop.rake +60 -0
- metadata +248 -155
- data/CONTRIBUTING.md +0 -20
- data/DESIGN.textile +0 -586
- data/lib/action_controller/serialization_test_case.rb +0 -82
- data/lib/active_model/array_serializer.rb +0 -70
- data/lib/active_model/default_serializer.rb +0 -30
- data/lib/active_model/serializable/utils.rb +0 -18
- data/lib/active_model/serializable.rb +0 -61
- data/lib/active_model/serializer/association/has_many.rb +0 -41
- data/lib/active_model/serializer/association/has_one.rb +0 -27
- data/lib/active_model/serializer/config.rb +0 -33
- data/lib/active_model/serializer/generators/serializer/USAGE +0 -9
- data/lib/active_model/serializer/generators/serializer/scaffold_controller_generator.rb +0 -16
- data/lib/active_model/serializer/generators/serializer/templates/controller.rb +0 -93
- data/lib/active_model/serializer/railtie.rb +0 -24
- data/lib/active_model/serializer_support.rb +0 -7
- data/test/benchmark/app.rb +0 -60
- data/test/benchmark/benchmarking_support.rb +0 -67
- data/test/benchmark/bm_active_record.rb +0 -41
- data/test/benchmark/setup.rb +0 -75
- data/test/benchmark/tmp/miniprofiler/mp_timers_6eqewtfgrhitvq5gqm25 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_8083sx03hu72pxz1a4d0 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_fyz2gsml4z0ph9kpoy1c +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_hjry5rc32imd42oxoi48 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_m8fpoz2cvt3g9agz0bs3 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_p92m2drnj1i568u3sta0 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_qg52tpca3uesdfguee9i +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_s15t1a6mvxe0z7vjv790 +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_timers_x8kal3d17nfds6vp4kcj +0 -0
- data/test/benchmark/tmp/miniprofiler/mp_views_127.0.0.1 +0 -0
- data/test/fixtures/active_record.rb +0 -96
- data/test/fixtures/poro.rb +0 -255
- data/test/fixtures/template.html.erb +0 -1
- data/test/integration/action_controller/namespaced_serialization_test.rb +0 -105
- data/test/integration/action_controller/serialization_test.rb +0 -287
- data/test/integration/action_controller/serialization_test_case_test.rb +0 -71
- data/test/integration/active_record/active_record_test.rb +0 -94
- data/test/integration/generators/resource_generator_test.rb +0 -26
- data/test/integration/generators/scaffold_controller_generator_test.rb +0 -64
- data/test/integration/generators/serializer_generator_test.rb +0 -41
- data/test/test_app.rb +0 -18
- data/test/test_helper.rb +0 -31
- data/test/tmp/app/assets/javascripts/accounts.js +0 -2
- data/test/tmp/app/assets/stylesheets/accounts.css +0 -4
- data/test/tmp/app/controllers/accounts_controller.rb +0 -3
- data/test/tmp/app/helpers/accounts_helper.rb +0 -3
- data/test/tmp/app/serializers/account_serializer.rb +0 -4
- data/test/tmp/config/routes.rb +0 -2
- data/test/unit/active_model/array_serializer/except_test.rb +0 -18
- data/test/unit/active_model/array_serializer/key_format_test.rb +0 -18
- data/test/unit/active_model/array_serializer/meta_test.rb +0 -53
- data/test/unit/active_model/array_serializer/only_test.rb +0 -18
- data/test/unit/active_model/array_serializer/options_test.rb +0 -16
- data/test/unit/active_model/array_serializer/root_test.rb +0 -102
- data/test/unit/active_model/array_serializer/scope_test.rb +0 -24
- data/test/unit/active_model/array_serializer/serialization_test.rb +0 -239
- data/test/unit/active_model/default_serializer_test.rb +0 -13
- data/test/unit/active_model/serializer/associations/build_serializer_test.rb +0 -36
- data/test/unit/active_model/serializer/associations_test.rb +0 -49
- data/test/unit/active_model/serializer/attributes_test.rb +0 -57
- data/test/unit/active_model/serializer/config_test.rb +0 -91
- data/test/unit/active_model/serializer/filter_test.rb +0 -69
- data/test/unit/active_model/serializer/has_many_polymorphic_test.rb +0 -189
- data/test/unit/active_model/serializer/has_many_test.rb +0 -265
- data/test/unit/active_model/serializer/has_one_and_has_many_test.rb +0 -27
- data/test/unit/active_model/serializer/has_one_polymorphic_test.rb +0 -196
- data/test/unit/active_model/serializer/has_one_test.rb +0 -253
- data/test/unit/active_model/serializer/key_format_test.rb +0 -25
- data/test/unit/active_model/serializer/meta_test.rb +0 -39
- data/test/unit/active_model/serializer/options_test.rb +0 -42
- data/test/unit/active_model/serializer/root_test.rb +0 -117
- data/test/unit/active_model/serializer/scope_test.rb +0 -49
- data/test/unit/active_model/serializer/url_helpers_test.rb +0 -36
- data/test/unit/active_model/serilizable_test.rb +0 -50
- /data/lib/{active_model/serializer/generators/serializer/templates/serializer.rb → generators/rails/templates/serializer.rb.erb} +0 -0
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class KeyFormatTest < Minitest::Test
|
6
|
-
def test_array_serializer_pass_options_to_items_serializers
|
7
|
-
array = [WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'}),
|
8
|
-
WebLog.new({ name: 'Name 2', display_name: 'Display Name 2'})]
|
9
|
-
serializer = ArraySerializer.new(array, key_format: :lower_camel)
|
10
|
-
|
11
|
-
expected = [{ name: 'Name 1', displayName: 'Display Name 1' },
|
12
|
-
{ name: 'Name 2', displayName: 'Display Name 2' }]
|
13
|
-
|
14
|
-
assert_equal expected, serializer.serializable_array
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'active_model/serializer'
|
3
|
-
|
4
|
-
module ActiveModel
|
5
|
-
class ArraySerializer
|
6
|
-
class MetaTest < Minitest::Test
|
7
|
-
def setup
|
8
|
-
@profile1 = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
9
|
-
@profile2 = Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })
|
10
|
-
@serializer = ArraySerializer.new([@profile1, @profile2], root: 'profiles')
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_meta
|
14
|
-
@serializer.meta = { total: 10 }
|
15
|
-
|
16
|
-
assert_equal({
|
17
|
-
'profiles' => [
|
18
|
-
{
|
19
|
-
name: 'Name 1',
|
20
|
-
description: 'Description 1'
|
21
|
-
}, {
|
22
|
-
name: 'Name 2',
|
23
|
-
description: 'Description 2'
|
24
|
-
}
|
25
|
-
],
|
26
|
-
meta: {
|
27
|
-
total: 10
|
28
|
-
}
|
29
|
-
}, @serializer.as_json)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_meta_using_meta_key
|
33
|
-
@serializer.meta_key = :my_meta
|
34
|
-
@serializer.meta = { total: 10 }
|
35
|
-
|
36
|
-
assert_equal({
|
37
|
-
'profiles' => [
|
38
|
-
{
|
39
|
-
name: 'Name 1',
|
40
|
-
description: 'Description 1'
|
41
|
-
}, {
|
42
|
-
name: 'Name 2',
|
43
|
-
description: 'Description 2'
|
44
|
-
}
|
45
|
-
],
|
46
|
-
my_meta: {
|
47
|
-
total: 10
|
48
|
-
}
|
49
|
-
}, @serializer.as_json)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class OnlyTest < Minitest::Test
|
6
|
-
def test_array_serializer_pass_only_to_items_serializers
|
7
|
-
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
|
8
|
-
Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
|
9
|
-
serializer = ArraySerializer.new(array, only: [:name])
|
10
|
-
|
11
|
-
expected = [{ name: 'Name 1' },
|
12
|
-
{ name: 'Name 2' }]
|
13
|
-
|
14
|
-
assert_equal expected, serializer.serializable_array
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class OptionsTest < Minitest::Test
|
6
|
-
def test_custom_options_are_accessible_from_serializer
|
7
|
-
|
8
|
-
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
|
9
|
-
Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
|
10
|
-
serializer = ArraySerializer.new(array, only: [:name], context: {foo: :bar})
|
11
|
-
|
12
|
-
assert_equal({foo: :bar}, serializer.context)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class RootAsOptionTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
@old_root = ArraySerializer._root
|
8
|
-
@profile1 = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
9
|
-
@profile2 = Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })
|
10
|
-
@serializer = ArraySerializer.new([@profile1, @profile2], root: :initialize)
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
ArraySerializer._root = @old_root
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_root_is_not_displayed_using_serializable_array
|
18
|
-
assert_equal([
|
19
|
-
{ name: 'Name 1', description: 'Description 1' },
|
20
|
-
{ name: 'Name 2', description: 'Description 2' }
|
21
|
-
], @serializer.serializable_array)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_root_using_as_json
|
25
|
-
assert_equal({
|
26
|
-
initialize: [
|
27
|
-
{ name: 'Name 1', description: 'Description 1' },
|
28
|
-
{ name: 'Name 2', description: 'Description 2' }
|
29
|
-
]
|
30
|
-
}, @serializer.as_json)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_root_as_argument_takes_precedence
|
34
|
-
assert_equal({
|
35
|
-
argument: [
|
36
|
-
{ name: 'Name 1', description: 'Description 1' },
|
37
|
-
{ name: 'Name 2', description: 'Description 2' }
|
38
|
-
]
|
39
|
-
}, @serializer.as_json(root: :argument))
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_using_false_root_in_initialize_takes_precedence
|
43
|
-
ArraySerializer._root = 'root'
|
44
|
-
@serializer = ArraySerializer.new([@profile1, @profile2], root: false)
|
45
|
-
|
46
|
-
assert_equal([
|
47
|
-
{ name: 'Name 1', description: 'Description 1' },
|
48
|
-
{ name: 'Name 2', description: 'Description 2' }
|
49
|
-
], @serializer.as_json)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class RootInSerializerTest < Minitest::Test
|
54
|
-
def setup
|
55
|
-
@old_root = ArraySerializer._root
|
56
|
-
ArraySerializer._root = :in_serializer
|
57
|
-
@profile1 = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
58
|
-
@profile2 = Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })
|
59
|
-
@serializer = ArraySerializer.new([@profile1, @profile2])
|
60
|
-
@rooted_serializer = ArraySerializer.new([@profile1, @profile2], root: :initialize)
|
61
|
-
end
|
62
|
-
|
63
|
-
def teardown
|
64
|
-
ArraySerializer._root = @old_root
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_root_is_not_displayed_using_serializable_hash
|
68
|
-
assert_equal([
|
69
|
-
{ name: 'Name 1', description: 'Description 1' },
|
70
|
-
{ name: 'Name 2', description: 'Description 2' }
|
71
|
-
], @serializer.serializable_array)
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_root_using_as_json
|
75
|
-
assert_equal({
|
76
|
-
in_serializer: [
|
77
|
-
{ name: 'Name 1', description: 'Description 1' },
|
78
|
-
{ name: 'Name 2', description: 'Description 2' }
|
79
|
-
]
|
80
|
-
}, @serializer.as_json)
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_root_in_initializer_takes_precedence
|
84
|
-
assert_equal({
|
85
|
-
initialize: [
|
86
|
-
{ name: 'Name 1', description: 'Description 1' },
|
87
|
-
{ name: 'Name 2', description: 'Description 2' }
|
88
|
-
]
|
89
|
-
}, @rooted_serializer.as_json)
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_root_as_argument_takes_precedence
|
93
|
-
assert_equal({
|
94
|
-
argument: [
|
95
|
-
{ name: 'Name 1', description: 'Description 1' },
|
96
|
-
{ name: 'Name 2', description: 'Description 2' }
|
97
|
-
]
|
98
|
-
}, @rooted_serializer.as_json(root: :argument))
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class ScopeTest < Minitest::Test
|
6
|
-
def test_array_serializer_pass_options_to_items_serializers
|
7
|
-
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
|
8
|
-
Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
|
9
|
-
serializer = ArraySerializer.new(array, scope: current_user)
|
10
|
-
|
11
|
-
expected = [{ name: 'Name 1', description: 'Description 1 - user' },
|
12
|
-
{ name: 'Name 2', description: 'Description 2 - user' }]
|
13
|
-
|
14
|
-
assert_equal expected, serializer.serializable_array
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def current_user
|
20
|
-
'user'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,239 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class ArraySerializer
|
5
|
-
class BasicObjectsSerializationTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
array = [1, 2, 3]
|
8
|
-
@serializer = Serializer.serializer_for(array).new(array)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_serializer_for_array_returns_appropriate_type
|
12
|
-
assert_kind_of ActiveModel::ArraySerializer, @serializer
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_array_serializer_serializes_simple_objects
|
16
|
-
assert_equal [1, 2, 3], @serializer.serializable_array
|
17
|
-
assert_equal [1, 2, 3], @serializer.as_json
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class CustomArraySerializerSupport < Minitest::Test
|
22
|
-
def setup
|
23
|
-
Object.const_set(:ArraySerializer, Class.new)
|
24
|
-
|
25
|
-
array = [1, 2, 3]
|
26
|
-
@serializer_class = Serializer.serializer_for(array)
|
27
|
-
end
|
28
|
-
|
29
|
-
def teardown
|
30
|
-
Object.send(:remove_const, :ArraySerializer)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_serializer_for_array_returns_appropriate_type
|
34
|
-
assert_equal ::ArraySerializer, @serializer_class
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class CustomSerializerClassTest < Minitest::Test
|
39
|
-
def setup
|
40
|
-
Object.const_set(:CustomSerializer, Class.new)
|
41
|
-
end
|
42
|
-
|
43
|
-
def teardown
|
44
|
-
Object.send(:remove_const, :CustomSerializer)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_serializer_for_array_returns_appropriate_type
|
48
|
-
object = {}
|
49
|
-
def object.serializer_class; CustomSerializer; end
|
50
|
-
|
51
|
-
assert_equal CustomSerializer, Serializer.serializer_for(object)
|
52
|
-
assert_nil Serializer.serializer_for('Custom')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
class ModelSerializationNamespaceTest < Minitest::Test
|
57
|
-
def test_namespace
|
58
|
-
test1 = TestNamespace2::Test.new(name: 'Test 1', email: 'test1@test.com', gender: 'M')
|
59
|
-
test2 = TestNamespace2::Test.new(name: 'Test 2', email: 'test2@test.com', gender: 'M')
|
60
|
-
sub_test1 = TestNamespace2::SubTest.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
|
61
|
-
sub_test2 = TestNamespace2::SubTest.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2')
|
62
|
-
test1.sub_test = sub_test1
|
63
|
-
test2.sub_test = sub_test2
|
64
|
-
|
65
|
-
array = [test1, test2]
|
66
|
-
serializer = ArraySerializer.new(array)
|
67
|
-
|
68
|
-
expected = [
|
69
|
-
{ name: 'Test 1', email: 'test1@test.com', sub_test: { name: 'Name 1', description: 'Description 1' } },
|
70
|
-
{ name: 'Test 2', email: 'test2@test.com', sub_test: { name: 'Name 2', description: 'Description 2' } }
|
71
|
-
]
|
72
|
-
|
73
|
-
assert_equal expected, serializer.serializable_array
|
74
|
-
assert_equal expected, serializer.as_json
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
class ModelSerializationTest < Minitest::Test
|
79
|
-
def test_array_serializer_serializes_models
|
80
|
-
array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
|
81
|
-
Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
|
82
|
-
serializer = ArraySerializer.new(array)
|
83
|
-
|
84
|
-
expected = [{ name: 'Name 1', description: 'Description 1' },
|
85
|
-
{ name: 'Name 2', description: 'Description 2' }]
|
86
|
-
|
87
|
-
assert_equal expected, serializer.serializable_array
|
88
|
-
assert_equal expected, serializer.as_json
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_array_serializers_each_serializer
|
92
|
-
array = [::Model.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
|
93
|
-
::Model.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
|
94
|
-
serializer = ArraySerializer.new(array, each_serializer: ProfileSerializer)
|
95
|
-
|
96
|
-
expected = [{ name: 'Name 1', description: 'Description 1' },
|
97
|
-
{ name: 'Name 2', description: 'Description 2' }]
|
98
|
-
|
99
|
-
assert_equal expected, serializer.serializable_array
|
100
|
-
assert_equal expected, serializer.as_json
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_associated_objects_of_multiple_instances_embedded_in_root
|
104
|
-
@association = PostSerializer._associations[:comments]
|
105
|
-
@old_association = @association.dup
|
106
|
-
|
107
|
-
@association.embed = :ids
|
108
|
-
@association.embed_in_root = true
|
109
|
-
|
110
|
-
@post1 = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
|
111
|
-
@post2 = Post.new({ title: 'Title 2', body: 'Body 2', date: '1/1/2000' })
|
112
|
-
|
113
|
-
class << @post2
|
114
|
-
attr_writer :comments
|
115
|
-
end
|
116
|
-
|
117
|
-
@post2.comments = [
|
118
|
-
Comment.new(content: 'C3'),
|
119
|
-
Comment.new(content: 'C4')
|
120
|
-
]
|
121
|
-
|
122
|
-
@serializer = ArraySerializer.new([@post1, @post2], root: :posts)
|
123
|
-
assert_equal({
|
124
|
-
posts: [
|
125
|
-
{title: "Title 1", body: "Body 1", "comment_ids" => @post1.comments.map(&:object_id) },
|
126
|
-
{title: "Title 2", body: "Body 2", "comment_ids" => @post2.comments.map(&:object_id) }
|
127
|
-
],
|
128
|
-
'comments' => [
|
129
|
-
{content: "C1"},
|
130
|
-
{content: "C2"},
|
131
|
-
{content: "C3"},
|
132
|
-
{content: "C4"}
|
133
|
-
]
|
134
|
-
}, @serializer.as_json)
|
135
|
-
ensure
|
136
|
-
PostSerializer._associations[:comments] = @old_association
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_embed_object_for_has_one_association_with_nil_value
|
140
|
-
@association = UserSerializer._associations[:profile]
|
141
|
-
@old_association = @association.dup
|
142
|
-
|
143
|
-
@association.embed = :objects
|
144
|
-
|
145
|
-
@user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
|
146
|
-
@user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
|
147
|
-
|
148
|
-
class << @user1
|
149
|
-
def profile
|
150
|
-
nil
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
class << @user2
|
155
|
-
def profile
|
156
|
-
@profile ||= Profile.new(name: 'Name 1', description: 'Desc 1')
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
@serializer = ArraySerializer.new([@user1, @user2]) #, root: :posts)
|
161
|
-
assert_equal([
|
162
|
-
{ name: "User 1", email: "email1@server.com", profile: nil },
|
163
|
-
{ name: "User 2", email: "email2@server.com", profile: { name: 'Name 1', description: 'Desc 1' } }
|
164
|
-
], @serializer.as_json)
|
165
|
-
ensure
|
166
|
-
UserSerializer._associations[:profile] = @old_association
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_embed_object_in_root_for_has_one_association_with_nil_value
|
170
|
-
@association = UserSerializer._associations[:profile]
|
171
|
-
@old_association = @association.dup
|
172
|
-
|
173
|
-
@association.embed = :ids
|
174
|
-
@association.embed_in_root = true
|
175
|
-
|
176
|
-
@user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
|
177
|
-
@user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
|
178
|
-
|
179
|
-
class << @user1
|
180
|
-
def profile
|
181
|
-
nil
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
class << @user2
|
186
|
-
def profile
|
187
|
-
@profile ||= Profile.new(name: 'Name 1', description: 'Desc 1')
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
@serializer = ArraySerializer.new([@user1, @user2], root: :users)
|
192
|
-
assert_equal({
|
193
|
-
users: [
|
194
|
-
{ name: "User 1", email: "email1@server.com", 'profile_id' => nil },
|
195
|
-
{ name: "User 2", email: "email2@server.com", 'profile_id' => @user2.profile.object_id }
|
196
|
-
],
|
197
|
-
'profiles' => [
|
198
|
-
{ name: 'Name 1', description: 'Desc 1' }
|
199
|
-
]
|
200
|
-
}, @serializer.as_json)
|
201
|
-
ensure
|
202
|
-
UserSerializer._associations[:profile] = @old_association
|
203
|
-
end
|
204
|
-
|
205
|
-
def test_embed_object_in_root_for_has_one_association_with_all_nil_values
|
206
|
-
@association = UserSerializer._associations[:profile]
|
207
|
-
@old_association = @association.dup
|
208
|
-
|
209
|
-
@association.embed = :ids
|
210
|
-
@association.embed_in_root = true
|
211
|
-
|
212
|
-
@user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
|
213
|
-
@user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
|
214
|
-
|
215
|
-
class << @user1
|
216
|
-
def profile
|
217
|
-
nil
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
class << @user2
|
222
|
-
def profile
|
223
|
-
nil
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
@serializer = ArraySerializer.new([@user1, @user2], root: :users)
|
228
|
-
assert_equal({
|
229
|
-
users: [
|
230
|
-
{ name: "User 1", email: "email1@server.com", 'profile_id' => nil },
|
231
|
-
{ name: "User 2", email: "email2@server.com", 'profile_id' => nil }
|
232
|
-
]
|
233
|
-
}, @serializer.as_json)
|
234
|
-
ensure
|
235
|
-
UserSerializer._associations[:profile] = @old_association
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class DefaultSerializer
|
5
|
-
class Test < Minitest::Test
|
6
|
-
def test_serialize_objects
|
7
|
-
assert_nil(DefaultSerializer.new(nil).serializable_object)
|
8
|
-
assert_equal(1, DefaultSerializer.new(1).serializable_object)
|
9
|
-
assert_equal('hi', DefaultSerializer.new('hi').serializable_object)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class Serializer
|
5
|
-
class Association
|
6
|
-
class BuildSerializerTest < Minitest::Test
|
7
|
-
def setup
|
8
|
-
@association = Association::HasOne.new('post', serializer: PostSerializer)
|
9
|
-
@post = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
|
10
|
-
@user = User.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_build_serializer_for_array_called_twice
|
14
|
-
2.times do
|
15
|
-
serializer = @association.build_serializer(@post)
|
16
|
-
assert_instance_of(PostSerializer, serializer)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_build_serializer_from_in_a_namespace
|
21
|
-
assoc = Association::HasOne.new('profile')
|
22
|
-
serializer = TestNamespace::UserSerializer.new(@user).build_serializer(assoc)
|
23
|
-
|
24
|
-
assert_instance_of(TestNamespace::ProfileSerializer, serializer)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_build_serializer_with_prefix
|
28
|
-
assoc = Association::HasOne.new('profile', prefix: :short)
|
29
|
-
serializer = UserSerializer.new(@user).build_serializer(assoc)
|
30
|
-
|
31
|
-
assert_instance_of(ShortProfileSerializer, serializer)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class Serializer
|
5
|
-
class AssociationsTest < Minitest::Test
|
6
|
-
def test_associations_inheritance
|
7
|
-
inherited_serializer_klass = Class.new(PostSerializer) do
|
8
|
-
has_many :users
|
9
|
-
end
|
10
|
-
another_inherited_serializer_klass = Class.new(PostSerializer)
|
11
|
-
|
12
|
-
assert_equal([:comments, :users],
|
13
|
-
inherited_serializer_klass._associations.keys)
|
14
|
-
assert_equal([:comments],
|
15
|
-
another_inherited_serializer_klass._associations.keys)
|
16
|
-
end
|
17
|
-
def test_multiple_nested_associations
|
18
|
-
parent = SelfReferencingUserParent.new(name: "The Parent")
|
19
|
-
child = SelfReferencingUser.new(name: "The child", parent: parent)
|
20
|
-
self_referencing_user_serializer = SelfReferencingUserSerializer.new(child)
|
21
|
-
result = self_referencing_user_serializer.as_json
|
22
|
-
expected_result = {
|
23
|
-
"self_referencing_user"=>{
|
24
|
-
:name=>"The child",
|
25
|
-
"type_id"=>child.type.object_id,
|
26
|
-
"parent_id"=>child.parent.object_id
|
27
|
-
|
28
|
-
},
|
29
|
-
"types"=>[
|
30
|
-
{
|
31
|
-
:name=>"N1",
|
32
|
-
},
|
33
|
-
{
|
34
|
-
:name=>"N2",
|
35
|
-
}
|
36
|
-
],
|
37
|
-
"parents"=>[
|
38
|
-
{
|
39
|
-
:name=>"N1",
|
40
|
-
"type_id"=>child.parent.type.object_id,
|
41
|
-
"parent_id"=>nil
|
42
|
-
}
|
43
|
-
]
|
44
|
-
}
|
45
|
-
assert_equal(expected_result, result)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module ActiveModel
|
4
|
-
class Serializer
|
5
|
-
class AttributesTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
8
|
-
@profile_serializer = ProfileSerializer.new(@profile)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_attributes_definition
|
12
|
-
assert_equal([:name, :description],
|
13
|
-
@profile_serializer.class._attributes)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_attributes_serialization_using_serializable_hash
|
17
|
-
assert_equal({
|
18
|
-
name: 'Name 1', description: 'Description 1'
|
19
|
-
}, @profile_serializer.serializable_hash)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_attributes_serialization_using_as_json
|
23
|
-
assert_equal({
|
24
|
-
'profile' => { name: 'Name 1', description: 'Description 1' }
|
25
|
-
}, @profile_serializer.as_json)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_attributes_inheritance
|
29
|
-
inherited_serializer_klass = Class.new(ProfileSerializer) do
|
30
|
-
attributes :comments
|
31
|
-
end
|
32
|
-
another_inherited_serializer_klass = Class.new(ProfileSerializer)
|
33
|
-
|
34
|
-
assert_equal([:name, :description, :comments],
|
35
|
-
inherited_serializer_klass._attributes)
|
36
|
-
assert_equal([:name, :description],
|
37
|
-
another_inherited_serializer_klass._attributes)
|
38
|
-
end
|
39
|
-
|
40
|
-
def tests_query_attributes_strip_question_mark
|
41
|
-
model = Class.new(::Model) do
|
42
|
-
def strip?
|
43
|
-
true
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
serializer = Class.new(ActiveModel::Serializer) do
|
48
|
-
attributes :strip?
|
49
|
-
end
|
50
|
-
|
51
|
-
actual = serializer.new(model.new).as_json
|
52
|
-
|
53
|
-
assert_equal({ strip: true }, actual)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|