active_model_serializers 0.9.8 → 0.10.13

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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +622 -59
  3. data/MIT-LICENSE +3 -2
  4. data/README.md +194 -846
  5. data/lib/action_controller/serialization.rb +35 -66
  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 +55 -40
  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 +3 -1
  31. data/lib/active_model/serializer.rb +363 -254
  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/caching.rb +1 -0
  53. data/lib/active_model_serializers/model.rb +132 -0
  54. data/lib/active_model_serializers/railtie.rb +52 -0
  55. data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
  56. data/lib/active_model_serializers/serializable_resource.rb +84 -0
  57. data/lib/active_model_serializers/serialization_context.rb +41 -0
  58. data/lib/active_model_serializers/test/schema.rb +140 -0
  59. data/lib/active_model_serializers/test/serializer.rb +127 -0
  60. data/lib/active_model_serializers/test.rb +9 -0
  61. data/lib/active_model_serializers.rb +60 -17
  62. data/lib/generators/rails/USAGE +6 -0
  63. data/lib/{active_model/serializer/generators → generators/rails}/resource_override.rb +3 -4
  64. data/lib/{active_model/serializer/generators/serializer → generators/rails}/serializer_generator.rb +6 -5
  65. data/lib/{active_model/serializer/generators/serializer/templates/serializer.rb → generators/rails/templates/serializer.rb.erb} +0 -0
  66. data/lib/grape/active_model_serializers.rb +18 -0
  67. data/lib/grape/formatters/active_model_serializers.rb +34 -0
  68. data/lib/grape/helpers/active_model_serializers.rb +19 -0
  69. data/lib/tasks/rubocop.rake +55 -0
  70. metadata +272 -155
  71. data/CONTRIBUTING.md +0 -20
  72. data/DESIGN.textile +0 -586
  73. data/lib/action_controller/serialization_test_case.rb +0 -79
  74. data/lib/active_model/array_serializer.rb +0 -68
  75. data/lib/active_model/default_serializer.rb +0 -28
  76. data/lib/active_model/serializable/utils.rb +0 -16
  77. data/lib/active_model/serializable.rb +0 -59
  78. data/lib/active_model/serializer/association/has_many.rb +0 -39
  79. data/lib/active_model/serializer/association/has_one.rb +0 -25
  80. data/lib/active_model/serializer/config.rb +0 -31
  81. data/lib/active_model/serializer/generators/serializer/USAGE +0 -9
  82. data/lib/active_model/serializer/generators/serializer/scaffold_controller_generator.rb +0 -14
  83. data/lib/active_model/serializer/generators/serializer/templates/controller.rb +0 -93
  84. data/lib/active_model/serializer/railtie.rb +0 -22
  85. data/lib/active_model/serializer_support.rb +0 -5
  86. data/test/benchmark/app.rb +0 -60
  87. data/test/benchmark/benchmarking_support.rb +0 -67
  88. data/test/benchmark/bm_active_record.rb +0 -41
  89. data/test/benchmark/setup.rb +0 -75
  90. data/test/benchmark/tmp/miniprofiler/mp_timers_6eqewtfgrhitvq5gqm25 +0 -0
  91. data/test/benchmark/tmp/miniprofiler/mp_timers_8083sx03hu72pxz1a4d0 +0 -0
  92. data/test/benchmark/tmp/miniprofiler/mp_timers_fyz2gsml4z0ph9kpoy1c +0 -0
  93. data/test/benchmark/tmp/miniprofiler/mp_timers_hjry5rc32imd42oxoi48 +0 -0
  94. data/test/benchmark/tmp/miniprofiler/mp_timers_m8fpoz2cvt3g9agz0bs3 +0 -0
  95. data/test/benchmark/tmp/miniprofiler/mp_timers_p92m2drnj1i568u3sta0 +0 -0
  96. data/test/benchmark/tmp/miniprofiler/mp_timers_qg52tpca3uesdfguee9i +0 -0
  97. data/test/benchmark/tmp/miniprofiler/mp_timers_s15t1a6mvxe0z7vjv790 +0 -0
  98. data/test/benchmark/tmp/miniprofiler/mp_timers_x8kal3d17nfds6vp4kcj +0 -0
  99. data/test/benchmark/tmp/miniprofiler/mp_views_127.0.0.1 +0 -0
  100. data/test/fixtures/active_record.rb +0 -96
  101. data/test/fixtures/poro.rb +0 -223
  102. data/test/fixtures/template.html.erb +0 -1
  103. data/test/integration/action_controller/namespaced_serialization_test.rb +0 -105
  104. data/test/integration/action_controller/serialization_test.rb +0 -287
  105. data/test/integration/action_controller/serialization_test_case_test.rb +0 -71
  106. data/test/integration/active_record/active_record_test.rb +0 -94
  107. data/test/integration/generators/resource_generator_test.rb +0 -26
  108. data/test/integration/generators/scaffold_controller_generator_test.rb +0 -64
  109. data/test/integration/generators/serializer_generator_test.rb +0 -41
  110. data/test/test_app.rb +0 -14
  111. data/test/test_helper.rb +0 -24
  112. data/test/tmp/app/assets/javascripts/accounts.js +0 -2
  113. data/test/tmp/app/assets/stylesheets/accounts.css +0 -4
  114. data/test/tmp/app/controllers/accounts_controller.rb +0 -2
  115. data/test/tmp/app/helpers/accounts_helper.rb +0 -2
  116. data/test/tmp/app/serializers/account_serializer.rb +0 -3
  117. data/test/tmp/config/routes.rb +0 -1
  118. data/test/unit/active_model/array_serializer/except_test.rb +0 -18
  119. data/test/unit/active_model/array_serializer/key_format_test.rb +0 -18
  120. data/test/unit/active_model/array_serializer/meta_test.rb +0 -53
  121. data/test/unit/active_model/array_serializer/only_test.rb +0 -18
  122. data/test/unit/active_model/array_serializer/options_test.rb +0 -16
  123. data/test/unit/active_model/array_serializer/root_test.rb +0 -102
  124. data/test/unit/active_model/array_serializer/scope_test.rb +0 -24
  125. data/test/unit/active_model/array_serializer/serialization_test.rb +0 -216
  126. data/test/unit/active_model/default_serializer_test.rb +0 -13
  127. data/test/unit/active_model/serializer/associations/build_serializer_test.rb +0 -36
  128. data/test/unit/active_model/serializer/associations_test.rb +0 -49
  129. data/test/unit/active_model/serializer/attributes_test.rb +0 -57
  130. data/test/unit/active_model/serializer/config_test.rb +0 -91
  131. data/test/unit/active_model/serializer/filter_test.rb +0 -69
  132. data/test/unit/active_model/serializer/has_many_polymorphic_test.rb +0 -189
  133. data/test/unit/active_model/serializer/has_many_test.rb +0 -265
  134. data/test/unit/active_model/serializer/has_one_and_has_many_test.rb +0 -27
  135. data/test/unit/active_model/serializer/has_one_polymorphic_test.rb +0 -196
  136. data/test/unit/active_model/serializer/has_one_test.rb +0 -253
  137. data/test/unit/active_model/serializer/key_format_test.rb +0 -25
  138. data/test/unit/active_model/serializer/meta_test.rb +0 -39
  139. data/test/unit/active_model/serializer/options_test.rb +0 -42
  140. data/test/unit/active_model/serializer/root_test.rb +0 -117
  141. data/test/unit/active_model/serializer/scope_test.rb +0 -49
  142. data/test/unit/active_model/serializer/url_helpers_test.rb +0 -35
  143. data/test/unit/active_model/serilizable_test.rb +0 -50
@@ -1,253 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class HasOneTest < Minitest::Test
6
- def setup
7
- @association = UserSerializer._associations[:profile]
8
- @old_association = @association.dup
9
-
10
- @user = User.new({ name: 'Name 1', email: 'mail@server.com', gender: 'M' })
11
- @user_serializer = UserSerializer.new(@user)
12
- end
13
-
14
- def teardown
15
- UserSerializer._associations[:profile] = @old_association
16
- end
17
-
18
- def test_associations_definition
19
- assert_equal 1, UserSerializer._associations.length
20
- assert_kind_of Association::HasOne, @association
21
- assert_equal 'profile', @association.name
22
- end
23
-
24
- def test_associations_embedding_ids_serialization_using_serializable_hash
25
- @association.embed = :ids
26
-
27
- assert_equal({
28
- name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id
29
- }, @user_serializer.serializable_hash)
30
- end
31
-
32
- def test_associations_embedding_ids_serialization_using_as_json
33
- @association.embed = :ids
34
-
35
- assert_equal({
36
- 'user' => { name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id }
37
- }, @user_serializer.as_json)
38
- end
39
-
40
- def test_associations_embedding_ids_serialization_using_serializable_hash_and_key_from_options
41
- @association.embed = :ids
42
- @association.key = 'key'
43
-
44
- assert_equal({
45
- name: 'Name 1', email: 'mail@server.com', 'key' => @user.profile.object_id
46
- }, @user_serializer.serializable_hash)
47
- end
48
-
49
- def test_associations_embedding_objects_serialization_using_serializable_hash
50
- @association.embed = :objects
51
-
52
- assert_equal({
53
- name: 'Name 1', email: 'mail@server.com', profile: { name: 'N1', description: 'D1' }
54
- }, @user_serializer.serializable_hash)
55
- end
56
-
57
- def test_associations_embedding_objects_serialization_using_as_json
58
- @association.embed = :objects
59
-
60
- assert_equal({
61
- 'user' => { name: 'Name 1', email: 'mail@server.com', profile: { name: 'N1', description: 'D1' } }
62
- }, @user_serializer.as_json)
63
- end
64
-
65
- def test_associations_embedding_nil_ids_serialization_using_as_json
66
- @association.embed = :ids
67
- @user.instance_eval do
68
- def profile
69
- nil
70
- end
71
- end
72
-
73
- assert_equal({
74
- 'user' => { name: 'Name 1', email: 'mail@server.com', 'profile_id' => nil }
75
- }, @user_serializer.as_json)
76
- end
77
-
78
- def test_associations_embedding_nil_objects_serialization_using_as_json
79
- @association.embed = :objects
80
- @user.instance_eval do
81
- def profile
82
- nil
83
- end
84
- end
85
-
86
- assert_equal({
87
- 'user' => { name: 'Name 1', email: 'mail@server.com', profile: nil }
88
- }, @user_serializer.as_json)
89
- end
90
-
91
- def test_associations_embedding_objects_serialization_using_serializable_hash_and_root_from_options
92
- @association.embed = :objects
93
- @association.embedded_key = 'root'
94
-
95
- assert_equal({
96
- name: 'Name 1', email: 'mail@server.com', 'root' => { name: 'N1', description: 'D1' }
97
- }, @user_serializer.serializable_hash)
98
- end
99
-
100
- def test_associations_embedding_ids_including_objects_serialization_using_serializable_hash
101
- @association.embed = :ids
102
- @association.embed_in_root = true
103
-
104
- assert_equal({
105
- name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id
106
- }, @user_serializer.serializable_hash)
107
- end
108
-
109
- def test_associations_embedding_nil_ids_including_objects_serialization_using_as_json
110
- @association.embed = :ids
111
- @association.embed_in_root = true
112
- @user.instance_eval do
113
- def profile
114
- nil
115
- end
116
- end
117
-
118
- assert_equal({
119
- 'user' => { name: 'Name 1', email: 'mail@server.com', 'profile_id' => nil },
120
- 'profiles' => []
121
- }, @user_serializer.as_json)
122
- end
123
-
124
- def test_associations_embedding_ids_including_objects_serialization_using_as_json
125
- @association.embed = :ids
126
- @association.embed_in_root = true
127
-
128
- assert_equal({
129
- 'user' => { name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id },
130
- 'profiles' => [{ name: 'N1', description: 'D1' }]
131
- }, @user_serializer.as_json)
132
- end
133
-
134
- def test_associations_embedding_ids_including_objects_serialization_when_invoked_from_parent_serializer
135
- @association.embed = :ids
136
- @association.embed_in_root = true
137
-
138
- user_info = UserInfo.new
139
- user_info.instance_variable_set(:@user, @user)
140
- user_info_serializer = UserInfoSerializer.new(user_info)
141
-
142
- assert_equal({
143
- 'user_info' => { user: { name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id } },
144
- 'profiles' => [{ name: 'N1', description: 'D1' }]
145
- }, user_info_serializer.as_json)
146
- end
147
-
148
- def test_associations_embedding_ids_using_a_given_serializer
149
- @association.embed = :ids
150
- @association.embed_in_root = true
151
- @association.serializer_from_options = Class.new(Serializer) do
152
- def name
153
- 'fake'
154
- end
155
-
156
- attributes :name
157
- end
158
-
159
- assert_equal({
160
- 'user' => { name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id },
161
- 'profiles' => [{ name: 'fake' }]
162
- }, @user_serializer.as_json)
163
- end
164
-
165
- def test_associations_embedding_objects_using_a_given_serializer
166
- @association.serializer_from_options = Class.new(Serializer) do
167
- def name
168
- 'fake'
169
- end
170
-
171
- attributes :name
172
- end
173
-
174
- assert_equal({
175
- 'user' => { name: 'Name 1', email: 'mail@server.com', profile: { name: 'fake' } }
176
- }, @user_serializer.as_json)
177
- end
178
-
179
- def test_associations_embedding_objects_with_nil_values
180
- user_info = UserInfo.new
181
- user_info.instance_eval do
182
- def user
183
- nil
184
- end
185
- end
186
- user_info_serializer = UserInfoSerializer.new(user_info)
187
-
188
- assert_equal({
189
- 'user_info' => { user: nil }
190
- }, user_info_serializer.as_json)
191
- end
192
-
193
- def test_associations_embedding_ids_using_embed_namespace
194
- @association.embed_namespace = :links
195
- @association.embed = :ids
196
- @association.key = :profile
197
- assert_equal({
198
- 'user' => {
199
- name: 'Name 1', email: 'mail@server.com',
200
- links: {
201
- profile: @user.profile.object_id
202
- }
203
- }
204
- }, @user_serializer.as_json)
205
- end
206
-
207
- def test_asociations_embedding_objects_using_embed_namespace
208
- @association.embed_namespace = :links
209
- @association.embed = :objects
210
- assert_equal({
211
- 'user' => {
212
- name: 'Name 1', email: 'mail@server.com',
213
- links: {
214
- profile: { name: 'N1', description: 'D1' }
215
- }
216
- }
217
- }, @user_serializer.as_json)
218
- end
219
-
220
- def test_associations_embedding_ids_using_embed_namespace_and_embed_in_root_key
221
- @association.embed_in_root = true
222
- @association.embed_in_root_key = :linked
223
- @association.embed = :ids
224
- assert_equal({
225
- 'user' => {
226
- name: 'Name 1', email: 'mail@server.com', 'profile_id' => @user.profile.object_id
227
- },
228
- linked: {
229
- 'profiles' => [ { name: 'N1', description: 'D1' } ]
230
- }
231
- }, @user_serializer.as_json)
232
- end
233
-
234
- def test_associations_name_key_embedding_ids_serialization_using_serializable_hash
235
- @association = NameKeyUserSerializer._associations[:profile]
236
- @association.embed = :ids
237
-
238
- assert_equal({
239
- name: 'Name 1', email: 'mail@server.com', 'profile' => @user.profile.object_id
240
- }, NameKeyUserSerializer.new(@user).serializable_hash)
241
- end
242
-
243
- def test_associations_name_key_embedding_ids_serialization_using_as_json
244
- @association = NameKeyUserSerializer._associations[:profile]
245
- @association.embed = :ids
246
-
247
- assert_equal({
248
- 'name_key_user' => { name: 'Name 1', email: 'mail@server.com', 'profile' => @user.profile.object_id }
249
- }, NameKeyUserSerializer.new(@user).as_json)
250
- end
251
- end
252
- end
253
- end
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class KeyFormatTest < Minitest::Test
6
- def test_lower_camel_format_option
7
- object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
8
- serializer = WebLogSerializer.new(object, key_format: :lower_camel)
9
-
10
- expected = { name: 'Name 1', displayName: 'Display Name 1' }
11
-
12
- assert_equal expected, serializer.serializable_object
13
- end
14
-
15
- def test_lower_camel_format_serializer
16
- object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
17
- serializer = WebLogLowerCamelSerializer.new(object)
18
-
19
- expected = { name: 'Name 1', displayName: 'Display Name 1' }
20
-
21
- assert_equal expected, serializer.serializable_object
22
- end
23
- end
24
- end
25
- end
@@ -1,39 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class MetaTest < Minitest::Test
6
- def setup
7
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
8
- end
9
-
10
- def test_meta
11
- profile_serializer = ProfileSerializer.new(@profile, root: 'profile', meta: { total: 10 })
12
-
13
- assert_equal({
14
- 'profile' => {
15
- name: 'Name 1',
16
- description: 'Description 1'
17
- },
18
- meta: {
19
- total: 10
20
- }
21
- }, profile_serializer.as_json)
22
- end
23
-
24
- def test_meta_using_meta_key
25
- profile_serializer = ProfileSerializer.new(@profile, root: 'profile', meta_key: :my_meta, my_meta: { total: 10 })
26
-
27
- assert_equal({
28
- 'profile' => {
29
- name: 'Name 1',
30
- description: 'Description 1'
31
- },
32
- my_meta: {
33
- total: 10
34
- }
35
- }, profile_serializer.as_json)
36
- end
37
- end
38
- end
39
- end
@@ -1,42 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class OptionsTest < Minitest::Test
6
- def setup
7
- @serializer = ProfileSerializer.new(nil, context: {foo: :bar})
8
- end
9
-
10
- def test_custom_options_are_accessible_from_serializer
11
- assert_equal({foo: :bar}, @serializer.context)
12
- end
13
- end
14
-
15
- class SerializationOptionsTest < Minitest::Test
16
- def setup
17
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
18
- @profile_serializer = ProfileSerializer.new(@profile)
19
- @profile_serializer.instance_eval do
20
- def description
21
- serialization_options[:force_the_description]
22
- end
23
- end
24
-
25
- @category = Category.new({name: 'Category 1'})
26
- @category_serializer = CategorySerializer.new(@category)
27
- end
28
-
29
- def test_filtered_attributes_serialization
30
- forced_description = "This is a test"
31
- assert_equal({
32
- 'profile' => { name: 'Name 1', description: forced_description }
33
- }, @profile_serializer.as_json(force_the_description: forced_description))
34
- end
35
-
36
- def test_filtered_attributes_serialization_across_association
37
- assert_equal("'T1'",
38
- @category_serializer.as_json(highlight_keyword: 'T1')['category'][:posts][0][:title])
39
- end
40
- end
41
- end
42
- end
@@ -1,117 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class RootAsOptionTest < Minitest::Test
6
- def setup
7
- @old_root = ProfileSerializer._root
8
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
9
- @serializer = ProfileSerializer.new(@profile, root: :initialize)
10
- ProfileSerializer._root = true
11
- end
12
-
13
- def teardown
14
- ProfileSerializer._root = @old_root
15
- end
16
-
17
- def test_root_is_not_displayed_using_serializable_hash
18
- assert_equal({
19
- name: 'Name 1', description: 'Description 1'
20
- }, @serializer.serializable_hash)
21
- end
22
-
23
- def test_root_using_as_json
24
- assert_equal({
25
- initialize: {
26
- name: 'Name 1', description: 'Description 1'
27
- }
28
- }, @serializer.as_json)
29
- end
30
-
31
- def test_root_from_serializer_name
32
- @serializer = ProfileSerializer.new(@profile)
33
-
34
- assert_equal({
35
- 'profile' => {
36
- name: 'Name 1', description: 'Description 1'
37
- }
38
- }, @serializer.as_json)
39
- end
40
-
41
- def test_root_as_argument_takes_precedence
42
- assert_equal({
43
- argument: {
44
- name: 'Name 1', description: 'Description 1'
45
- }
46
- }, @serializer.as_json(root: :argument))
47
- end
48
-
49
- def test_using_false_root_in_initializer_takes_precedence
50
- ProfileSerializer._root = 'root'
51
- @serializer = ProfileSerializer.new(@profile, root: false)
52
-
53
- assert_equal({
54
- name: 'Name 1', description: 'Description 1'
55
- }, @serializer.as_json)
56
- end
57
-
58
- def test_root_inheritance
59
- ProfileSerializer._root = 'profile'
60
-
61
- inherited_serializer_klass = Class.new(ProfileSerializer)
62
- inherited_serializer_klass._root = 'inherited_profile'
63
-
64
- another_inherited_serializer_klass = Class.new(ProfileSerializer)
65
-
66
- assert_equal('inherited_profile',
67
- inherited_serializer_klass._root)
68
- assert_equal('profile',
69
- another_inherited_serializer_klass._root)
70
- end
71
- end
72
-
73
- class RootInSerializerTest < Minitest::Test
74
- def setup
75
- @old_root = ProfileSerializer._root
76
- ProfileSerializer._root = :in_serializer
77
- profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
78
- @serializer = ProfileSerializer.new(profile)
79
- @rooted_serializer = ProfileSerializer.new(profile, root: :initialize)
80
- end
81
-
82
- def teardown
83
- ProfileSerializer._root = @old_root
84
- end
85
-
86
- def test_root_is_not_displayed_using_serializable_hash
87
- assert_equal({
88
- name: 'Name 1', description: 'Description 1'
89
- }, @serializer.serializable_hash)
90
- end
91
-
92
- def test_root_using_as_json
93
- assert_equal({
94
- in_serializer: {
95
- name: 'Name 1', description: 'Description 1'
96
- }
97
- }, @serializer.as_json)
98
- end
99
-
100
- def test_root_in_initializer_takes_precedence
101
- assert_equal({
102
- initialize: {
103
- name: 'Name 1', description: 'Description 1'
104
- }
105
- }, @rooted_serializer.as_json)
106
- end
107
-
108
- def test_root_as_argument_takes_precedence
109
- assert_equal({
110
- argument: {
111
- name: 'Name 1', description: 'Description 1'
112
- }
113
- }, @rooted_serializer.as_json(root: :argument))
114
- end
115
- end
116
- end
117
- end
@@ -1,49 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class ScopeTest < Minitest::Test
6
- def setup
7
- @serializer = ProfileSerializer.new(nil, scope: current_user)
8
- end
9
-
10
- def test_scope
11
- assert_equal('user', @serializer.scope)
12
- end
13
-
14
- private
15
-
16
- def current_user
17
- 'user'
18
- end
19
- end
20
-
21
- class NestedScopeTest < Minitest::Test
22
- def setup
23
- @association = UserSerializer._associations[:profile]
24
- @old_association = @association.dup
25
- @user = User.new({ name: 'Name 1', email: 'mail@server.com', gender: 'M' })
26
- @user_serializer = UserSerializer.new(@user, scope: 'user')
27
- end
28
-
29
- def teardown
30
- UserSerializer._associations[:profile] = @old_association
31
- end
32
-
33
- def test_scope_passed_through
34
- @association.serializer_from_options = Class.new(Serializer) do
35
- def name
36
- scope
37
- end
38
-
39
- attributes :name
40
- end
41
-
42
- assert_equal({
43
- name: 'Name 1', email: 'mail@server.com', profile: { name: 'user' }
44
- }, @user_serializer.serializable_hash)
45
- end
46
- end
47
-
48
- end
49
- end
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class UrlHelpersTest < Minitest::Test
6
- include Rails.application.routes.url_helpers
7
-
8
- def setup
9
- Object.const_set 'UserController', Class.new(ActionController::Base) do
10
- def show
11
- render text: 'profile'
12
- end
13
- end
14
-
15
- Rails.application.routes.draw do
16
- get '/profile/:id', as: :profile, controller: :user, action: :show
17
- end
18
- end
19
-
20
- def test_url_helpers_are_available
21
- serializer = Class.new(ActiveModel::Serializer) do
22
- attributes :url
23
-
24
- def url
25
- profile_url(id: object.object_id)
26
- end
27
- end
28
- profile = Profile.new
29
-
30
- assert_equal({ url: profile_url(id: profile.object_id) },
31
- serializer.new(profile).as_json)
32
- end
33
- end
34
- end
35
- end
@@ -1,50 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class SerializableTest
5
- class InstrumentationTest < Minitest::Test
6
- def setup
7
- @events = []
8
-
9
- @subscriber = ActiveSupport::Notifications.subscribe('!serialize.active_model_serializers') do |name, start, finish, id, payload|
10
- @events << { name: name, serializer: payload[:serializer] }
11
- end
12
- end
13
-
14
- def teardown
15
- ActiveSupport::Notifications.unsubscribe(@subscriber) if defined?(@subscriber)
16
- end
17
-
18
- def test_instruments_default_serializer
19
- DefaultSerializer.new(1).as_json
20
-
21
- assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ActiveModel::DefaultSerializer' }], @events
22
- end
23
-
24
- def test_instruments_serializer
25
- profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
26
- serializer = ProfileSerializer.new(profile)
27
-
28
- serializer.as_json
29
-
30
- assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' }], @events
31
- end
32
-
33
- def test_instruments_array_serializer
34
- profiles = [
35
- Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
36
- Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2')
37
- ]
38
- serializer = ArraySerializer.new(profiles)
39
-
40
- serializer.as_json
41
-
42
- assert_equal [
43
- { name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' },
44
- { name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' },
45
- { name: '!serialize.active_model_serializers', serializer: 'ActiveModel::ArraySerializer' }
46
- ], @events
47
- end
48
- end
49
- end
50
- end