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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +638 -82
  3. data/MIT-LICENSE +3 -2
  4. data/README.md +194 -846
  5. data/lib/action_controller/serialization.rb +34 -74
  6. data/lib/active_model/serializable_resource.rb +13 -0
  7. data/lib/active_model/serializer/adapter/attributes.rb +17 -0
  8. data/lib/active_model/serializer/adapter/base.rb +20 -0
  9. data/lib/active_model/serializer/adapter/json.rb +17 -0
  10. data/lib/active_model/serializer/adapter/json_api.rb +17 -0
  11. data/lib/active_model/serializer/adapter/null.rb +17 -0
  12. data/lib/active_model/serializer/adapter.rb +26 -0
  13. data/lib/active_model/serializer/array_serializer.rb +14 -0
  14. data/lib/active_model/serializer/association.rb +53 -38
  15. data/lib/active_model/serializer/attribute.rb +27 -0
  16. data/lib/active_model/serializer/belongs_to_reflection.rb +13 -0
  17. data/lib/active_model/serializer/collection_serializer.rb +99 -0
  18. data/lib/active_model/serializer/concerns/caching.rb +305 -0
  19. data/lib/active_model/serializer/error_serializer.rb +16 -0
  20. data/lib/active_model/serializer/errors_serializer.rb +34 -0
  21. data/lib/active_model/serializer/field.rb +92 -0
  22. data/lib/active_model/serializer/fieldset.rb +33 -0
  23. data/lib/active_model/serializer/has_many_reflection.rb +12 -0
  24. data/lib/active_model/serializer/has_one_reflection.rb +9 -0
  25. data/lib/active_model/serializer/lazy_association.rb +99 -0
  26. data/lib/active_model/serializer/link.rb +23 -0
  27. data/lib/active_model/serializer/lint.rb +152 -0
  28. data/lib/active_model/serializer/null.rb +19 -0
  29. data/lib/active_model/serializer/reflection.rb +212 -0
  30. data/lib/active_model/serializer/version.rb +1 -1
  31. data/lib/active_model/serializer.rb +361 -263
  32. data/lib/active_model_serializers/adapter/attributes.rb +36 -0
  33. data/lib/active_model_serializers/adapter/base.rb +85 -0
  34. data/lib/active_model_serializers/adapter/json.rb +23 -0
  35. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +215 -0
  36. data/lib/active_model_serializers/adapter/json_api/error.rb +98 -0
  37. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +51 -0
  38. data/lib/active_model_serializers/adapter/json_api/link.rb +85 -0
  39. data/lib/active_model_serializers/adapter/json_api/meta.rb +39 -0
  40. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +94 -0
  41. data/lib/active_model_serializers/adapter/json_api/relationship.rb +106 -0
  42. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +68 -0
  43. data/lib/active_model_serializers/adapter/json_api.rb +535 -0
  44. data/lib/active_model_serializers/adapter/null.rb +11 -0
  45. data/lib/active_model_serializers/adapter.rb +100 -0
  46. data/lib/active_model_serializers/callbacks.rb +57 -0
  47. data/lib/active_model_serializers/deprecate.rb +56 -0
  48. data/lib/active_model_serializers/deserialization.rb +17 -0
  49. data/lib/active_model_serializers/json_pointer.rb +16 -0
  50. data/lib/active_model_serializers/logging.rb +124 -0
  51. data/lib/active_model_serializers/lookup_chain.rb +82 -0
  52. data/lib/active_model_serializers/model.rb +132 -0
  53. data/lib/active_model_serializers/railtie.rb +62 -0
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
  55. data/lib/active_model_serializers/serializable_resource.rb +84 -0
  56. data/lib/active_model_serializers/serialization_context.rb +41 -0
  57. data/lib/active_model_serializers/test/schema.rb +140 -0
  58. data/lib/active_model_serializers/test/serializer.rb +127 -0
  59. data/lib/active_model_serializers/test.rb +9 -0
  60. data/lib/active_model_serializers.rb +58 -27
  61. data/lib/generators/rails/USAGE +6 -0
  62. data/lib/{active_model/serializer/generators → generators/rails}/resource_override.rb +1 -4
  63. data/lib/{active_model/serializer/generators/serializer → generators/rails}/serializer_generator.rb +4 -5
  64. data/lib/grape/active_model_serializers.rb +18 -0
  65. data/lib/grape/formatters/active_model_serializers.rb +34 -0
  66. data/lib/grape/helpers/active_model_serializers.rb +19 -0
  67. data/lib/tasks/rubocop.rake +60 -0
  68. metadata +248 -155
  69. data/CONTRIBUTING.md +0 -20
  70. data/DESIGN.textile +0 -586
  71. data/lib/action_controller/serialization_test_case.rb +0 -82
  72. data/lib/active_model/array_serializer.rb +0 -70
  73. data/lib/active_model/default_serializer.rb +0 -30
  74. data/lib/active_model/serializable/utils.rb +0 -18
  75. data/lib/active_model/serializable.rb +0 -61
  76. data/lib/active_model/serializer/association/has_many.rb +0 -41
  77. data/lib/active_model/serializer/association/has_one.rb +0 -27
  78. data/lib/active_model/serializer/config.rb +0 -33
  79. data/lib/active_model/serializer/generators/serializer/USAGE +0 -9
  80. data/lib/active_model/serializer/generators/serializer/scaffold_controller_generator.rb +0 -16
  81. data/lib/active_model/serializer/generators/serializer/templates/controller.rb +0 -93
  82. data/lib/active_model/serializer/railtie.rb +0 -24
  83. data/lib/active_model/serializer_support.rb +0 -7
  84. data/test/benchmark/app.rb +0 -60
  85. data/test/benchmark/benchmarking_support.rb +0 -67
  86. data/test/benchmark/bm_active_record.rb +0 -41
  87. data/test/benchmark/setup.rb +0 -75
  88. data/test/benchmark/tmp/miniprofiler/mp_timers_6eqewtfgrhitvq5gqm25 +0 -0
  89. data/test/benchmark/tmp/miniprofiler/mp_timers_8083sx03hu72pxz1a4d0 +0 -0
  90. data/test/benchmark/tmp/miniprofiler/mp_timers_fyz2gsml4z0ph9kpoy1c +0 -0
  91. data/test/benchmark/tmp/miniprofiler/mp_timers_hjry5rc32imd42oxoi48 +0 -0
  92. data/test/benchmark/tmp/miniprofiler/mp_timers_m8fpoz2cvt3g9agz0bs3 +0 -0
  93. data/test/benchmark/tmp/miniprofiler/mp_timers_p92m2drnj1i568u3sta0 +0 -0
  94. data/test/benchmark/tmp/miniprofiler/mp_timers_qg52tpca3uesdfguee9i +0 -0
  95. data/test/benchmark/tmp/miniprofiler/mp_timers_s15t1a6mvxe0z7vjv790 +0 -0
  96. data/test/benchmark/tmp/miniprofiler/mp_timers_x8kal3d17nfds6vp4kcj +0 -0
  97. data/test/benchmark/tmp/miniprofiler/mp_views_127.0.0.1 +0 -0
  98. data/test/fixtures/active_record.rb +0 -96
  99. data/test/fixtures/poro.rb +0 -255
  100. data/test/fixtures/template.html.erb +0 -1
  101. data/test/integration/action_controller/namespaced_serialization_test.rb +0 -105
  102. data/test/integration/action_controller/serialization_test.rb +0 -287
  103. data/test/integration/action_controller/serialization_test_case_test.rb +0 -71
  104. data/test/integration/active_record/active_record_test.rb +0 -94
  105. data/test/integration/generators/resource_generator_test.rb +0 -26
  106. data/test/integration/generators/scaffold_controller_generator_test.rb +0 -64
  107. data/test/integration/generators/serializer_generator_test.rb +0 -41
  108. data/test/test_app.rb +0 -18
  109. data/test/test_helper.rb +0 -31
  110. data/test/tmp/app/assets/javascripts/accounts.js +0 -2
  111. data/test/tmp/app/assets/stylesheets/accounts.css +0 -4
  112. data/test/tmp/app/controllers/accounts_controller.rb +0 -3
  113. data/test/tmp/app/helpers/accounts_helper.rb +0 -3
  114. data/test/tmp/app/serializers/account_serializer.rb +0 -4
  115. data/test/tmp/config/routes.rb +0 -2
  116. data/test/unit/active_model/array_serializer/except_test.rb +0 -18
  117. data/test/unit/active_model/array_serializer/key_format_test.rb +0 -18
  118. data/test/unit/active_model/array_serializer/meta_test.rb +0 -53
  119. data/test/unit/active_model/array_serializer/only_test.rb +0 -18
  120. data/test/unit/active_model/array_serializer/options_test.rb +0 -16
  121. data/test/unit/active_model/array_serializer/root_test.rb +0 -102
  122. data/test/unit/active_model/array_serializer/scope_test.rb +0 -24
  123. data/test/unit/active_model/array_serializer/serialization_test.rb +0 -239
  124. data/test/unit/active_model/default_serializer_test.rb +0 -13
  125. data/test/unit/active_model/serializer/associations/build_serializer_test.rb +0 -36
  126. data/test/unit/active_model/serializer/associations_test.rb +0 -49
  127. data/test/unit/active_model/serializer/attributes_test.rb +0 -57
  128. data/test/unit/active_model/serializer/config_test.rb +0 -91
  129. data/test/unit/active_model/serializer/filter_test.rb +0 -69
  130. data/test/unit/active_model/serializer/has_many_polymorphic_test.rb +0 -189
  131. data/test/unit/active_model/serializer/has_many_test.rb +0 -265
  132. data/test/unit/active_model/serializer/has_one_and_has_many_test.rb +0 -27
  133. data/test/unit/active_model/serializer/has_one_polymorphic_test.rb +0 -196
  134. data/test/unit/active_model/serializer/has_one_test.rb +0 -253
  135. data/test/unit/active_model/serializer/key_format_test.rb +0 -25
  136. data/test/unit/active_model/serializer/meta_test.rb +0 -39
  137. data/test/unit/active_model/serializer/options_test.rb +0 -42
  138. data/test/unit/active_model/serializer/root_test.rb +0 -117
  139. data/test/unit/active_model/serializer/scope_test.rb +0 -49
  140. data/test/unit/active_model/serializer/url_helpers_test.rb +0 -36
  141. data/test/unit/active_model/serilizable_test.rb +0 -50
  142. /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