active_model_serializers 0.10.7 → 0.10.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +62 -1
- data/README.md +20 -20
- data/lib/action_controller/serialization.rb +11 -1
- data/lib/active_model/serializable_resource.rb +2 -0
- data/lib/active_model/serializer.rb +33 -18
- data/lib/active_model/serializer/adapter.rb +2 -0
- data/lib/active_model/serializer/adapter/attributes.rb +2 -0
- data/lib/active_model/serializer/adapter/base.rb +2 -0
- data/lib/active_model/serializer/adapter/json.rb +2 -0
- data/lib/active_model/serializer/adapter/json_api.rb +2 -0
- data/lib/active_model/serializer/adapter/null.rb +2 -0
- data/lib/active_model/serializer/array_serializer.rb +2 -0
- data/lib/active_model/serializer/association.rb +2 -0
- data/lib/active_model/serializer/attribute.rb +2 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
- data/lib/active_model/serializer/collection_serializer.rb +6 -6
- data/lib/active_model/serializer/concerns/caching.rb +7 -2
- data/lib/active_model/serializer/error_serializer.rb +2 -0
- data/lib/active_model/serializer/errors_serializer.rb +2 -0
- data/lib/active_model/serializer/field.rb +2 -0
- data/lib/active_model/serializer/fieldset.rb +3 -1
- data/lib/active_model/serializer/has_many_reflection.rb +2 -0
- data/lib/active_model/serializer/has_one_reflection.rb +2 -0
- data/lib/active_model/serializer/lazy_association.rb +6 -2
- data/lib/active_model/serializer/link.rb +23 -0
- data/lib/active_model/serializer/lint.rb +2 -0
- data/lib/active_model/serializer/null.rb +2 -0
- data/lib/active_model/serializer/reflection.rb +9 -4
- data/lib/active_model/serializer/version.rb +3 -1
- data/lib/active_model_serializers.rb +20 -10
- data/lib/active_model_serializers/adapter.rb +3 -1
- data/lib/active_model_serializers/adapter/attributes.rb +23 -0
- data/lib/active_model_serializers/adapter/base.rb +2 -0
- data/lib/active_model_serializers/adapter/json.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api.rb +14 -9
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +3 -1
- data/lib/active_model_serializers/adapter/null.rb +2 -0
- data/lib/active_model_serializers/callbacks.rb +2 -0
- data/lib/active_model_serializers/deprecate.rb +2 -0
- data/lib/active_model_serializers/deserialization.rb +2 -0
- data/lib/active_model_serializers/json_pointer.rb +2 -0
- data/lib/active_model_serializers/logging.rb +2 -0
- data/lib/active_model_serializers/lookup_chain.rb +2 -0
- data/lib/active_model_serializers/model.rb +2 -0
- data/lib/active_model_serializers/model/caching.rb +25 -0
- data/lib/active_model_serializers/railtie.rb +4 -0
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
- data/lib/active_model_serializers/serializable_resource.rb +4 -2
- data/lib/active_model_serializers/serialization_context.rb +2 -0
- data/lib/active_model_serializers/test.rb +2 -0
- data/lib/active_model_serializers/test/schema.rb +2 -0
- data/lib/active_model_serializers/test/serializer.rb +2 -0
- data/lib/generators/rails/resource_override.rb +2 -0
- data/lib/generators/rails/serializer_generator.rb +2 -0
- data/lib/grape/active_model_serializers.rb +2 -0
- data/lib/grape/formatters/active_model_serializers.rb +2 -0
- data/lib/grape/helpers/active_model_serializers.rb +2 -0
- data/lib/tasks/rubocop.rake +2 -0
- metadata +70 -295
- data/.github/ISSUE_TEMPLATE.md +0 -29
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
- data/.gitignore +0 -35
- data/.rubocop.yml +0 -105
- data/.simplecov +0 -110
- data/.travis.yml +0 -52
- data/CODE_OF_CONDUCT.md +0 -74
- data/CONTRIBUTING.md +0 -105
- data/Gemfile +0 -72
- data/Rakefile +0 -74
- data/active_model_serializers.gemspec +0 -63
- data/appveyor.yml +0 -28
- data/bin/bench +0 -171
- data/bin/bench_regression +0 -316
- data/bin/rubocop +0 -38
- data/bin/serve_benchmark +0 -39
- data/docs/README.md +0 -41
- data/docs/STYLE.md +0 -58
- data/docs/general/adapters.md +0 -269
- data/docs/general/caching.md +0 -58
- data/docs/general/configuration_options.md +0 -185
- data/docs/general/deserialization.md +0 -100
- data/docs/general/fields.md +0 -31
- data/docs/general/getting_started.md +0 -133
- data/docs/general/instrumentation.md +0 -40
- data/docs/general/key_transforms.md +0 -40
- data/docs/general/logging.md +0 -21
- data/docs/general/rendering.md +0 -293
- data/docs/general/serializers.md +0 -483
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +0 -138
- data/docs/howto/add_relationship_links.md +0 -140
- data/docs/howto/add_root_key.md +0 -62
- data/docs/howto/grape_integration.md +0 -42
- data/docs/howto/outside_controller_use.md +0 -66
- data/docs/howto/passing_arbitrary_options.md +0 -27
- data/docs/howto/serialize_poro.md +0 -73
- data/docs/howto/test.md +0 -154
- data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
- data/docs/integrations/ember-and-json-api.md +0 -147
- data/docs/integrations/grape.md +0 -19
- data/docs/jsonapi/errors.md +0 -56
- data/docs/jsonapi/schema.md +0 -151
- data/docs/jsonapi/schema/schema.json +0 -366
- data/docs/rfcs/0000-namespace.md +0 -106
- data/docs/rfcs/template.md +0 -15
- data/test/action_controller/adapter_selector_test.rb +0 -62
- data/test/action_controller/explicit_serializer_test.rb +0 -135
- data/test/action_controller/json/include_test.rb +0 -246
- data/test/action_controller/json_api/deserialization_test.rb +0 -112
- data/test/action_controller/json_api/errors_test.rb +0 -40
- data/test/action_controller/json_api/fields_test.rb +0 -66
- data/test/action_controller/json_api/linked_test.rb +0 -202
- data/test/action_controller/json_api/pagination_test.rb +0 -124
- data/test/action_controller/json_api/transform_test.rb +0 -189
- data/test/action_controller/lookup_proc_test.rb +0 -49
- data/test/action_controller/namespace_lookup_test.rb +0 -232
- data/test/action_controller/serialization_scope_name_test.rb +0 -235
- data/test/action_controller/serialization_test.rb +0 -472
- data/test/active_model_serializers/adapter_for_test.rb +0 -208
- data/test/active_model_serializers/json_pointer_test.rb +0 -22
- data/test/active_model_serializers/logging_test.rb +0 -77
- data/test/active_model_serializers/model_test.rb +0 -142
- data/test/active_model_serializers/railtie_test_isolated.rb +0 -68
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -161
- data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -71
- data/test/active_model_serializers/test/schema_test.rb +0 -131
- data/test/active_model_serializers/test/serializer_test.rb +0 -62
- data/test/active_record_test.rb +0 -9
- data/test/adapter/attributes_test.rb +0 -40
- data/test/adapter/deprecation_test.rb +0 -100
- data/test/adapter/json/belongs_to_test.rb +0 -45
- data/test/adapter/json/collection_test.rb +0 -104
- data/test/adapter/json/has_many_test.rb +0 -53
- data/test/adapter/json/transform_test.rb +0 -93
- data/test/adapter/json_api/belongs_to_test.rb +0 -155
- data/test/adapter/json_api/collection_test.rb +0 -96
- data/test/adapter/json_api/errors_test.rb +0 -76
- data/test/adapter/json_api/fields_test.rb +0 -96
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
- data/test/adapter/json_api/has_many_test.rb +0 -173
- data/test/adapter/json_api/has_one_test.rb +0 -80
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -213
- data/test/adapter/json_api/json_api_test.rb +0 -33
- data/test/adapter/json_api/linked_test.rb +0 -413
- data/test/adapter/json_api/links_test.rb +0 -95
- data/test/adapter/json_api/pagination_links_test.rb +0 -206
- data/test/adapter/json_api/parse_test.rb +0 -137
- data/test/adapter/json_api/relationship_test.rb +0 -397
- data/test/adapter/json_api/resource_meta_test.rb +0 -100
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
- data/test/adapter/json_api/transform_test.rb +0 -512
- data/test/adapter/json_api/type_test.rb +0 -193
- data/test/adapter/json_test.rb +0 -46
- data/test/adapter/null_test.rb +0 -22
- data/test/adapter/polymorphic_test.rb +0 -218
- data/test/adapter_test.rb +0 -67
- data/test/array_serializer_test.rb +0 -22
- data/test/benchmark/app.rb +0 -65
- data/test/benchmark/benchmarking_support.rb +0 -67
- data/test/benchmark/bm_active_record.rb +0 -81
- data/test/benchmark/bm_adapter.rb +0 -38
- data/test/benchmark/bm_caching.rb +0 -119
- data/test/benchmark/bm_lookup_chain.rb +0 -83
- data/test/benchmark/bm_transform.rb +0 -45
- data/test/benchmark/config.ru +0 -3
- data/test/benchmark/controllers.rb +0 -83
- data/test/benchmark/fixtures.rb +0 -219
- data/test/cache_test.rb +0 -651
- data/test/collection_serializer_test.rb +0 -127
- data/test/fixtures/active_record.rb +0 -113
- data/test/fixtures/poro.rb +0 -225
- data/test/generators/scaffold_controller_generator_test.rb +0 -24
- data/test/generators/serializer_generator_test.rb +0 -75
- data/test/grape_test.rb +0 -196
- data/test/lint_test.rb +0 -49
- data/test/logger_test.rb +0 -20
- data/test/poro_test.rb +0 -9
- data/test/serializable_resource_test.rb +0 -79
- data/test/serializers/association_macros_test.rb +0 -37
- data/test/serializers/associations_test.rb +0 -468
- data/test/serializers/attribute_test.rb +0 -153
- data/test/serializers/attributes_test.rb +0 -52
- data/test/serializers/caching_configuration_test_isolated.rb +0 -170
- data/test/serializers/configuration_test.rb +0 -32
- data/test/serializers/fieldset_test.rb +0 -14
- data/test/serializers/meta_test.rb +0 -202
- data/test/serializers/options_test.rb +0 -32
- data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
- data/test/serializers/reflection_test.rb +0 -427
- data/test/serializers/root_test.rb +0 -21
- data/test/serializers/serialization_test.rb +0 -55
- data/test/serializers/serializer_for_test.rb +0 -136
- data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/isolated_unit.rb +0 -84
- data/test/support/rails5_shims.rb +0 -53
- data/test/support/rails_app.rb +0 -38
- data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
- data/test/support/schemas/custom/show.json +0 -7
- data/test/support/schemas/hyper_schema.json +0 -93
- data/test/support/schemas/render_using_json_api.json +0 -43
- data/test/support/schemas/simple_json_pointers.json +0 -10
- data/test/support/serialization_testing.rb +0 -79
- data/test/test_helper.rb +0 -70
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3c046246492aa51d55bec5b8ce5d2a97d9cd0ff8dba206cdde613f47aca0230e
|
|
4
|
+
data.tar.gz: 3621cbc3e965bc80389e08b40483b6de73e4a7c7ba7ac96315e1d6e5ee2995e9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6fca5a15965145969a683b4f3466a067812ae6680a6a171e885854b6e8e1a684685cb0b37b6ffd52045c8404a95237ddfdd45628e39c0e33a779512ee5a56f5b
|
|
7
|
+
data.tar.gz: c32438302db80117e82bec0964c58177cca8579765e5169d127b423927430ab2cff2c51f8b6858e09ea53044b8cf6205524398d0a2e8560738499e9e80983dfa
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## 0.10.x
|
|
2
2
|
|
|
3
|
-
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.
|
|
3
|
+
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.12...0-10-stable)
|
|
4
4
|
|
|
5
5
|
Breaking changes:
|
|
6
6
|
|
|
@@ -10,6 +10,67 @@ Fixes:
|
|
|
10
10
|
|
|
11
11
|
Misc:
|
|
12
12
|
|
|
13
|
+
### [v0.10.12 (2020-12-10)](https://github.com/rails-api/active_model_serializers/compare/v0.10.11...v0.10.12)
|
|
14
|
+
|
|
15
|
+
Fixes:
|
|
16
|
+
|
|
17
|
+
- [#2398](https://github.com/rails-api/active_model_serializers/pull/2398) Update rails dependency to < 6.2 (@ritikesh)
|
|
18
|
+
|
|
19
|
+
### [v0.10.11 (2020-12-04)](https://github.com/rails-api/active_model_serializers/compare/v0.10.10...v0.10.11)
|
|
20
|
+
|
|
21
|
+
Features:
|
|
22
|
+
|
|
23
|
+
- [#2361](https://github.com/rails-api/active_model_serializers/pull/2361) Add `ActiveModelSerializers.config.use_sha1_digests` to allow customization of the hashing algorithm used for serializer caching (@alexzherdev)
|
|
24
|
+
|
|
25
|
+
Fixes:
|
|
26
|
+
|
|
27
|
+
- [#2344](https://github.com/rails-api/active_model_serializers/pull/2344) Fixes #2341 introduced since #2223 (@wasifhossain)
|
|
28
|
+
- [#2395](https://github.com/rails-api/active_model_serializers/pull/2395) remove explicit require for thread_safe (@ritikesh)
|
|
29
|
+
|
|
30
|
+
### [v0.10.10 (2019-07-13)](https://github.com/rails-api/active_model_serializers/compare/v0.10.9...v0.10.10)
|
|
31
|
+
|
|
32
|
+
Fixes:
|
|
33
|
+
|
|
34
|
+
- [#2319](https://github.com/rails-api/active_model_serializers/pull/2319) Fixes #2316. (@kylekeesling)
|
|
35
|
+
- Fix Rails 6.0 deprication warnings
|
|
36
|
+
- update test fixture schema to use `timestamps` instead of `timestamp`
|
|
37
|
+
- [#2223](https://github.com/rails-api/active_model_serializers/pull/2223) Support Fieldset in Attributes/JSON adapters documented in [docs/general/fields.md](https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/fields.md) that worked partially before (@bf4)
|
|
38
|
+
- [#2337](https://github.com/rails-api/active_model_serializers/pull/2337) fix incorrect belongs_to serialization when foreign_key on object and belongs_to is blank (@InteNs)
|
|
39
|
+
- Fixes incorrect json-api generation when `jsonapi_use_foreign_key_on_belongs_to_relationship` is `true` and the relationship is blank
|
|
40
|
+
- [#2172](https://github.com/rails-api/active_model_serializers/pull/2172) Preserve the namespace when falling back to a superclass serializer
|
|
41
|
+
|
|
42
|
+
Misc:
|
|
43
|
+
|
|
44
|
+
- [#2327](https://github.com/rails-api/active_model_serializers/pull/2327) Add support for Ruby 2.6 on Travis CI (@wasifhossain)
|
|
45
|
+
- [#2304](https://github.com/rails-api/active_model_serializers/pull/2304) Slim down bundled gem by excluding test files and docs (@greysteil)
|
|
46
|
+
|
|
47
|
+
### [v0.10.9 (2019-02-08)](https://github.com/rails-api/active_model_serializers/compare/v0.10.8...v0.10.9)
|
|
48
|
+
|
|
49
|
+
Fixes:
|
|
50
|
+
|
|
51
|
+
- [#2288](https://github.com/rails-api/active_model_serializers/pull/2288)
|
|
52
|
+
Change the fetch method to deal with recyclable key cache strategy.
|
|
53
|
+
Fixes #2287. (@cintamani, @wasifhossain)
|
|
54
|
+
- [#2307](https://github.com/rails-api/active_model_serializers/pull/2307) Falsey attribute values should not be reevaluated.
|
|
55
|
+
|
|
56
|
+
Misc:
|
|
57
|
+
|
|
58
|
+
- [#2309](https://github.com/rails-api/active_model_serializers/pull/2309) Performance and memory usage fixes
|
|
59
|
+
|
|
60
|
+
### [v0.10.8 (2018-11-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...v0.10.8)
|
|
61
|
+
|
|
62
|
+
Features:
|
|
63
|
+
- [#2279](https://github.com/rails-api/active_model_serializers/pull/2279) Support condition options in serializer link statements
|
|
64
|
+
|
|
65
|
+
Fixes:
|
|
66
|
+
|
|
67
|
+
- [#2296](https://github.com/rails-api/active_model_serializers/pull/2296) Fixes #2295 (@Hirurg103)
|
|
68
|
+
- Fix finding of namespaced serializer and non-namespaced model.
|
|
69
|
+
- [#2289](https://github.com/rails-api/active_model_serializers/pull/2289) Fixes #2255 (@f-mer)
|
|
70
|
+
- Fix autoloading race condition, especially in Rails 5.
|
|
71
|
+
- [#2299](https://github.com/rails-api/active_model_serializers/pull/2299) Fixes #2270 (@chau-bao-long via #2276)
|
|
72
|
+
- Fix reflection thread-safety bug
|
|
73
|
+
|
|
13
74
|
### [v0.10.7 (2017-11-14)](https://github.com/rails-api/active_model_serializers/compare/v0.10.6...v0.10.7)
|
|
14
75
|
|
|
15
76
|
Regressions Fixed From v0.10.6:
|
data/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<tr>
|
|
5
5
|
<td>Build Status</td>
|
|
6
6
|
<td>
|
|
7
|
-
<a href="https://travis-ci.org/rails-api/active_model_serializers"><img src="https://travis-ci.org/rails-api/active_model_serializers.svg?branch=
|
|
8
|
-
<a href="https://ci.appveyor.com/project/
|
|
7
|
+
<a href="https://travis-ci.org/rails-api/active_model_serializers"><img src="https://api.travis-ci.org/rails-api/active_model_serializers.svg?branch=0-10-stable" alt="Build Status" ></a>
|
|
8
|
+
<a href="https://ci.appveyor.com/project/bf4/active-model-serializers/branch/0-10-stable"><img src="https://ci.appveyor.com/api/projects/status/x6xdjydutm54gvyt/branch/master?svg=true" alt="Build status"></a>
|
|
9
9
|
</td>
|
|
10
10
|
</tr>
|
|
11
11
|
<tr>
|
|
@@ -41,7 +41,7 @@ these methods to the adapter.)
|
|
|
41
41
|
|
|
42
42
|
By default ActiveModelSerializers will use the **Attributes Adapter** (no JSON root).
|
|
43
43
|
But we strongly advise you to use **JsonApi Adapter**, which
|
|
44
|
-
follows 1.0 of the format specified in [jsonapi.org/format](
|
|
44
|
+
follows 1.0 of the format specified in [jsonapi.org/format](https://jsonapi.org/format).
|
|
45
45
|
Check how to change the adapter in the sections below.
|
|
46
46
|
|
|
47
47
|
`0.10.x` is **not** backward compatible with `0.9.x` nor `0.8.x`.
|
|
@@ -75,9 +75,9 @@ More information is available in the [Guides](docs) and
|
|
|
75
75
|
If you find a bug, please report an [Issue](https://github.com/rails-api/active_model_serializers/issues/new)
|
|
76
76
|
and see our [contributing guide](CONTRIBUTING.md).
|
|
77
77
|
|
|
78
|
-
If you have a question, please [post to Stack Overflow](
|
|
78
|
+
If you have a question, please [post to Stack Overflow](https://stackoverflow.com/questions/tagged/active-model-serializers).
|
|
79
79
|
|
|
80
|
-
If you'd like to chat, we have a [community slack](
|
|
80
|
+
If you'd like to chat, we have a [community slack](https://amserializers.herokuapp.com).
|
|
81
81
|
|
|
82
82
|
Thanks!
|
|
83
83
|
|
|
@@ -87,14 +87,14 @@ If you're reading this at https://github.com/rails-api/active_model_serializers
|
|
|
87
87
|
reading documentation for our `master`, which may include features that have not
|
|
88
88
|
been released yet. Please see below for the documentation relevant to you.
|
|
89
89
|
|
|
90
|
-
- [0.10 (
|
|
91
|
-
- [0.10.
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
- [0.10 (0-10-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-10-stable)
|
|
91
|
+
- [0.10.10 (latest release) Documentation](https://github.com/rails-api/active_model_serializers/tree/v0.10.10)
|
|
92
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.10.10)
|
|
93
|
+
- [Guides](docs)
|
|
94
94
|
- [0.9 (0-9-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-9-stable)
|
|
95
|
-
|
|
95
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.9.7)
|
|
96
96
|
- [0.8 (0-8-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-8-stable)
|
|
97
|
-
|
|
97
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.8.4)
|
|
98
98
|
|
|
99
99
|
|
|
100
100
|
## High-level behavior
|
|
@@ -171,12 +171,12 @@ The original design is also available [here](https://github.com/rails-api/active
|
|
|
171
171
|
|
|
172
172
|
### ActiveModel::Serializer
|
|
173
173
|
|
|
174
|
-
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/
|
|
174
|
+
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/master/activemodel/lib/active_model/serialization.rb)
|
|
175
175
|
and exposes an `attributes` method, among a few others.
|
|
176
176
|
It allows you to specify which attributes and associations should be represented in the serializatation of the resource.
|
|
177
177
|
It requires an adapter to transform its attributes into a JSON document; it cannot be serialized itself.
|
|
178
178
|
It may be useful to think of it as a
|
|
179
|
-
[presenter](
|
|
179
|
+
[presenter](https://blog.steveklabnik.com/posts/2011-09-09-better-ruby-presenters).
|
|
180
180
|
|
|
181
181
|
#### ActiveModel::CollectionSerializer
|
|
182
182
|
|
|
@@ -188,7 +188,7 @@ and, if there is no serializer, primitives.
|
|
|
188
188
|
The **`ActiveModelSerializers::Adapter::Base`** describes the structure of the JSON document generated from a
|
|
189
189
|
serializer. For example, the `Attributes` example represents each serializer as its
|
|
190
190
|
unmodified attributes. The `JsonApi` adapter represents the serializer as a [JSON
|
|
191
|
-
API](
|
|
191
|
+
API](https://jsonapi.org/) document.
|
|
192
192
|
|
|
193
193
|
### ActiveModelSerializers::SerializableResource
|
|
194
194
|
|
|
@@ -229,7 +229,7 @@ High-level overview:
|
|
|
229
229
|
- `:each_serializer` specifies the serializer for each resource in the collection.
|
|
230
230
|
- For a **single resource**, the `:serializer` option is the resource serializer.
|
|
231
231
|
- Options are partitioned in serializer options and adapter options. Keys for adapter options are specified by
|
|
232
|
-
[`ADAPTER_OPTION_KEYS`](
|
|
232
|
+
[`ADAPTER_OPTION_KEYS`](lib/active_model_serializers/serializable_resource.rb#L5).
|
|
233
233
|
The remaining options are serializer options.
|
|
234
234
|
|
|
235
235
|
Details:
|
|
@@ -254,7 +254,7 @@ Details:
|
|
|
254
254
|
2. `adapter_instance = ActiveModel::Serializer::Adapter.create(serializer_instance, adapter_opts)`
|
|
255
255
|
1. **ActiveModel::Serializer::CollectionSerializer#new**
|
|
256
256
|
1. If the `serializer_instance` was a `CollectionSerializer` and the `:serializer` serializer_opts
|
|
257
|
-
is present, then [that serializer is passed into each resource](https://github.com/rails-api/active_model_serializers/blob/
|
|
257
|
+
is present, then [that serializer is passed into each resource](https://github.com/rails-api/active_model_serializers/blob/0-10-stable/lib/active_model/serializer/collection_serializer.rb#L77-L79).
|
|
258
258
|
1. **ActiveModel::Serializer#attributes** is used by the adapter to get the attributes for
|
|
259
259
|
resource as defined by the serializer.
|
|
260
260
|
|
|
@@ -266,11 +266,11 @@ to know about, but not part of ActiveModelSerializers.)
|
|
|
266
266
|
|
|
267
267
|
- An `ActiveRecord::Base` object.
|
|
268
268
|
- Any Ruby object that passes the
|
|
269
|
-
[Lint](
|
|
270
|
-
[code](
|
|
269
|
+
[Lint](https://www.rubydoc.info/gems/active_model_serializers/ActiveModel/Serializer/Lint/Tests)
|
|
270
|
+
[(code)](lib/active_model/serializer/lint.rb).
|
|
271
271
|
|
|
272
272
|
ActiveModelSerializers provides a
|
|
273
|
-
[`ActiveModelSerializers::Model`](
|
|
273
|
+
[`ActiveModelSerializers::Model`](lib/active_model_serializers/model.rb),
|
|
274
274
|
which is a simple serializable PORO (Plain-Old Ruby Object).
|
|
275
275
|
|
|
276
276
|
`ActiveModelSerializers::Model` may be used either as a reference implementation, or in production code.
|
|
@@ -298,7 +298,7 @@ ActiveModelSerializers::SerializableResource.new(MyModel.new(level: 'awesome'),
|
|
|
298
298
|
|
|
299
299
|
## Semantic Versioning
|
|
300
300
|
|
|
301
|
-
This project adheres to [semver](
|
|
301
|
+
This project adheres to [semver](https://semver.org/)
|
|
302
302
|
|
|
303
303
|
## Contributing
|
|
304
304
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'active_support/core_ext/class/attribute'
|
|
2
4
|
require 'active_model_serializers/serialization_context'
|
|
3
5
|
|
|
@@ -21,7 +23,15 @@ module ActionController
|
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def namespace_for_serializer
|
|
24
|
-
@namespace_for_serializer ||= self.class
|
|
26
|
+
@namespace_for_serializer ||= namespace_for_class(self.class) unless namespace_for_class(self.class) == Object
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def namespace_for_class(klass)
|
|
30
|
+
if Module.method_defined?(:module_parent)
|
|
31
|
+
klass.module_parent
|
|
32
|
+
else
|
|
33
|
+
klass.parent
|
|
34
|
+
end
|
|
25
35
|
end
|
|
26
36
|
|
|
27
37
|
def serialization_scope
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'jsonapi/include_directive'
|
|
3
4
|
require 'active_model/serializer/collection_serializer'
|
|
4
5
|
require 'active_model/serializer/array_serializer'
|
|
@@ -18,16 +19,17 @@ module ActiveModel
|
|
|
18
19
|
# @see #serializable_hash for more details on these valid keys.
|
|
19
20
|
SERIALIZABLE_HASH_VALID_KEYS = [:only, :except, :methods, :include, :root].freeze
|
|
20
21
|
extend ActiveSupport::Autoload
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
eager_autoload do
|
|
23
|
+
autoload :Adapter
|
|
24
|
+
autoload :Null
|
|
25
|
+
autoload :Attribute
|
|
26
|
+
autoload :Link
|
|
27
|
+
autoload :Association
|
|
28
|
+
autoload :Reflection
|
|
29
|
+
autoload :BelongsToReflection
|
|
30
|
+
autoload :HasOneReflection
|
|
31
|
+
autoload :HasManyReflection
|
|
32
|
+
end
|
|
31
33
|
include ActiveSupport::Configurable
|
|
32
34
|
include Caching
|
|
33
35
|
|
|
@@ -70,7 +72,7 @@ module ActiveModel
|
|
|
70
72
|
# Used to cache serializer name => serializer class
|
|
71
73
|
# when looked up by Serializer.get_serializer_for.
|
|
72
74
|
def self.serializers_cache
|
|
73
|
-
@serializers_cache ||=
|
|
75
|
+
@serializers_cache ||= Concurrent::Map.new
|
|
74
76
|
end
|
|
75
77
|
|
|
76
78
|
# @api private
|
|
@@ -91,7 +93,7 @@ module ActiveModel
|
|
|
91
93
|
if serializer_class
|
|
92
94
|
serializer_class
|
|
93
95
|
elsif klass.superclass
|
|
94
|
-
get_serializer_for(klass.superclass)
|
|
96
|
+
get_serializer_for(klass.superclass, namespace)
|
|
95
97
|
else
|
|
96
98
|
nil # No serializer found
|
|
97
99
|
end
|
|
@@ -275,9 +277,14 @@ module ActiveModel
|
|
|
275
277
|
# link(:self) { "http://example.com/resource/#{object.id}" }
|
|
276
278
|
# @example
|
|
277
279
|
# link :resource, "http://example.com/resource"
|
|
280
|
+
# @example
|
|
281
|
+
# link(:callback, if: :internal?), { "http://example.com/callback" }
|
|
278
282
|
#
|
|
279
|
-
def self.link(name,
|
|
280
|
-
|
|
283
|
+
def self.link(name, *args, &block)
|
|
284
|
+
options = args.extract_options!
|
|
285
|
+
# For compatibility with the use case of passing link directly as string argument
|
|
286
|
+
# without block, we are creating a wrapping block
|
|
287
|
+
_links[name] = Link.new(name, options, block || ->(_serializer) { args.first })
|
|
281
288
|
end
|
|
282
289
|
|
|
283
290
|
# Set the JSON API meta attribute of a serializer.
|
|
@@ -341,7 +348,7 @@ module ActiveModel
|
|
|
341
348
|
return Enumerator.new {} unless object
|
|
342
349
|
|
|
343
350
|
Enumerator.new do |y|
|
|
344
|
-
self.class._reflections.each do |key, reflection|
|
|
351
|
+
(self.instance_reflections ||= self.class._reflections.deep_dup).each do |key, reflection|
|
|
345
352
|
next if reflection.excluded?(self)
|
|
346
353
|
next unless include_directive.key?(key)
|
|
347
354
|
|
|
@@ -357,6 +364,9 @@ module ActiveModel
|
|
|
357
364
|
def serializable_hash(adapter_options = nil, options = {}, adapter_instance = self.class.serialization_adapter_instance)
|
|
358
365
|
adapter_options ||= {}
|
|
359
366
|
options[:include_directive] ||= ActiveModel::Serializer.include_directive_from_options(adapter_options)
|
|
367
|
+
if (fieldset = adapter_options[:fieldset])
|
|
368
|
+
options[:fields] = fieldset.fields_for(json_key)
|
|
369
|
+
end
|
|
360
370
|
resource = attributes_hash(adapter_options, options, adapter_instance)
|
|
361
371
|
relationships = associations_hash(adapter_options, options, adapter_instance)
|
|
362
372
|
resource.merge(relationships)
|
|
@@ -371,7 +381,12 @@ module ActiveModel
|
|
|
371
381
|
|
|
372
382
|
# Used by adapter as resource root.
|
|
373
383
|
def json_key
|
|
374
|
-
root || _type ||
|
|
384
|
+
root || _type ||
|
|
385
|
+
begin
|
|
386
|
+
object.class.model_name.to_s.underscore
|
|
387
|
+
rescue ArgumentError
|
|
388
|
+
'anonymous_object'
|
|
389
|
+
end
|
|
375
390
|
end
|
|
376
391
|
|
|
377
392
|
def read_attribute_for_serialization(attr)
|
|
@@ -405,6 +420,6 @@ module ActiveModel
|
|
|
405
420
|
|
|
406
421
|
protected
|
|
407
422
|
|
|
408
|
-
attr_accessor :instance_options
|
|
423
|
+
attr_accessor :instance_options, :instance_reflections
|
|
409
424
|
end
|
|
410
425
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModel
|
|
2
4
|
class Serializer
|
|
3
5
|
class CollectionSerializer
|
|
@@ -19,11 +21,10 @@ module ActiveModel
|
|
|
19
21
|
|
|
20
22
|
# @api private
|
|
21
23
|
def serializable_hash(adapter_options, options, adapter_instance)
|
|
22
|
-
include_directive
|
|
23
|
-
|
|
24
|
-
adapter_opts = adapter_options.merge(include_directive: include_directive)
|
|
24
|
+
options[:include_directive] ||= ActiveModel::Serializer.include_directive_from_options(adapter_options)
|
|
25
|
+
options[:cached_attributes] ||= ActiveModel::Serializer.cache_read_multi(self, adapter_instance, options[:include_directive])
|
|
25
26
|
serializers.map do |serializer|
|
|
26
|
-
serializer.serializable_hash(
|
|
27
|
+
serializer.serializable_hash(adapter_options, options, adapter_instance)
|
|
27
28
|
end
|
|
28
29
|
end
|
|
29
30
|
|
|
@@ -48,8 +49,7 @@ module ActiveModel
|
|
|
48
49
|
# 4. key may be nil for empty collection and no serializer option
|
|
49
50
|
key &&= key.pluralize
|
|
50
51
|
# 5. fail if the key cannot be determined
|
|
51
|
-
key || fail(ArgumentError, 'Cannot infer root key from collection type. Please
|
|
52
|
-
specify the root or each_serializer option, or render a JSON String')
|
|
52
|
+
key || fail(ArgumentError, 'Cannot infer root key from collection type. Please specify the root or each_serializer option, or render a JSON String')
|
|
53
53
|
end
|
|
54
54
|
# rubocop:enable Metrics/CyclomaticComplexity
|
|
55
55
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModel
|
|
2
4
|
class Serializer
|
|
3
5
|
UndefinedCacheKey = Class.new(StandardError)
|
|
@@ -54,7 +56,8 @@ module ActiveModel
|
|
|
54
56
|
def digest_caller_file(caller_line)
|
|
55
57
|
serializer_file_path = caller_line[CALLER_FILE]
|
|
56
58
|
serializer_file_contents = IO.read(serializer_file_path)
|
|
57
|
-
Digest::MD5
|
|
59
|
+
algorithm = ActiveModelSerializers.config.use_sha1_digests ? Digest::SHA1 : Digest::MD5
|
|
60
|
+
algorithm.hexdigest(serializer_file_contents)
|
|
58
61
|
rescue TypeError, Errno::ENOENT
|
|
59
62
|
warn <<-EOF.strip_heredoc
|
|
60
63
|
Cannot digest non-existent file: '#{caller_line}'.
|
|
@@ -281,7 +284,9 @@ module ActiveModel
|
|
|
281
284
|
# Use object's cache_key if available, else derive a key from the object
|
|
282
285
|
# Pass the `key` option to the `cache` declaration or override this method to customize the cache key
|
|
283
286
|
def object_cache_key
|
|
284
|
-
if object.respond_to?(:
|
|
287
|
+
if object.respond_to?(:cache_key_with_version)
|
|
288
|
+
object.cache_key_with_version
|
|
289
|
+
elsif object.respond_to?(:cache_key)
|
|
285
290
|
object.cache_key
|
|
286
291
|
elsif (serializer_cache_key = (serializer_class._cache_key || serializer_class._cache_options[:key]))
|
|
287
292
|
object_time_safe = object.updated_at
|