active_model_serializers 0.10.0 → 0.10.5
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/.rubocop.yml +2 -4
- data/.travis.yml +17 -5
- data/CHANGELOG.md +112 -2
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -2
- data/README.md +166 -26
- data/Rakefile +3 -3
- data/active_model_serializers.gemspec +21 -24
- data/appveyor.yml +9 -3
- data/docs/README.md +2 -1
- data/docs/general/adapters.md +4 -2
- data/docs/general/caching.md +7 -1
- data/docs/general/configuration_options.md +70 -1
- data/docs/general/deserialization.md +1 -1
- data/docs/general/fields.md +31 -0
- data/docs/general/logging.md +7 -0
- data/docs/general/rendering.md +44 -20
- data/docs/general/serializers.md +100 -11
- data/docs/howto/add_pagination_links.md +15 -16
- data/docs/howto/add_relationship_links.md +140 -0
- data/docs/howto/add_root_key.md +4 -0
- data/docs/howto/grape_integration.md +42 -0
- data/docs/howto/outside_controller_use.md +12 -4
- data/docs/howto/passing_arbitrary_options.md +2 -2
- data/docs/howto/serialize_poro.md +46 -5
- data/docs/howto/test.md +2 -0
- data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
- data/docs/integrations/ember-and-json-api.md +64 -32
- data/docs/jsonapi/schema.md +1 -1
- data/lib/action_controller/serialization.rb +13 -3
- data/lib/active_model/serializer/adapter/base.rb +2 -0
- data/lib/active_model/serializer/array_serializer.rb +8 -5
- data/lib/active_model/serializer/association.rb +19 -4
- data/lib/active_model/serializer/belongs_to_reflection.rb +0 -3
- data/lib/active_model/serializer/collection_serializer.rb +35 -12
- data/lib/active_model/serializer/{associations.rb → concerns/associations.rb} +13 -11
- data/lib/active_model/serializer/{attributes.rb → concerns/attributes.rb} +1 -1
- data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +72 -113
- data/lib/active_model/serializer/{configuration.rb → concerns/configuration.rb} +25 -1
- data/lib/active_model/serializer/{links.rb → concerns/links.rb} +0 -0
- data/lib/active_model/serializer/{meta.rb → concerns/meta.rb} +0 -0
- data/lib/active_model/serializer/{type.rb → concerns/type.rb} +0 -0
- data/lib/active_model/serializer/error_serializer.rb +11 -7
- data/lib/active_model/serializer/errors_serializer.rb +25 -20
- data/lib/active_model/serializer/has_many_reflection.rb +0 -3
- data/lib/active_model/serializer/has_one_reflection.rb +0 -3
- data/lib/active_model/serializer/lint.rb +134 -130
- data/lib/active_model/serializer/reflection.rb +37 -21
- data/lib/active_model/serializer/version.rb +1 -1
- data/lib/active_model/serializer.rb +76 -37
- data/lib/active_model_serializers/adapter/attributes.rb +3 -66
- data/lib/active_model_serializers/adapter/base.rb +39 -39
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +1 -1
- data/lib/active_model_serializers/adapter/json_api/link.rb +1 -1
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +8 -1
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +30 -19
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +23 -9
- data/lib/active_model_serializers/adapter/json_api.rb +44 -43
- data/lib/active_model_serializers/adapter.rb +6 -0
- data/lib/active_model_serializers/deprecate.rb +1 -2
- data/lib/active_model_serializers/deserialization.rb +2 -0
- data/lib/active_model_serializers/lookup_chain.rb +80 -0
- data/lib/active_model_serializers/model.rb +108 -28
- data/lib/active_model_serializers/railtie.rb +3 -1
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +44 -31
- data/lib/active_model_serializers/serializable_resource.rb +6 -5
- data/lib/active_model_serializers/serialization_context.rb +10 -3
- data/lib/active_model_serializers/test/schema.rb +2 -2
- data/lib/active_model_serializers.rb +15 -0
- data/lib/generators/rails/resource_override.rb +1 -1
- data/lib/generators/rails/serializer_generator.rb +4 -4
- data/lib/grape/active_model_serializers.rb +7 -5
- data/lib/grape/formatters/active_model_serializers.rb +19 -2
- data/lib/grape/helpers/active_model_serializers.rb +1 -0
- data/test/action_controller/adapter_selector_test.rb +14 -5
- data/test/action_controller/explicit_serializer_test.rb +5 -4
- data/test/action_controller/json/include_test.rb +106 -27
- data/test/action_controller/json_api/errors_test.rb +8 -9
- data/test/action_controller/json_api/fields_test.rb +66 -0
- data/test/action_controller/json_api/linked_test.rb +29 -24
- data/test/action_controller/json_api/pagination_test.rb +19 -19
- data/test/action_controller/json_api/transform_test.rb +11 -3
- data/test/action_controller/lookup_proc_test.rb +49 -0
- data/test/action_controller/namespace_lookup_test.rb +232 -0
- data/test/action_controller/serialization_scope_name_test.rb +12 -6
- data/test/action_controller/serialization_test.rb +12 -9
- data/test/active_model_serializers/json_pointer_test.rb +15 -13
- data/test/active_model_serializers/model_test.rb +137 -4
- data/test/active_model_serializers/railtie_test_isolated.rb +12 -7
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +161 -0
- data/test/active_model_serializers/serialization_context_test_isolated.rb +23 -10
- data/test/active_model_serializers/test/schema_test.rb +3 -2
- data/test/adapter/attributes_test.rb +40 -0
- data/test/adapter/json/collection_test.rb +14 -0
- data/test/adapter/json/has_many_test.rb +10 -2
- data/test/adapter/json/transform_test.rb +15 -15
- data/test/adapter/json_api/collection_test.rb +4 -3
- data/test/adapter/json_api/errors_test.rb +17 -19
- data/test/adapter/json_api/fields_test.rb +12 -3
- data/test/adapter/json_api/has_many_test.rb +49 -20
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +183 -0
- data/test/adapter/json_api/json_api_test.rb +5 -7
- data/test/adapter/json_api/linked_test.rb +33 -12
- data/test/adapter/json_api/links_test.rb +4 -2
- data/test/adapter/json_api/pagination_links_test.rb +35 -8
- data/test/adapter/json_api/relationship_test.rb +309 -73
- data/test/adapter/json_api/resource_identifier_test.rb +27 -2
- data/test/adapter/json_api/resource_meta_test.rb +3 -3
- data/test/adapter/json_api/transform_test.rb +263 -253
- data/test/adapter/json_api/type_test.rb +1 -1
- data/test/adapter/json_test.rb +8 -7
- data/test/adapter/null_test.rb +1 -2
- data/test/adapter/polymorphic_test.rb +5 -5
- data/test/adapter_test.rb +1 -1
- data/test/benchmark/app.rb +1 -1
- data/test/benchmark/benchmarking_support.rb +1 -1
- data/test/benchmark/bm_active_record.rb +81 -0
- data/test/benchmark/bm_adapter.rb +38 -0
- data/test/benchmark/bm_caching.rb +16 -16
- data/test/benchmark/bm_lookup_chain.rb +83 -0
- data/test/benchmark/bm_transform.rb +21 -10
- data/test/benchmark/controllers.rb +16 -17
- data/test/benchmark/fixtures.rb +72 -72
- data/test/cache_test.rb +235 -69
- data/test/collection_serializer_test.rb +25 -12
- data/test/fixtures/active_record.rb +45 -10
- data/test/fixtures/poro.rb +124 -181
- data/test/generators/serializer_generator_test.rb +23 -5
- data/test/grape_test.rb +170 -56
- data/test/lint_test.rb +1 -1
- data/test/logger_test.rb +13 -11
- data/test/serializable_resource_test.rb +18 -22
- data/test/serializers/association_macros_test.rb +3 -2
- data/test/serializers/associations_test.rb +132 -36
- data/test/serializers/attribute_test.rb +5 -3
- data/test/serializers/attributes_test.rb +1 -1
- data/test/serializers/caching_configuration_test_isolated.rb +6 -6
- data/test/serializers/fieldset_test.rb +1 -1
- data/test/serializers/meta_test.rb +12 -6
- data/test/serializers/options_test.rb +17 -6
- data/test/serializers/read_attribute_for_serialization_test.rb +3 -3
- data/test/serializers/root_test.rb +1 -1
- data/test/serializers/serialization_test.rb +2 -2
- data/test/serializers/serializer_for_test.rb +12 -10
- data/test/serializers/serializer_for_with_namespace_test.rb +88 -0
- data/test/support/isolated_unit.rb +5 -2
- data/test/support/rails5_shims.rb +8 -2
- data/test/support/rails_app.rb +2 -9
- data/test/support/serialization_testing.rb +23 -5
- data/test/test_helper.rb +13 -0
- metadata +104 -38
- data/.rubocop_todo.yml +0 -167
- data/docs/ARCHITECTURE.md +0 -126
- data/lib/active_model/serializer/include_tree.rb +0 -111
- data/lib/active_model_serializers/key_transform.rb +0 -70
- data/test/active_model_serializers/key_transform_test.rb +0 -263
- data/test/adapter/json_api/relationships_test.rb +0 -199
- data/test/include_tree/from_include_args_test.rb +0 -26
- data/test/include_tree/from_string_test.rb +0 -94
- data/test/include_tree/include_args_to_hash_test.rb +0 -64
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_model_serializers
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.10.
|
|
4
|
+
version: 0.10.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Steve Klabnik
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-03-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -16,56 +16,114 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '4.
|
|
19
|
+
version: '4.1'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '6'
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
27
|
- - ">="
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '4.
|
|
29
|
+
version: '4.1'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '6'
|
|
27
33
|
- !ruby/object:Gem::Dependency
|
|
28
34
|
name: actionpack
|
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
|
30
36
|
requirements:
|
|
31
37
|
- - ">="
|
|
32
38
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '4.
|
|
39
|
+
version: '4.1'
|
|
40
|
+
- - "<"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '6'
|
|
34
43
|
type: :runtime
|
|
35
44
|
prerelease: false
|
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
46
|
requirements:
|
|
38
47
|
- - ">="
|
|
39
48
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '4.
|
|
49
|
+
version: '4.1'
|
|
50
|
+
- - "<"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '6'
|
|
41
53
|
- !ruby/object:Gem::Dependency
|
|
42
54
|
name: railties
|
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
|
44
56
|
requirements:
|
|
45
57
|
- - ">="
|
|
46
58
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '4.
|
|
59
|
+
version: '4.1'
|
|
60
|
+
- - "<"
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '6'
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '4.1'
|
|
70
|
+
- - "<"
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
version: '6'
|
|
73
|
+
- !ruby/object:Gem::Dependency
|
|
74
|
+
name: jsonapi-renderer
|
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
|
76
|
+
requirements:
|
|
77
|
+
- - ">="
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: 0.1.1.beta1
|
|
80
|
+
- - "<"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0.2'
|
|
48
83
|
type: :runtime
|
|
49
84
|
prerelease: false
|
|
50
85
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
86
|
requirements:
|
|
52
87
|
- - ">="
|
|
53
88
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
89
|
+
version: 0.1.1.beta1
|
|
90
|
+
- - "<"
|
|
91
|
+
- !ruby/object:Gem::Version
|
|
92
|
+
version: '0.2'
|
|
93
|
+
- !ruby/object:Gem::Dependency
|
|
94
|
+
name: case_transform
|
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '0.2'
|
|
100
|
+
type: :runtime
|
|
101
|
+
prerelease: false
|
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
103
|
+
requirements:
|
|
104
|
+
- - ">="
|
|
105
|
+
- !ruby/object:Gem::Version
|
|
106
|
+
version: '0.2'
|
|
55
107
|
- !ruby/object:Gem::Dependency
|
|
56
108
|
name: activerecord
|
|
57
109
|
requirement: !ruby/object:Gem::Requirement
|
|
58
110
|
requirements:
|
|
59
111
|
- - ">="
|
|
60
112
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '4.
|
|
113
|
+
version: '4.1'
|
|
114
|
+
- - "<"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '6'
|
|
62
117
|
type: :development
|
|
63
118
|
prerelease: false
|
|
64
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
120
|
requirements:
|
|
66
121
|
- - ">="
|
|
67
122
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '4.
|
|
123
|
+
version: '4.1'
|
|
124
|
+
- - "<"
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '6'
|
|
69
127
|
- !ruby/object:Gem::Dependency
|
|
70
128
|
name: kaminari
|
|
71
129
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -208,10 +266,10 @@ files:
|
|
|
208
266
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
|
209
267
|
- ".gitignore"
|
|
210
268
|
- ".rubocop.yml"
|
|
211
|
-
- ".rubocop_todo.yml"
|
|
212
269
|
- ".simplecov"
|
|
213
270
|
- ".travis.yml"
|
|
214
271
|
- CHANGELOG.md
|
|
272
|
+
- CODE_OF_CONDUCT.md
|
|
215
273
|
- CONTRIBUTING.md
|
|
216
274
|
- Gemfile
|
|
217
275
|
- MIT-LICENSE
|
|
@@ -222,13 +280,13 @@ files:
|
|
|
222
280
|
- bin/bench
|
|
223
281
|
- bin/bench_regression
|
|
224
282
|
- bin/serve_benchmark
|
|
225
|
-
- docs/ARCHITECTURE.md
|
|
226
283
|
- docs/README.md
|
|
227
284
|
- docs/STYLE.md
|
|
228
285
|
- docs/general/adapters.md
|
|
229
286
|
- docs/general/caching.md
|
|
230
287
|
- docs/general/configuration_options.md
|
|
231
288
|
- docs/general/deserialization.md
|
|
289
|
+
- docs/general/fields.md
|
|
232
290
|
- docs/general/getting_started.md
|
|
233
291
|
- docs/general/instrumentation.md
|
|
234
292
|
- docs/general/key_transforms.md
|
|
@@ -237,11 +295,14 @@ files:
|
|
|
237
295
|
- docs/general/serializers.md
|
|
238
296
|
- docs/how-open-source-maintained.jpg
|
|
239
297
|
- docs/howto/add_pagination_links.md
|
|
298
|
+
- docs/howto/add_relationship_links.md
|
|
240
299
|
- docs/howto/add_root_key.md
|
|
300
|
+
- docs/howto/grape_integration.md
|
|
241
301
|
- docs/howto/outside_controller_use.md
|
|
242
302
|
- docs/howto/passing_arbitrary_options.md
|
|
243
303
|
- docs/howto/serialize_poro.md
|
|
244
304
|
- docs/howto/test.md
|
|
305
|
+
- docs/howto/upgrade_from_0_8_to_0_10.md
|
|
245
306
|
- docs/integrations/ember-and-json-api.md
|
|
246
307
|
- docs/integrations/grape.md
|
|
247
308
|
- docs/jsonapi/errors.md
|
|
@@ -260,28 +321,27 @@ files:
|
|
|
260
321
|
- lib/active_model/serializer/adapter/null.rb
|
|
261
322
|
- lib/active_model/serializer/array_serializer.rb
|
|
262
323
|
- lib/active_model/serializer/association.rb
|
|
263
|
-
- lib/active_model/serializer/associations.rb
|
|
264
324
|
- lib/active_model/serializer/attribute.rb
|
|
265
|
-
- lib/active_model/serializer/attributes.rb
|
|
266
325
|
- lib/active_model/serializer/belongs_to_reflection.rb
|
|
267
|
-
- lib/active_model/serializer/caching.rb
|
|
268
326
|
- lib/active_model/serializer/collection_reflection.rb
|
|
269
327
|
- lib/active_model/serializer/collection_serializer.rb
|
|
270
|
-
- lib/active_model/serializer/
|
|
328
|
+
- lib/active_model/serializer/concerns/associations.rb
|
|
329
|
+
- lib/active_model/serializer/concerns/attributes.rb
|
|
330
|
+
- lib/active_model/serializer/concerns/caching.rb
|
|
331
|
+
- lib/active_model/serializer/concerns/configuration.rb
|
|
332
|
+
- lib/active_model/serializer/concerns/links.rb
|
|
333
|
+
- lib/active_model/serializer/concerns/meta.rb
|
|
334
|
+
- lib/active_model/serializer/concerns/type.rb
|
|
271
335
|
- lib/active_model/serializer/error_serializer.rb
|
|
272
336
|
- lib/active_model/serializer/errors_serializer.rb
|
|
273
337
|
- lib/active_model/serializer/field.rb
|
|
274
338
|
- lib/active_model/serializer/fieldset.rb
|
|
275
339
|
- lib/active_model/serializer/has_many_reflection.rb
|
|
276
340
|
- lib/active_model/serializer/has_one_reflection.rb
|
|
277
|
-
- lib/active_model/serializer/include_tree.rb
|
|
278
|
-
- lib/active_model/serializer/links.rb
|
|
279
341
|
- lib/active_model/serializer/lint.rb
|
|
280
|
-
- lib/active_model/serializer/meta.rb
|
|
281
342
|
- lib/active_model/serializer/null.rb
|
|
282
343
|
- lib/active_model/serializer/reflection.rb
|
|
283
344
|
- lib/active_model/serializer/singular_reflection.rb
|
|
284
|
-
- lib/active_model/serializer/type.rb
|
|
285
345
|
- lib/active_model/serializer/version.rb
|
|
286
346
|
- lib/active_model_serializers.rb
|
|
287
347
|
- lib/active_model_serializers/adapter.rb
|
|
@@ -302,8 +362,8 @@ files:
|
|
|
302
362
|
- lib/active_model_serializers/deprecate.rb
|
|
303
363
|
- lib/active_model_serializers/deserialization.rb
|
|
304
364
|
- lib/active_model_serializers/json_pointer.rb
|
|
305
|
-
- lib/active_model_serializers/key_transform.rb
|
|
306
365
|
- lib/active_model_serializers/logging.rb
|
|
366
|
+
- lib/active_model_serializers/lookup_chain.rb
|
|
307
367
|
- lib/active_model_serializers/model.rb
|
|
308
368
|
- lib/active_model_serializers/railtie.rb
|
|
309
369
|
- lib/active_model_serializers/register_jsonapi_renderer.rb
|
|
@@ -324,21 +384,25 @@ files:
|
|
|
324
384
|
- test/action_controller/json/include_test.rb
|
|
325
385
|
- test/action_controller/json_api/deserialization_test.rb
|
|
326
386
|
- test/action_controller/json_api/errors_test.rb
|
|
387
|
+
- test/action_controller/json_api/fields_test.rb
|
|
327
388
|
- test/action_controller/json_api/linked_test.rb
|
|
328
389
|
- test/action_controller/json_api/pagination_test.rb
|
|
329
390
|
- test/action_controller/json_api/transform_test.rb
|
|
391
|
+
- test/action_controller/lookup_proc_test.rb
|
|
392
|
+
- test/action_controller/namespace_lookup_test.rb
|
|
330
393
|
- test/action_controller/serialization_scope_name_test.rb
|
|
331
394
|
- test/action_controller/serialization_test.rb
|
|
332
395
|
- test/active_model_serializers/adapter_for_test.rb
|
|
333
396
|
- test/active_model_serializers/json_pointer_test.rb
|
|
334
|
-
- test/active_model_serializers/key_transform_test.rb
|
|
335
397
|
- test/active_model_serializers/logging_test.rb
|
|
336
398
|
- test/active_model_serializers/model_test.rb
|
|
337
399
|
- test/active_model_serializers/railtie_test_isolated.rb
|
|
400
|
+
- test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb
|
|
338
401
|
- test/active_model_serializers/serialization_context_test_isolated.rb
|
|
339
402
|
- test/active_model_serializers/test/schema_test.rb
|
|
340
403
|
- test/active_model_serializers/test/serializer_test.rb
|
|
341
404
|
- test/active_record_test.rb
|
|
405
|
+
- test/adapter/attributes_test.rb
|
|
342
406
|
- test/adapter/deprecation_test.rb
|
|
343
407
|
- test/adapter/json/belongs_to_test.rb
|
|
344
408
|
- test/adapter/json/collection_test.rb
|
|
@@ -352,13 +416,13 @@ files:
|
|
|
352
416
|
- test/adapter/json_api/has_many_explicit_serializer_test.rb
|
|
353
417
|
- test/adapter/json_api/has_many_test.rb
|
|
354
418
|
- test/adapter/json_api/has_one_test.rb
|
|
419
|
+
- test/adapter/json_api/include_data_if_sideloaded_test.rb
|
|
355
420
|
- test/adapter/json_api/json_api_test.rb
|
|
356
421
|
- test/adapter/json_api/linked_test.rb
|
|
357
422
|
- test/adapter/json_api/links_test.rb
|
|
358
423
|
- test/adapter/json_api/pagination_links_test.rb
|
|
359
424
|
- test/adapter/json_api/parse_test.rb
|
|
360
425
|
- test/adapter/json_api/relationship_test.rb
|
|
361
|
-
- test/adapter/json_api/relationships_test.rb
|
|
362
426
|
- test/adapter/json_api/resource_identifier_test.rb
|
|
363
427
|
- test/adapter/json_api/resource_meta_test.rb
|
|
364
428
|
- test/adapter/json_api/toplevel_jsonapi_test.rb
|
|
@@ -371,7 +435,10 @@ files:
|
|
|
371
435
|
- test/array_serializer_test.rb
|
|
372
436
|
- test/benchmark/app.rb
|
|
373
437
|
- test/benchmark/benchmarking_support.rb
|
|
438
|
+
- test/benchmark/bm_active_record.rb
|
|
439
|
+
- test/benchmark/bm_adapter.rb
|
|
374
440
|
- test/benchmark/bm_caching.rb
|
|
441
|
+
- test/benchmark/bm_lookup_chain.rb
|
|
375
442
|
- test/benchmark/bm_transform.rb
|
|
376
443
|
- test/benchmark/config.ru
|
|
377
444
|
- test/benchmark/controllers.rb
|
|
@@ -383,9 +450,6 @@ files:
|
|
|
383
450
|
- test/generators/scaffold_controller_generator_test.rb
|
|
384
451
|
- test/generators/serializer_generator_test.rb
|
|
385
452
|
- test/grape_test.rb
|
|
386
|
-
- test/include_tree/from_include_args_test.rb
|
|
387
|
-
- test/include_tree/from_string_test.rb
|
|
388
|
-
- test/include_tree/include_args_to_hash_test.rb
|
|
389
453
|
- test/lint_test.rb
|
|
390
454
|
- test/logger_test.rb
|
|
391
455
|
- test/poro_test.rb
|
|
@@ -403,6 +467,7 @@ files:
|
|
|
403
467
|
- test/serializers/root_test.rb
|
|
404
468
|
- test/serializers/serialization_test.rb
|
|
405
469
|
- test/serializers/serializer_for_test.rb
|
|
470
|
+
- test/serializers/serializer_for_with_namespace_test.rb
|
|
406
471
|
- test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json
|
|
407
472
|
- test/support/isolated_unit.rb
|
|
408
473
|
- test/support/rails5_shims.rb
|
|
@@ -419,10 +484,7 @@ homepage: https://github.com/rails-api/active_model_serializers
|
|
|
419
484
|
licenses:
|
|
420
485
|
- MIT
|
|
421
486
|
metadata: {}
|
|
422
|
-
post_install_message:
|
|
423
|
-
NOTE: The default key case for the JsonApi adapter has changed to dashed.
|
|
424
|
-
See https://github.com/rails-api/active_model_serializers/blob/master/docs/general/key_transforms.md
|
|
425
|
-
for more information on configuring this behavior.
|
|
487
|
+
post_install_message:
|
|
426
488
|
rdoc_options: []
|
|
427
489
|
require_paths:
|
|
428
490
|
- lib
|
|
@@ -430,7 +492,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
430
492
|
requirements:
|
|
431
493
|
- - ">="
|
|
432
494
|
- !ruby/object:Gem::Version
|
|
433
|
-
version: 2.
|
|
495
|
+
version: '2.1'
|
|
434
496
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
435
497
|
requirements:
|
|
436
498
|
- - ">="
|
|
@@ -438,7 +500,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
438
500
|
version: '0'
|
|
439
501
|
requirements: []
|
|
440
502
|
rubyforge_project:
|
|
441
|
-
rubygems_version: 2.4.
|
|
503
|
+
rubygems_version: 2.4.8
|
|
442
504
|
signing_key:
|
|
443
505
|
specification_version: 4
|
|
444
506
|
summary: Conventions-based JSON generation for Rails.
|
|
@@ -448,21 +510,25 @@ test_files:
|
|
|
448
510
|
- test/action_controller/json/include_test.rb
|
|
449
511
|
- test/action_controller/json_api/deserialization_test.rb
|
|
450
512
|
- test/action_controller/json_api/errors_test.rb
|
|
513
|
+
- test/action_controller/json_api/fields_test.rb
|
|
451
514
|
- test/action_controller/json_api/linked_test.rb
|
|
452
515
|
- test/action_controller/json_api/pagination_test.rb
|
|
453
516
|
- test/action_controller/json_api/transform_test.rb
|
|
517
|
+
- test/action_controller/lookup_proc_test.rb
|
|
518
|
+
- test/action_controller/namespace_lookup_test.rb
|
|
454
519
|
- test/action_controller/serialization_scope_name_test.rb
|
|
455
520
|
- test/action_controller/serialization_test.rb
|
|
456
521
|
- test/active_model_serializers/adapter_for_test.rb
|
|
457
522
|
- test/active_model_serializers/json_pointer_test.rb
|
|
458
|
-
- test/active_model_serializers/key_transform_test.rb
|
|
459
523
|
- test/active_model_serializers/logging_test.rb
|
|
460
524
|
- test/active_model_serializers/model_test.rb
|
|
461
525
|
- test/active_model_serializers/railtie_test_isolated.rb
|
|
526
|
+
- test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb
|
|
462
527
|
- test/active_model_serializers/serialization_context_test_isolated.rb
|
|
463
528
|
- test/active_model_serializers/test/schema_test.rb
|
|
464
529
|
- test/active_model_serializers/test/serializer_test.rb
|
|
465
530
|
- test/active_record_test.rb
|
|
531
|
+
- test/adapter/attributes_test.rb
|
|
466
532
|
- test/adapter/deprecation_test.rb
|
|
467
533
|
- test/adapter/json/belongs_to_test.rb
|
|
468
534
|
- test/adapter/json/collection_test.rb
|
|
@@ -476,13 +542,13 @@ test_files:
|
|
|
476
542
|
- test/adapter/json_api/has_many_explicit_serializer_test.rb
|
|
477
543
|
- test/adapter/json_api/has_many_test.rb
|
|
478
544
|
- test/adapter/json_api/has_one_test.rb
|
|
545
|
+
- test/adapter/json_api/include_data_if_sideloaded_test.rb
|
|
479
546
|
- test/adapter/json_api/json_api_test.rb
|
|
480
547
|
- test/adapter/json_api/linked_test.rb
|
|
481
548
|
- test/adapter/json_api/links_test.rb
|
|
482
549
|
- test/adapter/json_api/pagination_links_test.rb
|
|
483
550
|
- test/adapter/json_api/parse_test.rb
|
|
484
551
|
- test/adapter/json_api/relationship_test.rb
|
|
485
|
-
- test/adapter/json_api/relationships_test.rb
|
|
486
552
|
- test/adapter/json_api/resource_identifier_test.rb
|
|
487
553
|
- test/adapter/json_api/resource_meta_test.rb
|
|
488
554
|
- test/adapter/json_api/toplevel_jsonapi_test.rb
|
|
@@ -495,7 +561,10 @@ test_files:
|
|
|
495
561
|
- test/array_serializer_test.rb
|
|
496
562
|
- test/benchmark/app.rb
|
|
497
563
|
- test/benchmark/benchmarking_support.rb
|
|
564
|
+
- test/benchmark/bm_active_record.rb
|
|
565
|
+
- test/benchmark/bm_adapter.rb
|
|
498
566
|
- test/benchmark/bm_caching.rb
|
|
567
|
+
- test/benchmark/bm_lookup_chain.rb
|
|
499
568
|
- test/benchmark/bm_transform.rb
|
|
500
569
|
- test/benchmark/config.ru
|
|
501
570
|
- test/benchmark/controllers.rb
|
|
@@ -507,9 +576,6 @@ test_files:
|
|
|
507
576
|
- test/generators/scaffold_controller_generator_test.rb
|
|
508
577
|
- test/generators/serializer_generator_test.rb
|
|
509
578
|
- test/grape_test.rb
|
|
510
|
-
- test/include_tree/from_include_args_test.rb
|
|
511
|
-
- test/include_tree/from_string_test.rb
|
|
512
|
-
- test/include_tree/include_args_to_hash_test.rb
|
|
513
579
|
- test/lint_test.rb
|
|
514
580
|
- test/logger_test.rb
|
|
515
581
|
- test/poro_test.rb
|
|
@@ -527,6 +593,7 @@ test_files:
|
|
|
527
593
|
- test/serializers/root_test.rb
|
|
528
594
|
- test/serializers/serialization_test.rb
|
|
529
595
|
- test/serializers/serializer_for_test.rb
|
|
596
|
+
- test/serializers/serializer_for_with_namespace_test.rb
|
|
530
597
|
- test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json
|
|
531
598
|
- test/support/isolated_unit.rb
|
|
532
599
|
- test/support/rails5_shims.rb
|
|
@@ -539,4 +606,3 @@ test_files:
|
|
|
539
606
|
- test/support/schemas/simple_json_pointers.json
|
|
540
607
|
- test/support/serialization_testing.rb
|
|
541
608
|
- test/test_helper.rb
|
|
542
|
-
has_rdoc:
|
data/.rubocop_todo.yml
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# This configuration was generated by
|
|
2
|
-
# `rubocop --auto-gen-config`
|
|
3
|
-
# on 2016-03-08 22:29:52 +0100 using RuboCop version 0.37.2.
|
|
4
|
-
# The point is for the user to remove these configuration records
|
|
5
|
-
# one by one as the offenses are removed from the code base.
|
|
6
|
-
# Note that changes in the inspected code, or installation of new
|
|
7
|
-
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
-
|
|
9
|
-
# Offense count: 2
|
|
10
|
-
Lint/HandleExceptions:
|
|
11
|
-
Exclude:
|
|
12
|
-
- 'Rakefile'
|
|
13
|
-
|
|
14
|
-
# Offense count: 2
|
|
15
|
-
# Cop supports --auto-correct.
|
|
16
|
-
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
|
|
17
|
-
Lint/UnusedMethodArgument:
|
|
18
|
-
Exclude:
|
|
19
|
-
- 'test/lint_test.rb'
|
|
20
|
-
|
|
21
|
-
# Offense count: 4
|
|
22
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
23
|
-
# SupportedStyles: strict, flexible
|
|
24
|
-
Rails/TimeZone:
|
|
25
|
-
Exclude:
|
|
26
|
-
- 'test/action_controller/serialization_test.rb'
|
|
27
|
-
- 'test/serializers/cache_test.rb'
|
|
28
|
-
|
|
29
|
-
# Offense count: 16
|
|
30
|
-
# Cop supports --auto-correct.
|
|
31
|
-
# Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles.
|
|
32
|
-
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
|
|
33
|
-
Style/AlignHash:
|
|
34
|
-
Exclude:
|
|
35
|
-
- 'test/action_controller/json_api/pagination_test.rb'
|
|
36
|
-
|
|
37
|
-
# Offense count: 27
|
|
38
|
-
# Cop supports --auto-correct.
|
|
39
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
40
|
-
# SupportedStyles: braces, no_braces, context_dependent
|
|
41
|
-
Style/BracesAroundHashParameters:
|
|
42
|
-
Exclude:
|
|
43
|
-
- 'test/action_controller/adapter_selector_test.rb'
|
|
44
|
-
- 'test/action_controller/json_api/pagination_test.rb'
|
|
45
|
-
- 'test/adapter/json_api/linked_test.rb'
|
|
46
|
-
- 'test/adapter/json_api/pagination_links_test.rb'
|
|
47
|
-
- 'test/adapter/null_test.rb'
|
|
48
|
-
- 'test/adapter_test.rb'
|
|
49
|
-
- 'test/collection_serializer_test.rb'
|
|
50
|
-
- 'test/serializable_resource_test.rb'
|
|
51
|
-
- 'test/serializers/associations_test.rb'
|
|
52
|
-
- 'test/serializers/attributes_test.rb'
|
|
53
|
-
- 'test/serializers/root_test.rb'
|
|
54
|
-
|
|
55
|
-
# Offense count: 271
|
|
56
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
57
|
-
# SupportedStyles: nested, compact
|
|
58
|
-
Style/ClassAndModuleChildren:
|
|
59
|
-
Enabled: false
|
|
60
|
-
|
|
61
|
-
# Offense count: 6
|
|
62
|
-
# Cop supports --auto-correct.
|
|
63
|
-
Style/CommentIndentation:
|
|
64
|
-
Exclude:
|
|
65
|
-
- 'active_model_serializers.gemspec'
|
|
66
|
-
|
|
67
|
-
# Offense count: 1
|
|
68
|
-
Style/DoubleNegation:
|
|
69
|
-
Exclude:
|
|
70
|
-
- 'lib/active_model/serializable_resource.rb'
|
|
71
|
-
|
|
72
|
-
# Offense count: 1
|
|
73
|
-
# Configuration parameters: MinBodyLength.
|
|
74
|
-
Style/GuardClause:
|
|
75
|
-
Exclude:
|
|
76
|
-
- 'lib/active_model/serializer.rb'
|
|
77
|
-
|
|
78
|
-
# Offense count: 58
|
|
79
|
-
# Cop supports --auto-correct.
|
|
80
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues.
|
|
81
|
-
# SupportedStyles: ruby19, ruby19_no_mixed_keys, hash_rockets
|
|
82
|
-
Style/HashSyntax:
|
|
83
|
-
Enabled: false
|
|
84
|
-
|
|
85
|
-
# Offense count: 4
|
|
86
|
-
# Cop supports --auto-correct.
|
|
87
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
88
|
-
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
|
89
|
-
Style/IndentArray:
|
|
90
|
-
Enabled: false
|
|
91
|
-
|
|
92
|
-
# Offense count: 10
|
|
93
|
-
# Cop supports --auto-correct.
|
|
94
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
95
|
-
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
|
96
|
-
Style/IndentHash:
|
|
97
|
-
Enabled: false
|
|
98
|
-
|
|
99
|
-
# Offense count: 1
|
|
100
|
-
# Cop supports --auto-correct.
|
|
101
|
-
Style/Lambda:
|
|
102
|
-
Exclude:
|
|
103
|
-
- 'lib/active_model/serializer.rb'
|
|
104
|
-
|
|
105
|
-
# Offense count: 1
|
|
106
|
-
# Cop supports --auto-correct.
|
|
107
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
108
|
-
# SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline
|
|
109
|
-
Style/MethodDefParentheses:
|
|
110
|
-
Enabled: false
|
|
111
|
-
|
|
112
|
-
# Offense count: 1
|
|
113
|
-
# Cop supports --auto-correct.
|
|
114
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
115
|
-
# SupportedStyles: aligned, indented
|
|
116
|
-
Style/MultilineOperationIndentation:
|
|
117
|
-
Enabled: false
|
|
118
|
-
|
|
119
|
-
# Offense count: 1
|
|
120
|
-
# Cop supports --auto-correct.
|
|
121
|
-
Style/NegatedIf:
|
|
122
|
-
Exclude:
|
|
123
|
-
- 'lib/action_controller/serialization.rb'
|
|
124
|
-
|
|
125
|
-
# Offense count: 1
|
|
126
|
-
# Cop supports --auto-correct.
|
|
127
|
-
Style/PerlBackrefs:
|
|
128
|
-
Exclude:
|
|
129
|
-
- 'test/fixtures/poro.rb'
|
|
130
|
-
|
|
131
|
-
# Offense count: 3
|
|
132
|
-
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
|
133
|
-
# NamePrefix: is_, has_, have_
|
|
134
|
-
# NamePrefixBlacklist: is_, has_, have_
|
|
135
|
-
# NameWhitelist: is_a?
|
|
136
|
-
Style/PredicateName:
|
|
137
|
-
Exclude:
|
|
138
|
-
- 'lib/active_model/serializer/associations.rb'
|
|
139
|
-
- 'test/action_controller/json_api/linked_test.rb'
|
|
140
|
-
|
|
141
|
-
# Offense count: 1
|
|
142
|
-
# Cop supports --auto-correct.
|
|
143
|
-
Style/RedundantSelf:
|
|
144
|
-
Exclude:
|
|
145
|
-
- 'test/fixtures/poro.rb'
|
|
146
|
-
|
|
147
|
-
# Offense count: 1
|
|
148
|
-
# Cop supports --auto-correct.
|
|
149
|
-
# Configuration parameters: AllowIfMethodIsEmpty.
|
|
150
|
-
Style/SingleLineMethods:
|
|
151
|
-
Exclude:
|
|
152
|
-
- 'test/serializers/serializer_for_test.rb'
|
|
153
|
-
|
|
154
|
-
# Offense count: 4
|
|
155
|
-
# Cop supports --auto-correct.
|
|
156
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
157
|
-
# SupportedStyles: single_quotes, double_quotes
|
|
158
|
-
Style/StringLiteralsInInterpolation:
|
|
159
|
-
Enabled: false
|
|
160
|
-
|
|
161
|
-
# Offense count: 1
|
|
162
|
-
# Cop supports --auto-correct.
|
|
163
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
164
|
-
# SupportedStyles: final_newline, final_blank_line
|
|
165
|
-
Style/TrailingBlankLines:
|
|
166
|
-
Exclude:
|
|
167
|
-
- 'test/adapter/null_test.rb'
|
data/docs/ARCHITECTURE.md
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
[Back to Guides](README.md)
|
|
2
|
-
|
|
3
|
-
This document focuses on architecture the 0.10.x version of ActiveModelSerializers. If you are interested in the architecture of the 0.8 or 0.9 versions,
|
|
4
|
-
please refer to the [0.8 README](https://github.com/rails-api/active_model_serializers/blob/0-8-stable/README.md) or
|
|
5
|
-
[0.9 README](https://github.com/rails-api/active_model_serializers/blob/0-9-stable/README.md).
|
|
6
|
-
|
|
7
|
-
The original design is also available [here](https://github.com/rails-api/active_model_serializers/blob/d72b66d4c5355b0ff0a75a04895fcc4ea5b0c65e/README.textile).
|
|
8
|
-
|
|
9
|
-
# ARCHITECTURE
|
|
10
|
-
|
|
11
|
-
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/4-2-stable/activemodel/lib/active_model/serialization.rb)
|
|
12
|
-
and exposes an `attributes` method, among a few others.
|
|
13
|
-
It allows you to specify which attributes and associations should be represented in the serializatation of the resource.
|
|
14
|
-
It requires an adapter to transform its attributes into a JSON document; it cannot be serialized itself.
|
|
15
|
-
It may be useful to think of it as a
|
|
16
|
-
[presenter](http://blog.steveklabnik.com/posts/2011-09-09-better-ruby-presenters).
|
|
17
|
-
|
|
18
|
-
The **`ActiveModel::ArraySerializer`** represent a collection of resources as serializers
|
|
19
|
-
and, if there is no serializer, primitives.
|
|
20
|
-
|
|
21
|
-
The **`ActiveModel::Adapter`** describes the structure of the JSON document generated from a
|
|
22
|
-
serializer. For example, the `Attributes` example represents each serializer as its
|
|
23
|
-
unmodified attributes. The `JsonApi` adapter represents the serializer as a [JSON
|
|
24
|
-
API](http://jsonapi.org/) document.
|
|
25
|
-
|
|
26
|
-
The **`ActiveModelSerializers::SerializableResource`** acts to coordinate the serializer(s) and adapter
|
|
27
|
-
to an object that responds to `to_json`, and `as_json`. It is used in the controller to
|
|
28
|
-
encapsulate the serialization resource when rendered. However, it can also be used on its own
|
|
29
|
-
to serialize a resource outside of a controller, as well.
|
|
30
|
-
|
|
31
|
-
## Primitive handling
|
|
32
|
-
|
|
33
|
-
Definitions: A primitive is usually a String or Array. There is no serializer
|
|
34
|
-
defined for them; they will be serialized when the resource is converted to JSON (`as_json` or
|
|
35
|
-
`to_json`). (The below also applies for any object with no serializer.)
|
|
36
|
-
|
|
37
|
-
ActiveModelSerializers doesn't handle primitives passed to `render json:` at all.
|
|
38
|
-
|
|
39
|
-
However, when a primitive value is an attribute or in a collection,
|
|
40
|
-
it is not modified.
|
|
41
|
-
|
|
42
|
-
Internally, if no serializer can be found in the controller, the resource is not decorated by
|
|
43
|
-
ActiveModelSerializers.
|
|
44
|
-
|
|
45
|
-
If the collection serializer (ArraySerializer) cannot
|
|
46
|
-
identify a serializer for a resource in its collection, it raises [`NoSerializerError`](https://github.com/rails-api/active_model_serializers/issues/1191#issuecomment-142327128)
|
|
47
|
-
which is rescued in `ActiveModel::Serializer::Reflection#build_association` which sets
|
|
48
|
-
the association value directly:
|
|
49
|
-
|
|
50
|
-
```ruby
|
|
51
|
-
reflection_options[:virtual_value] = association_value.try(:as_json) || association_value
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
(which is called by the adapter as `serializer.associations(*)`.)
|
|
55
|
-
|
|
56
|
-
## How options are parsed
|
|
57
|
-
|
|
58
|
-
High-level overview:
|
|
59
|
-
|
|
60
|
-
- For a collection
|
|
61
|
-
- `:serializer` specifies the collection serializer and
|
|
62
|
-
- `:each_serializer` specifies the serializer for each resource in the collection.
|
|
63
|
-
- For a single resource, the `:serializer` option is the resource serializer.
|
|
64
|
-
- Options are partitioned in serializer options and adapter options. Keys for adapter options are specified by
|
|
65
|
-
[`ADAPTER_OPTION_KEYS`](https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model_serializers/serializable_resource.rb#L5).
|
|
66
|
-
The remaining options are serializer options.
|
|
67
|
-
|
|
68
|
-
Details:
|
|
69
|
-
|
|
70
|
-
1. **ActionController::Serialization**
|
|
71
|
-
1. `serializable_resource = ActiveModelSerializers::SerializableResource.new(resource, options)`
|
|
72
|
-
1. `options` are partitioned into `adapter_opts` and everything else (`serializer_opts`).
|
|
73
|
-
The `adapter_opts` keys are defined in `ActiveModelSerializers::SerializableResource::ADAPTER_OPTION_KEYS`.
|
|
74
|
-
1. **ActiveModelSerializers::SerializableResource**
|
|
75
|
-
1. `if serializable_resource.serializer?` (there is a serializer for the resource, and an adapter is used.)
|
|
76
|
-
- Where `serializer?` is `use_adapter? && !!(serializer)`
|
|
77
|
-
- Where `use_adapter?`: 'True when no explicit adapter given, or explicit value is truthy (non-nil);
|
|
78
|
-
False when explicit adapter is falsy (nil or false)'
|
|
79
|
-
- Where `serializer`:
|
|
80
|
-
1. from explicit `:serializer` option, else
|
|
81
|
-
2. implicitly from resource `ActiveModel::Serializer.serializer_for(resource)`
|
|
82
|
-
1. A side-effect of checking `serializer` is:
|
|
83
|
-
- The `:serializer` option is removed from the serializer_opts hash
|
|
84
|
-
- If the `:each_serializer` option is present, it is removed from the serializer_opts hash and set as the `:serializer` option
|
|
85
|
-
1. The serializer and adapter are created as
|
|
86
|
-
1. `serializer_instance = serializer.new(resource, serializer_opts)`
|
|
87
|
-
2. `adapter_instance = ActiveModel::Serializer::Adapter.create(serializer_instance, adapter_opts)`
|
|
88
|
-
1. **ActiveModel::Serializer::ArraySerializer#new**
|
|
89
|
-
1. If the `serializer_instance` was a `ArraySerializer` and the `:serializer` serializer_opts
|
|
90
|
-
is present, then [that serializer is passed into each resource](https://github.com/rails-api/active_model_serializers/blob/a54d237e2828fe6bab1ea5dfe6360d4ecc8214cd/lib/active_model/serializer/array_serializer.rb#L14-L16).
|
|
91
|
-
1. **ActiveModel::Serializer#attributes** is used by the adapter to get the attributes for
|
|
92
|
-
resource as defined by the serializer.
|
|
93
|
-
|
|
94
|
-
## What does a 'serializable resource' look like?
|
|
95
|
-
|
|
96
|
-
- An `ActiveRecord::Base` object.
|
|
97
|
-
- Any Ruby object that passes the
|
|
98
|
-
[Lint](http://www.rubydoc.info/github/rails-api/active_model_serializers/ActiveModel/Serializer/Lint/Tests)
|
|
99
|
-
[code](https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model/serializer/lint.rb).
|
|
100
|
-
|
|
101
|
-
ActiveModelSerializers provides a
|
|
102
|
-
[`ActiveModelSerializers::Model`](https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model_serializers/model.rb),
|
|
103
|
-
which is a simple serializable PORO (Plain-Old Ruby Object).
|
|
104
|
-
|
|
105
|
-
ActiveModelSerializers::Model may be used either as a template, or in production code.
|
|
106
|
-
|
|
107
|
-
```ruby
|
|
108
|
-
class MyModel < ActiveModelSerializers::Model
|
|
109
|
-
attr_accessor :id, :name, :level
|
|
110
|
-
end
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
The default serializer for `MyModel` would be `MyModelSerializer` whether MyModel is an
|
|
114
|
-
ActiveRecord::Base object or not.
|
|
115
|
-
|
|
116
|
-
Outside of the controller the rules are **exactly** the same as for records. For example:
|
|
117
|
-
|
|
118
|
-
```ruby
|
|
119
|
-
render json: MyModel.new(level: 'awesome'), adapter: :json
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
would be serialized the same as
|
|
123
|
-
|
|
124
|
-
```ruby
|
|
125
|
-
ActiveModelSerializers::SerializableResource.new(MyModel.new(level: 'awesome'), adapter: :json).as_json
|
|
126
|
-
```
|