active_model_serializers 0.10.7 → 0.10.14
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 +82 -1
- data/README.md +20 -21
- data/lib/action_controller/serialization.rb +11 -1
- data/lib/active_model/serializable_resource.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/adapter.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 +16 -7
- 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/serializer.rb +35 -18
- 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/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 +7 -1
- 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/json_api.rb +14 -9
- data/lib/active_model_serializers/adapter/null.rb +2 -0
- data/lib/active_model_serializers/adapter.rb +3 -1
- 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/caching.rb +26 -0
- data/lib/active_model_serializers/model.rb +2 -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/schema.rb +2 -0
- data/lib/active_model_serializers/test/serializer.rb +2 -0
- data/lib/active_model_serializers/test.rb +2 -0
- data/lib/active_model_serializers.rb +20 -10
- 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 +8 -1
- metadata +53 -328
- 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/schema.json +0 -366
- data/docs/jsonapi/schema.md +0 -151
- 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: a13b22c104aeac8d5b49838651108a46258086be75cb7182bdbef7f601d26a6a
|
|
4
|
+
data.tar.gz: 7e850d63eae10d35ff5aab27ed5dc68ae812f4abc9a73f087b43ee6e45f1daf9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fab668ed255d0dfe2ad31b0b23209cfb2abbbcbd37812ffa4b1cbfb94990f54d1c422891a7a2559afe3df763547a25adafd1e817a9fda88303be313ecf7932de
|
|
7
|
+
data.tar.gz: 7938ab426800e33de45f3bf5b75f65941178fc7bf5416ac06363125cee8f66dcce53068dce1298cb40c07a90ac3348df69711e73f3e030d3b1e0b06b2a3d9f34
|
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.14...0-10-stable)
|
|
4
4
|
|
|
5
5
|
Breaking changes:
|
|
6
6
|
|
|
@@ -10,6 +10,87 @@ Fixes:
|
|
|
10
10
|
|
|
11
11
|
Misc:
|
|
12
12
|
|
|
13
|
+
### [v0.10.14 (2023-10-05)](https://github.com/rails-api/active_model_serializers/compare/v0.10.13...v0.10.14)
|
|
14
|
+
|
|
15
|
+
Breaking changes:
|
|
16
|
+
|
|
17
|
+
Features:
|
|
18
|
+
|
|
19
|
+
Fixes:
|
|
20
|
+
- [#2427](https://github.com/rails-api/active_model_serializers/pull/2427) Fix checking of method defined or not (@y-yagi)
|
|
21
|
+
|
|
22
|
+
Misc:
|
|
23
|
+
- [#2453](https://github.com/rails-api/active_model_serializers/pull/2453) Update gem requirement to allow Rails 7.1 (@schinery, @mediafinger)
|
|
24
|
+
- [#2451](https://github.com/rails-api/active_model_serializers/pull/2451) Upgrade to Ubuntu 22.04 on Github Actions (@wasifhossain)
|
|
25
|
+
- [#2442](https://github.com/rails-api/active_model_serializers/pull/2442) Remove travis settings (@ohbarye)
|
|
26
|
+
|
|
27
|
+
### [v0.10.13 (2022-10-13)](https://github.com/rails-api/active_model_serializers/compare/v0.10.12...v0.10.13)
|
|
28
|
+
|
|
29
|
+
Fixes:
|
|
30
|
+
|
|
31
|
+
- [#2399](https://github.com/rails-api/active_model_serializers/pull/2399) Handles edge case where requested current_page > total_pages (@f3z0)
|
|
32
|
+
|
|
33
|
+
### [v0.10.12 (2020-12-10)](https://github.com/rails-api/active_model_serializers/compare/v0.10.11...v0.10.12)
|
|
34
|
+
|
|
35
|
+
Fixes:
|
|
36
|
+
|
|
37
|
+
- [#2398](https://github.com/rails-api/active_model_serializers/pull/2398) Update rails dependency to < 6.2 (@ritikesh)
|
|
38
|
+
|
|
39
|
+
### [v0.10.11 (2020-12-04)](https://github.com/rails-api/active_model_serializers/compare/v0.10.10...v0.10.11)
|
|
40
|
+
|
|
41
|
+
Features:
|
|
42
|
+
|
|
43
|
+
- [#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)
|
|
44
|
+
|
|
45
|
+
Fixes:
|
|
46
|
+
|
|
47
|
+
- [#2344](https://github.com/rails-api/active_model_serializers/pull/2344) Fixes #2341 introduced since #2223 (@wasifhossain)
|
|
48
|
+
- [#2395](https://github.com/rails-api/active_model_serializers/pull/2395) remove explicit require for thread_safe (@ritikesh)
|
|
49
|
+
|
|
50
|
+
### [v0.10.10 (2019-07-13)](https://github.com/rails-api/active_model_serializers/compare/v0.10.9...v0.10.10)
|
|
51
|
+
|
|
52
|
+
Fixes:
|
|
53
|
+
|
|
54
|
+
- [#2319](https://github.com/rails-api/active_model_serializers/pull/2319) Fixes #2316. (@kylekeesling)
|
|
55
|
+
- Fix Rails 6.0 deprication warnings
|
|
56
|
+
- update test fixture schema to use `timestamps` instead of `timestamp`
|
|
57
|
+
- [#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)
|
|
58
|
+
- [#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)
|
|
59
|
+
- Fixes incorrect json-api generation when `jsonapi_use_foreign_key_on_belongs_to_relationship` is `true` and the relationship is blank
|
|
60
|
+
- [#2172](https://github.com/rails-api/active_model_serializers/pull/2172) Preserve the namespace when falling back to a superclass serializer
|
|
61
|
+
|
|
62
|
+
Misc:
|
|
63
|
+
|
|
64
|
+
- [#2327](https://github.com/rails-api/active_model_serializers/pull/2327) Add support for Ruby 2.6 on Travis CI (@wasifhossain)
|
|
65
|
+
- [#2304](https://github.com/rails-api/active_model_serializers/pull/2304) Slim down bundled gem by excluding test files and docs (@greysteil)
|
|
66
|
+
|
|
67
|
+
### [v0.10.9 (2019-02-08)](https://github.com/rails-api/active_model_serializers/compare/v0.10.8...v0.10.9)
|
|
68
|
+
|
|
69
|
+
Fixes:
|
|
70
|
+
|
|
71
|
+
- [#2288](https://github.com/rails-api/active_model_serializers/pull/2288)
|
|
72
|
+
Change the fetch method to deal with recyclable key cache strategy.
|
|
73
|
+
Fixes #2287. (@cintamani, @wasifhossain)
|
|
74
|
+
- [#2307](https://github.com/rails-api/active_model_serializers/pull/2307) Falsey attribute values should not be reevaluated.
|
|
75
|
+
|
|
76
|
+
Misc:
|
|
77
|
+
|
|
78
|
+
- [#2309](https://github.com/rails-api/active_model_serializers/pull/2309) Performance and memory usage fixes
|
|
79
|
+
|
|
80
|
+
### [v0.10.8 (2018-11-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...v0.10.8)
|
|
81
|
+
|
|
82
|
+
Features:
|
|
83
|
+
- [#2279](https://github.com/rails-api/active_model_serializers/pull/2279) Support condition options in serializer link statements
|
|
84
|
+
|
|
85
|
+
Fixes:
|
|
86
|
+
|
|
87
|
+
- [#2296](https://github.com/rails-api/active_model_serializers/pull/2296) Fixes #2295 (@Hirurg103)
|
|
88
|
+
- Fix finding of namespaced serializer and non-namespaced model.
|
|
89
|
+
- [#2289](https://github.com/rails-api/active_model_serializers/pull/2289) Fixes #2255 (@f-mer)
|
|
90
|
+
- Fix autoloading race condition, especially in Rails 5.
|
|
91
|
+
- [#2299](https://github.com/rails-api/active_model_serializers/pull/2299) Fixes #2270 (@chau-bao-long via #2276)
|
|
92
|
+
- Fix reflection thread-safety bug
|
|
93
|
+
|
|
13
94
|
### [v0.10.7 (2017-11-14)](https://github.com/rails-api/active_model_serializers/compare/v0.10.6...v0.10.7)
|
|
14
95
|
|
|
15
96
|
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://
|
|
8
|
-
<a href="https://ci.appveyor.com/project/
|
|
7
|
+
<a href="https://github.com/rails-api/active_model_serializers/actions"><img src="https://github.com/rails-api/active_model_serializers/actions/workflows/ci.yml/badge.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>
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
<td>
|
|
14
14
|
<a href="https://codeclimate.com/github/rails-api/active_model_serializers"><img src="https://codeclimate.com/github/rails-api/active_model_serializers/badges/gpa.svg" alt="Code Quality"></a>
|
|
15
15
|
<a href="https://codebeat.co/projects/github-com-rails-api-active_model_serializers"><img src="https://codebeat.co/badges/a9ab35fa-8b5a-4680-9d4e-a81f9a55ebcd" alt="codebeat" ></a>
|
|
16
|
-
<a href="https://codeclimate.com/github/rails-api/active_model_serializers/coverage"><img src="https://codeclimate.com/github/rails-api/active_model_serializers/badges/coverage.svg" alt="Test Coverage"></a>
|
|
17
16
|
</td>
|
|
18
17
|
</tr>
|
|
19
18
|
<tr>
|
|
@@ -41,7 +40,7 @@ these methods to the adapter.)
|
|
|
41
40
|
|
|
42
41
|
By default ActiveModelSerializers will use the **Attributes Adapter** (no JSON root).
|
|
43
42
|
But we strongly advise you to use **JsonApi Adapter**, which
|
|
44
|
-
follows 1.0 of the format specified in [jsonapi.org/format](
|
|
43
|
+
follows 1.0 of the format specified in [jsonapi.org/format](https://jsonapi.org/format).
|
|
45
44
|
Check how to change the adapter in the sections below.
|
|
46
45
|
|
|
47
46
|
`0.10.x` is **not** backward compatible with `0.9.x` nor `0.8.x`.
|
|
@@ -75,9 +74,9 @@ More information is available in the [Guides](docs) and
|
|
|
75
74
|
If you find a bug, please report an [Issue](https://github.com/rails-api/active_model_serializers/issues/new)
|
|
76
75
|
and see our [contributing guide](CONTRIBUTING.md).
|
|
77
76
|
|
|
78
|
-
If you have a question, please [post to Stack Overflow](
|
|
77
|
+
If you have a question, please [post to Stack Overflow](https://stackoverflow.com/questions/tagged/active-model-serializers).
|
|
79
78
|
|
|
80
|
-
If you'd like to chat, we have a [community slack](
|
|
79
|
+
If you'd like to chat, we have a [community slack](https://amserializers.herokuapp.com).
|
|
81
80
|
|
|
82
81
|
Thanks!
|
|
83
82
|
|
|
@@ -87,14 +86,14 @@ If you're reading this at https://github.com/rails-api/active_model_serializers
|
|
|
87
86
|
reading documentation for our `master`, which may include features that have not
|
|
88
87
|
been released yet. Please see below for the documentation relevant to you.
|
|
89
88
|
|
|
90
|
-
- [0.10 (
|
|
91
|
-
- [0.10.
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
- [0.10 (0-10-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-10-stable)
|
|
90
|
+
- [0.10.10 (latest release) Documentation](https://github.com/rails-api/active_model_serializers/tree/v0.10.10)
|
|
91
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.10.10)
|
|
92
|
+
- [Guides](docs)
|
|
94
93
|
- [0.9 (0-9-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-9-stable)
|
|
95
|
-
|
|
94
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.9.7)
|
|
96
95
|
- [0.8 (0-8-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-8-stable)
|
|
97
|
-
|
|
96
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.8.4)
|
|
98
97
|
|
|
99
98
|
|
|
100
99
|
## High-level behavior
|
|
@@ -171,12 +170,12 @@ The original design is also available [here](https://github.com/rails-api/active
|
|
|
171
170
|
|
|
172
171
|
### ActiveModel::Serializer
|
|
173
172
|
|
|
174
|
-
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/
|
|
173
|
+
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/master/activemodel/lib/active_model/serialization.rb)
|
|
175
174
|
and exposes an `attributes` method, among a few others.
|
|
176
175
|
It allows you to specify which attributes and associations should be represented in the serializatation of the resource.
|
|
177
176
|
It requires an adapter to transform its attributes into a JSON document; it cannot be serialized itself.
|
|
178
177
|
It may be useful to think of it as a
|
|
179
|
-
[presenter](
|
|
178
|
+
[presenter](https://blog.steveklabnik.com/posts/2011-09-09-better-ruby-presenters).
|
|
180
179
|
|
|
181
180
|
#### ActiveModel::CollectionSerializer
|
|
182
181
|
|
|
@@ -188,7 +187,7 @@ and, if there is no serializer, primitives.
|
|
|
188
187
|
The **`ActiveModelSerializers::Adapter::Base`** describes the structure of the JSON document generated from a
|
|
189
188
|
serializer. For example, the `Attributes` example represents each serializer as its
|
|
190
189
|
unmodified attributes. The `JsonApi` adapter represents the serializer as a [JSON
|
|
191
|
-
API](
|
|
190
|
+
API](https://jsonapi.org/) document.
|
|
192
191
|
|
|
193
192
|
### ActiveModelSerializers::SerializableResource
|
|
194
193
|
|
|
@@ -229,7 +228,7 @@ High-level overview:
|
|
|
229
228
|
- `:each_serializer` specifies the serializer for each resource in the collection.
|
|
230
229
|
- For a **single resource**, the `:serializer` option is the resource serializer.
|
|
231
230
|
- Options are partitioned in serializer options and adapter options. Keys for adapter options are specified by
|
|
232
|
-
[`ADAPTER_OPTION_KEYS`](
|
|
231
|
+
[`ADAPTER_OPTION_KEYS`](lib/active_model_serializers/serializable_resource.rb#L5).
|
|
233
232
|
The remaining options are serializer options.
|
|
234
233
|
|
|
235
234
|
Details:
|
|
@@ -254,7 +253,7 @@ Details:
|
|
|
254
253
|
2. `adapter_instance = ActiveModel::Serializer::Adapter.create(serializer_instance, adapter_opts)`
|
|
255
254
|
1. **ActiveModel::Serializer::CollectionSerializer#new**
|
|
256
255
|
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/
|
|
256
|
+
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
257
|
1. **ActiveModel::Serializer#attributes** is used by the adapter to get the attributes for
|
|
259
258
|
resource as defined by the serializer.
|
|
260
259
|
|
|
@@ -266,11 +265,11 @@ to know about, but not part of ActiveModelSerializers.)
|
|
|
266
265
|
|
|
267
266
|
- An `ActiveRecord::Base` object.
|
|
268
267
|
- Any Ruby object that passes the
|
|
269
|
-
[Lint](
|
|
270
|
-
[code](
|
|
268
|
+
[Lint](https://www.rubydoc.info/gems/active_model_serializers/ActiveModel/Serializer/Lint/Tests)
|
|
269
|
+
[(code)](lib/active_model/serializer/lint.rb).
|
|
271
270
|
|
|
272
271
|
ActiveModelSerializers provides a
|
|
273
|
-
[`ActiveModelSerializers::Model`](
|
|
272
|
+
[`ActiveModelSerializers::Model`](lib/active_model_serializers/model.rb),
|
|
274
273
|
which is a simple serializable PORO (Plain-Old Ruby Object).
|
|
275
274
|
|
|
276
275
|
`ActiveModelSerializers::Model` may be used either as a reference implementation, or in production code.
|
|
@@ -298,7 +297,7 @@ ActiveModelSerializers::SerializableResource.new(MyModel.new(level: 'awesome'),
|
|
|
298
297
|
|
|
299
298
|
## Semantic Versioning
|
|
300
299
|
|
|
301
|
-
This project adheres to [semver](
|
|
300
|
+
This project adheres to [semver](https://semver.org/)
|
|
302
301
|
|
|
303
302
|
## Contributing
|
|
304
303
|
|
|
@@ -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,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
|
|
|
@@ -47,9 +48,11 @@ module ActiveModel
|
|
|
47
48
|
key ||= object.respond_to?(:name) ? object.name && object.name.underscore : nil
|
|
48
49
|
# 4. key may be nil for empty collection and no serializer option
|
|
49
50
|
key &&= key.pluralize
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
if raise_cannot_infer_root_key_error?
|
|
52
|
+
# 5. fail if the key cannot be determined
|
|
53
|
+
key || fail(CannotInferRootKeyError, 'Cannot infer root key from collection type. Please specify the root or each_serializer option, or render a JSON String')
|
|
54
|
+
end
|
|
55
|
+
key
|
|
53
56
|
end
|
|
54
57
|
# rubocop:enable Metrics/CyclomaticComplexity
|
|
55
58
|
|
|
@@ -60,12 +63,18 @@ module ActiveModel
|
|
|
60
63
|
object.respond_to?(:size)
|
|
61
64
|
end
|
|
62
65
|
|
|
66
|
+
class CannotInferRootKeyError < StandardError; end
|
|
67
|
+
|
|
63
68
|
protected
|
|
64
69
|
|
|
65
70
|
attr_reader :serializers, :options
|
|
66
71
|
|
|
67
72
|
private
|
|
68
73
|
|
|
74
|
+
def raise_cannot_infer_root_key_error?
|
|
75
|
+
ActiveModelSerializers.config.raise_cannot_infer_root_key_error
|
|
76
|
+
end
|
|
77
|
+
|
|
69
78
|
def serializers_from_resources
|
|
70
79
|
serializer_context_class = options.fetch(:serializer_context_class, ActiveModel::Serializer)
|
|
71
80
|
object.map do |resource|
|
|
@@ -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
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModel
|
|
2
4
|
class Serializer
|
|
3
5
|
class Fieldset
|
|
@@ -10,7 +12,7 @@ module ActiveModel
|
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def fields_for(type)
|
|
13
|
-
fields[type.singularize.to_sym] || fields[type.pluralize.to_sym]
|
|
15
|
+
fields[type.to_s.singularize.to_sym] || fields[type.to_s.pluralize.to_sym]
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
protected
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModel
|
|
2
4
|
class Serializer
|
|
3
5
|
# @api private
|
|
@@ -7,11 +9,12 @@ module ActiveModel
|
|
|
7
9
|
delegate :collection?, to: :reflection
|
|
8
10
|
|
|
9
11
|
def reflection_options
|
|
10
|
-
@reflection_options ||= reflection.options.
|
|
12
|
+
@reflection_options ||= reflection.options.select { |k, _| REFLECTION_OPTIONS.include?(k) }
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
def object
|
|
14
|
-
@object
|
|
16
|
+
return @object if defined?(@object)
|
|
17
|
+
@object = reflection.value(
|
|
15
18
|
association_options.fetch(:parent_serializer),
|
|
16
19
|
association_options.fetch(:include_slice)
|
|
17
20
|
)
|
|
@@ -76,6 +79,7 @@ module ActiveModel
|
|
|
76
79
|
serializer_options[:serializer_context_class] = association_options.fetch(:parent_serializer).class
|
|
77
80
|
serializer = reflection_options.fetch(:serializer, nil)
|
|
78
81
|
serializer_options[:serializer] = serializer if serializer
|
|
82
|
+
serializer_options[:namespace] = reflection_options[:namespace] if reflection_options[:namespace]
|
|
79
83
|
serializer_class.new(object, serializer_options)
|
|
80
84
|
end
|
|
81
85
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_model/serializer/field'
|
|
4
|
+
|
|
5
|
+
module ActiveModel
|
|
6
|
+
class Serializer
|
|
7
|
+
# Holds all the data about a serializer link
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
# class PostSerializer < ActiveModel::Serializer
|
|
11
|
+
# link :callback, if: :internal? do
|
|
12
|
+
# object.callback_link
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# def internal?
|
|
16
|
+
# instance_options[:internal] == true
|
|
17
|
+
# end
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
class Link < Field
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'active_model/serializer/field'
|
|
2
4
|
require 'active_model/serializer/association'
|
|
3
5
|
|
|
@@ -85,8 +87,8 @@ module ActiveModel
|
|
|
85
87
|
# meta ids: ids
|
|
86
88
|
# end
|
|
87
89
|
# end
|
|
88
|
-
def link(name, value = nil)
|
|
89
|
-
options[:links][name] = block_given? ?
|
|
90
|
+
def link(name, value = nil, &block)
|
|
91
|
+
options[:links][name] = block_given? ? block : value
|
|
90
92
|
:nil
|
|
91
93
|
end
|
|
92
94
|
|
|
@@ -100,8 +102,8 @@ module ActiveModel
|
|
|
100
102
|
# href object.blog.id.to_s
|
|
101
103
|
# meta(id: object.blog.id)
|
|
102
104
|
# end
|
|
103
|
-
def meta(value = nil)
|
|
104
|
-
options[:meta] = block_given? ?
|
|
105
|
+
def meta(value = nil, &block)
|
|
106
|
+
options[:meta] = block_given? ? block : value
|
|
105
107
|
:nil
|
|
106
108
|
end
|
|
107
109
|
|
|
@@ -151,6 +153,9 @@ module ActiveModel
|
|
|
151
153
|
# @yield [ActiveModel::Serializer]
|
|
152
154
|
# @return [:nil, associated resource or resource collection]
|
|
153
155
|
def value(serializer, include_slice)
|
|
156
|
+
# NOTE(BF): This method isn't thread-safe because the _reflections class attribute is not thread-safe
|
|
157
|
+
# Therefore, when we build associations from reflections, we dup the entire reflection instance.
|
|
158
|
+
# Better solutions much appreciated!
|
|
154
159
|
@object = serializer.object
|
|
155
160
|
@scope = serializer.scope
|
|
156
161
|
|