active_model_serializers 0.10.0 → 0.10.11
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 +5 -5
- data/CHANGELOG.md +227 -2
- data/README.md +171 -33
- data/lib/action_controller/serialization.rb +23 -3
- 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 +4 -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 +10 -5
- data/lib/active_model/serializer/association.rb +64 -10
- data/lib/active_model/serializer/attribute.rb +2 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +6 -3
- data/lib/active_model/serializer/collection_serializer.rb +39 -13
- data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +89 -117
- data/lib/active_model/serializer/error_serializer.rb +13 -7
- data/lib/active_model/serializer/errors_serializer.rb +27 -20
- 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 +5 -3
- data/lib/active_model/serializer/has_one_reflection.rb +3 -4
- data/lib/active_model/serializer/lazy_association.rb +99 -0
- data/lib/active_model/serializer/link.rb +23 -0
- data/lib/active_model/serializer/lint.rb +136 -130
- data/lib/active_model/serializer/null.rb +2 -0
- data/lib/active_model/serializer/reflection.rb +130 -65
- data/lib/active_model/serializer/version.rb +3 -1
- data/lib/active_model/serializer.rb +319 -86
- data/lib/active_model_serializers/adapter/attributes.rb +17 -57
- data/lib/active_model_serializers/adapter/base.rb +41 -39
- data/lib/active_model_serializers/adapter/json.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +4 -2
- 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 +3 -1
- data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +49 -21
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +77 -23
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +41 -10
- data/lib/active_model_serializers/adapter/json_api.rb +84 -65
- data/lib/active_model_serializers/adapter/null.rb +2 -0
- data/lib/active_model_serializers/adapter.rb +9 -1
- data/lib/active_model_serializers/callbacks.rb +2 -0
- data/lib/active_model_serializers/deprecate.rb +3 -2
- data/lib/active_model_serializers/deserialization.rb +4 -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 +82 -0
- data/lib/active_model_serializers/model/caching.rb +25 -0
- data/lib/active_model_serializers/model.rb +111 -28
- data/lib/active_model_serializers/railtie.rb +7 -1
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +46 -31
- data/lib/active_model_serializers/serializable_resource.rb +10 -7
- data/lib/active_model_serializers/serialization_context.rb +12 -3
- data/lib/active_model_serializers/test/schema.rb +4 -2
- 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 +35 -10
- data/lib/generators/rails/resource_override.rb +3 -1
- data/lib/generators/rails/serializer_generator.rb +6 -4
- data/lib/grape/active_model_serializers.rb +9 -5
- data/lib/grape/formatters/active_model_serializers.rb +21 -2
- data/lib/grape/helpers/active_model_serializers.rb +3 -0
- data/lib/tasks/rubocop.rake +55 -0
- metadata +110 -276
- data/.github/ISSUE_TEMPLATE.md +0 -29
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
- data/.gitignore +0 -35
- data/.rubocop.yml +0 -104
- data/.rubocop_todo.yml +0 -167
- data/.simplecov +0 -110
- data/.travis.yml +0 -43
- data/CONTRIBUTING.md +0 -105
- data/Gemfile +0 -53
- data/Rakefile +0 -103
- data/active_model_serializers.gemspec +0 -66
- data/appveyor.yml +0 -24
- data/bin/bench +0 -171
- data/bin/bench_regression +0 -316
- data/bin/serve_benchmark +0 -39
- data/docs/ARCHITECTURE.md +0 -126
- data/docs/README.md +0 -40
- data/docs/STYLE.md +0 -58
- data/docs/general/adapters.md +0 -245
- data/docs/general/caching.md +0 -52
- data/docs/general/configuration_options.md +0 -100
- data/docs/general/deserialization.md +0 -100
- 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 -14
- data/docs/general/rendering.md +0 -255
- data/docs/general/serializers.md +0 -372
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +0 -139
- data/docs/howto/add_root_key.md +0 -51
- data/docs/howto/outside_controller_use.md +0 -58
- data/docs/howto/passing_arbitrary_options.md +0 -27
- data/docs/howto/serialize_poro.md +0 -32
- data/docs/howto/test.md +0 -152
- data/docs/integrations/ember-and-json-api.md +0 -112
- 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/lib/active_model/serializer/associations.rb +0 -100
- data/lib/active_model/serializer/attributes.rb +0 -82
- data/lib/active_model/serializer/collection_reflection.rb +0 -7
- data/lib/active_model/serializer/configuration.rb +0 -35
- data/lib/active_model/serializer/include_tree.rb +0 -111
- data/lib/active_model/serializer/links.rb +0 -35
- data/lib/active_model/serializer/meta.rb +0 -29
- data/lib/active_model/serializer/singular_reflection.rb +0 -7
- data/lib/active_model/serializer/type.rb +0 -25
- data/lib/active_model_serializers/key_transform.rb +0 -70
- data/test/action_controller/adapter_selector_test.rb +0 -53
- data/test/action_controller/explicit_serializer_test.rb +0 -134
- data/test/action_controller/json/include_test.rb +0 -167
- data/test/action_controller/json_api/deserialization_test.rb +0 -112
- data/test/action_controller/json_api/errors_test.rb +0 -41
- data/test/action_controller/json_api/linked_test.rb +0 -197
- data/test/action_controller/json_api/pagination_test.rb +0 -116
- data/test/action_controller/json_api/transform_test.rb +0 -181
- data/test/action_controller/serialization_scope_name_test.rb +0 -229
- data/test/action_controller/serialization_test.rb +0 -469
- data/test/active_model_serializers/adapter_for_test.rb +0 -208
- data/test/active_model_serializers/json_pointer_test.rb +0 -20
- data/test/active_model_serializers/key_transform_test.rb +0 -263
- data/test/active_model_serializers/logging_test.rb +0 -77
- data/test/active_model_serializers/model_test.rb +0 -9
- data/test/active_model_serializers/railtie_test_isolated.rb +0 -63
- data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -58
- data/test/active_model_serializers/test/schema_test.rb +0 -130
- data/test/active_model_serializers/test/serializer_test.rb +0 -62
- data/test/active_record_test.rb +0 -9
- 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 -90
- data/test/adapter/json/has_many_test.rb +0 -45
- 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 -95
- data/test/adapter/json_api/errors_test.rb +0 -78
- data/test/adapter/json_api/fields_test.rb +0 -87
- data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
- data/test/adapter/json_api/has_many_test.rb +0 -144
- data/test/adapter/json_api/has_one_test.rb +0 -80
- data/test/adapter/json_api/json_api_test.rb +0 -35
- data/test/adapter/json_api/linked_test.rb +0 -392
- data/test/adapter/json_api/links_test.rb +0 -93
- data/test/adapter/json_api/pagination_links_test.rb +0 -166
- data/test/adapter/json_api/parse_test.rb +0 -137
- data/test/adapter/json_api/relationship_test.rb +0 -161
- data/test/adapter/json_api/relationships_test.rb +0 -199
- data/test/adapter/json_api/resource_identifier_test.rb +0 -85
- 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 -502
- data/test/adapter/json_api/type_test.rb +0 -61
- data/test/adapter/json_test.rb +0 -45
- data/test/adapter/null_test.rb +0 -23
- data/test/adapter/polymorphic_test.rb +0 -171
- 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_caching.rb +0 -119
- data/test/benchmark/bm_transform.rb +0 -34
- data/test/benchmark/config.ru +0 -3
- data/test/benchmark/controllers.rb +0 -84
- data/test/benchmark/fixtures.rb +0 -219
- data/test/cache_test.rb +0 -485
- data/test/collection_serializer_test.rb +0 -110
- data/test/fixtures/active_record.rb +0 -78
- data/test/fixtures/poro.rb +0 -282
- data/test/generators/scaffold_controller_generator_test.rb +0 -24
- data/test/generators/serializer_generator_test.rb +0 -57
- data/test/grape_test.rb +0 -82
- 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
- data/test/lint_test.rb +0 -49
- data/test/logger_test.rb +0 -18
- data/test/poro_test.rb +0 -9
- data/test/serializable_resource_test.rb +0 -83
- data/test/serializers/association_macros_test.rb +0 -36
- data/test/serializers/associations_test.rb +0 -295
- data/test/serializers/attribute_test.rb +0 -151
- 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 -196
- data/test/serializers/options_test.rb +0 -21
- data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
- data/test/serializers/root_test.rb +0 -21
- data/test/serializers/serialization_test.rb +0 -55
- data/test/serializers/serializer_for_test.rb +0 -134
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/isolated_unit.rb +0 -79
- data/test/support/rails5_shims.rb +0 -47
- data/test/support/rails_app.rb +0 -45
- 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 -53
- data/test/test_helper.rb +0 -57
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: d4efe10f8c12914205c5d3a42c5cac29bdd2d01faea644c67606e0f24fc49ab3
|
|
4
|
+
data.tar.gz: 9751dfae561915e17ba3d15fa6caf5b0eb2e708c672db64b54aaa5d3f0f8d0b8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8cc6dad9d1b4e3d7fec54bdbf38f70b39d8ed85373a267639996778f02508be82bf19e81b4acecb7d4161939de74da56e45025292cfd06c12a1b35580e283feb
|
|
7
|
+
data.tar.gz: eeab962f26dea765ea293975744695900654f07e7a001c592f8b748862935f60df12e9f9689166d8babb929fdeb4ca0d060ab0537dcf1b3cbfa8cb5f8b4cbd71
|
data/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,232 @@
|
|
|
1
1
|
## 0.10.x
|
|
2
2
|
|
|
3
|
-
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.0
|
|
3
|
+
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.11...0-10-stable)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Breaking changes:
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
|
|
9
|
+
Fixes:
|
|
10
|
+
|
|
11
|
+
Misc:
|
|
12
|
+
|
|
13
|
+
### [v0.10.11 (2020-12-04)](https://github.com/rails-api/active_model_serializers/compare/v0.10.10...v0.10.11)
|
|
14
|
+
|
|
15
|
+
Features:
|
|
16
|
+
|
|
17
|
+
- [#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)
|
|
18
|
+
|
|
19
|
+
Fixes:
|
|
20
|
+
|
|
21
|
+
- [#2344](https://github.com/rails-api/active_model_serializers/pull/2344) Fixes #2341 introduced since #2223 (@wasifhossain)
|
|
22
|
+
- [#2395](https://github.com/rails-api/active_model_serializers/pull/2395) remove explicit require for thread_safe (@ritikesh)
|
|
23
|
+
|
|
24
|
+
### [v0.10.10 (2019-07-13)](https://github.com/rails-api/active_model_serializers/compare/v0.10.9...v0.10.10)
|
|
25
|
+
|
|
26
|
+
Fixes:
|
|
27
|
+
|
|
28
|
+
- [#2319](https://github.com/rails-api/active_model_serializers/pull/2319) Fixes #2316. (@kylekeesling)
|
|
29
|
+
- Fix Rails 6.0 deprication warnings
|
|
30
|
+
- update test fixture schema to use `timestamps` instead of `timestamp`
|
|
31
|
+
- [#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)
|
|
32
|
+
- [#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)
|
|
33
|
+
- Fixes incorrect json-api generation when `jsonapi_use_foreign_key_on_belongs_to_relationship` is `true` and the relationship is blank
|
|
34
|
+
- [#2172](https://github.com/rails-api/active_model_serializers/pull/2172) Preserve the namespace when falling back to a superclass serializer
|
|
35
|
+
|
|
36
|
+
Misc:
|
|
37
|
+
|
|
38
|
+
- [#2327](https://github.com/rails-api/active_model_serializers/pull/2327) Add support for Ruby 2.6 on Travis CI (@wasifhossain)
|
|
39
|
+
- [#2304](https://github.com/rails-api/active_model_serializers/pull/2304) Slim down bundled gem by excluding test files and docs (@greysteil)
|
|
40
|
+
|
|
41
|
+
### [v0.10.9 (2019-02-08)](https://github.com/rails-api/active_model_serializers/compare/v0.10.8...v0.10.9)
|
|
42
|
+
|
|
43
|
+
Fixes:
|
|
44
|
+
|
|
45
|
+
- [#2288](https://github.com/rails-api/active_model_serializers/pull/2288)
|
|
46
|
+
Change the fetch method to deal with recyclable key cache strategy.
|
|
47
|
+
Fixes #2287. (@cintamani, @wasifhossain)
|
|
48
|
+
- [#2307](https://github.com/rails-api/active_model_serializers/pull/2307) Falsey attribute values should not be reevaluated.
|
|
49
|
+
|
|
50
|
+
Misc:
|
|
51
|
+
|
|
52
|
+
- [#2309](https://github.com/rails-api/active_model_serializers/pull/2309) Performance and memory usage fixes
|
|
53
|
+
|
|
54
|
+
### [v0.10.8 (2018-11-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...v0.10.8)
|
|
55
|
+
|
|
56
|
+
Features:
|
|
57
|
+
- [#2279](https://github.com/rails-api/active_model_serializers/pull/2279) Support condition options in serializer link statements
|
|
58
|
+
|
|
59
|
+
Fixes:
|
|
60
|
+
|
|
61
|
+
- [#2296](https://github.com/rails-api/active_model_serializers/pull/2296) Fixes #2295 (@Hirurg103)
|
|
62
|
+
- Fix finding of namespaced serializer and non-namespaced model.
|
|
63
|
+
- [#2289](https://github.com/rails-api/active_model_serializers/pull/2289) Fixes #2255 (@f-mer)
|
|
64
|
+
- Fix autoloading race condition, especially in Rails 5.
|
|
65
|
+
- [#2299](https://github.com/rails-api/active_model_serializers/pull/2299) Fixes #2270 (@chau-bao-long via #2276)
|
|
66
|
+
- Fix reflection thread-safety bug
|
|
67
|
+
|
|
68
|
+
### [v0.10.7 (2017-11-14)](https://github.com/rails-api/active_model_serializers/compare/v0.10.6...v0.10.7)
|
|
69
|
+
|
|
70
|
+
Regressions Fixed From v0.10.6:
|
|
71
|
+
|
|
72
|
+
- [#2211](https://github.com/rails-api/active_model_serializers/pull/2211). Fixes #2125, #2160. (@bf4)
|
|
73
|
+
- Fix polymorphic belongs_to tests; passes on v0.10.5, fails on v0.10.6
|
|
74
|
+
- Fix JSON:API polymorphic type regression from v0.10.5
|
|
75
|
+
- Fix JSON:API: for_type_and_id should always inflect_type
|
|
76
|
+
```
|
|
77
|
+
Should Serializer._type ever be inflected?
|
|
78
|
+
Right now, it won't be, but association.serializer._type will be inflected.
|
|
79
|
+
|
|
80
|
+
That's the current behavior.
|
|
81
|
+
```
|
|
82
|
+
- [#2216](https://github.com/rails-api/active_model_serializers/pull/2216). Fixes #2132, #2180. (@bf4)
|
|
83
|
+
- Fix JSON:API: Serialize resource type for unpersisted records (blank id)
|
|
84
|
+
- [#2218](https://github.com/rails-api/active_model_serializers/pull/2218). Fixes #2178. (@bf4)
|
|
85
|
+
- Fix JSON:API: Make using foreign key on belongs_to opt-in. No effect on polymorphic relationships.
|
|
86
|
+
```
|
|
87
|
+
# set to true to opt-in
|
|
88
|
+
ActiveModelSerializer.config.jsonapi_use_foreign_key_on_belongs_to_relationship = true
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Features:
|
|
92
|
+
|
|
93
|
+
- [#2136](https://github.com/rails-api/active_model_serializers/pull/2136) Enable inclusion of sideloaded relationship objects by `key`. (@caomania)
|
|
94
|
+
- [#2021](https://github.com/rails-api/active_model_serializers/pull/2021) ActiveModelSerializers::Model#attributes. Originally in [#1982](https://github.com/rails-api/active_model_serializers/pull/1982). (@bf4)
|
|
95
|
+
- [#2130](https://github.com/rails-api/active_model_serializers/pull/2130) Allow serialized ID to be overwritten for belongs-to relationships. (@greysteil)
|
|
96
|
+
- [#2189](https://github.com/rails-api/active_model_serializers/pull/2189)
|
|
97
|
+
Update version constraint for jsonapi-renderer to `['>= 0.1.1.beta1', '< 0.3']`
|
|
98
|
+
(@tagliala)
|
|
99
|
+
|
|
100
|
+
Fixes:
|
|
101
|
+
|
|
102
|
+
- [#2022](https://github.com/rails-api/active_model_serializers/pull/2022) Mutation of ActiveModelSerializers::Model now changes the attributes. Originally in [#1984](https://github.com/rails-api/active_model_serializers/pull/1984). (@bf4)
|
|
103
|
+
- [#2200](https://github.com/rails-api/active_model_serializers/pull/2200) Fix deserialization of polymorphic relationships. (@dennis95stumm)
|
|
104
|
+
- [#2214](https://github.com/rails-api/active_model_serializers/pull/2214) Fail if unable to infer collection type with json adapter. (@jmeredith16)
|
|
105
|
+
- [#2149](https://github.com/rails-api/active_model_serializers/pull/2149) Always include self, first, last pagination link. (@mecampbellsoup)
|
|
106
|
+
- [#2179](https://github.com/rails-api/active_model_serializers/pull/2179) Fixes #2173, Pass block to Enumerator.new. (@drn)
|
|
107
|
+
|
|
108
|
+
Misc:
|
|
109
|
+
|
|
110
|
+
- [#2176](https://github.com/rails-api/active_model_serializers/pull/2176) Documentation for global adapter config. (@mrpinsky)
|
|
111
|
+
- [#2215](https://github.com/rails-api/active_model_serializers/pull/2215) Update `serializers.md` documentation to denote alternate use cases for `scope`. (@stratigos)
|
|
112
|
+
- [#2212](https://github.com/rails-api/active_model_serializers/pull/2212) Remove legacy has_many_embed_ids test. (@bf4)
|
|
113
|
+
|
|
114
|
+
### [v0.10.6 (2017-05-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.5...v0.10.6)
|
|
115
|
+
|
|
116
|
+
Fixes:
|
|
117
|
+
|
|
118
|
+
- [#1857](https://github.com/rails-api/active_model_serializers/pull/1857) JSON:API does not load belongs_to relation to get identifier id. (@bf4)
|
|
119
|
+
- [#2119](https://github.com/rails-api/active_model_serializers/pull/2119) JSON:API returns null resource object identifier when 'id' is null. (@bf4)
|
|
120
|
+
- [#2093](https://github.com/rails-api/active_model_serializers/pull/2093) undef problematic Serializer methods: display, select. (@bf4)
|
|
121
|
+
|
|
122
|
+
Misc:
|
|
123
|
+
|
|
124
|
+
- [#2104](https://github.com/rails-api/active_model_serializers/pull/2104) Documentation for serializers and rendering. (@cassidycodes)
|
|
125
|
+
- [#2081](https://github.com/rails-api/active_model_serializers/pull/2081) Documentation for `include` option in adapters. (@charlie-wasp)
|
|
126
|
+
- [#2120](https://github.com/rails-api/active_model_serializers/pull/2120) Documentation for association options: foreign_key, type, class_name, namespace. (@bf4)
|
|
127
|
+
|
|
128
|
+
### [v0.10.5 (2017-03-07)](https://github.com/rails-api/active_model_serializers/compare/v0.10.4...v0.10.5)
|
|
129
|
+
|
|
130
|
+
Breaking changes:
|
|
131
|
+
|
|
132
|
+
Features:
|
|
133
|
+
|
|
134
|
+
- [#2021](https://github.com/rails-api/active_model_serializers/pull/2021) ActiveModelSerializers::Model#attributes. Originally in [#1982](https://github.com/rails-api/active_model_serializers/pull/1982). (@bf4)
|
|
135
|
+
- [#2057](https://github.com/rails-api/active_model_serializers/pull/2057)
|
|
136
|
+
Update version constraint for jsonapi-renderer to `['>= 0.1.1.beta1', '< 0.2']`
|
|
137
|
+
(@jaredbeck)
|
|
138
|
+
|
|
139
|
+
Fixes:
|
|
140
|
+
|
|
141
|
+
- [#2022](https://github.com/rails-api/active_model_serializers/pull/2022) Mutation of ActiveModelSerializers::Model now changes the attributes. Originally in [#1984](https://github.com/rails-api/active_model_serializers/pull/1984). (@bf4)
|
|
142
|
+
|
|
143
|
+
Misc:
|
|
144
|
+
|
|
145
|
+
- [#2055](https://github.com/rails-api/active_model_serializers/pull/2055)
|
|
146
|
+
Replace deprecated dependency jsonapi with jsonapi-renderer. (@jaredbeck)
|
|
147
|
+
- [#2021](https://github.com/rails-api/active_model_serializers/pull/2021) Make test attributes explicit. Tests have Model#associations. (@bf4)
|
|
148
|
+
- [#1981](https://github.com/rails-api/active_model_serializers/pull/1981) Fix relationship link documentation. (@groyoh)
|
|
149
|
+
- [#2035](https://github.com/rails-api/active_model_serializers/pull/2035) Document how to disable the logger. (@MSathieu)
|
|
150
|
+
- [#2039](https://github.com/rails-api/active_model_serializers/pull/2039) Documentation fixes. (@biow0lf)
|
|
151
|
+
|
|
152
|
+
### [v0.10.4 (2017-01-06)](https://github.com/rails-api/active_model_serializers/compare/v0.10.3...v0.10.4)
|
|
153
|
+
|
|
154
|
+
Misc:
|
|
155
|
+
|
|
156
|
+
- [#2005](https://github.com/rails-api/active_model_serializers/pull/2005) Update jsonapi runtime dependency to 0.1.1.beta6, support Ruby 2.4. (@kofronpi)
|
|
157
|
+
- [#1993](https://github.com/rails-api/active_model_serializers/pull/1993) Swap out KeyTransform for CaseTransform gem for the possibility of native extension use. (@NullVoxPopuli)
|
|
158
|
+
|
|
159
|
+
### [v0.10.3 (2016-11-21)](https://github.com/rails-api/active_model_serializers/compare/v0.10.2...v0.10.3)
|
|
160
|
+
|
|
161
|
+
Fixes:
|
|
162
|
+
|
|
163
|
+
- [#1973](https://github.com/rails-api/active_model_serializers/pull/1973) Fix namespace lookup for collections and has_many relationships (@groyoh)
|
|
164
|
+
- [#1887](https://github.com/rails-api/active_model_serializers/pull/1887) Make the comment reflect what the function does (@johnnymo87)
|
|
165
|
+
- [#1890](https://github.com/rails-api/active_model_serializers/issues/1890) Ensure generator inherits from ApplicationSerializer when available (@richmolj)
|
|
166
|
+
- [#1922](https://github.com/rails-api/active_model_serializers/pull/1922) Make railtie an optional dependency in runtime (@ggpasqualino)
|
|
167
|
+
- [#1930](https://github.com/rails-api/active_model_serializers/pull/1930) Ensure valid jsonapi when relationship has no links or data (@richmolj)
|
|
168
|
+
|
|
169
|
+
Features:
|
|
170
|
+
|
|
171
|
+
- [#1757](https://github.com/rails-api/active_model_serializers/pull/1757) Make serializer lookup chain configurable. (@NullVoxPopuli)
|
|
172
|
+
- [#1968](https://github.com/rails-api/active_model_serializers/pull/1968) (@NullVoxPopuli)
|
|
173
|
+
- Add controller namespace to default controller lookup
|
|
174
|
+
- Provide a `namespace` render option
|
|
175
|
+
- document how set the namespace in the controller for implicit lookup.
|
|
176
|
+
- [#1791](https://github.com/rails-api/active_model_serializers/pull/1791) (@bf4, @youroff, @NullVoxPopuli)
|
|
177
|
+
- Added `jsonapi_namespace_separator` config option.
|
|
178
|
+
- [#1889](https://github.com/rails-api/active_model_serializers/pull/1889) Support key transformation for Attributes adapter (@iancanderson, @danbee)
|
|
179
|
+
- [#1917](https://github.com/rails-api/active_model_serializers/pull/1917) Add `jsonapi_pagination_links_enabled` configuration option (@richmolj)
|
|
180
|
+
- [#1797](https://github.com/rails-api/active_model_serializers/pull/1797) Only include 'relationships' when sideloading (@richmolj)
|
|
181
|
+
|
|
182
|
+
Fixes:
|
|
183
|
+
|
|
184
|
+
- [#1833](https://github.com/rails-api/active_model_serializers/pull/1833) Remove relationship links if they are null (@groyoh)
|
|
185
|
+
- [#1881](https://github.com/rails-api/active_model_serializers/pull/1881) ActiveModelSerializers::Model correctly works with string keys (@yevhene)
|
|
186
|
+
|
|
187
|
+
Misc:
|
|
188
|
+
- [#1767](https://github.com/rails-api/active_model_serializers/pull/1767) Replace raising/rescuing `CollectionSerializer::NoSerializerError`,
|
|
189
|
+
throw/catch `:no_serializer`. (@bf4)
|
|
190
|
+
- [#1839](https://github.com/rails-api/active_model_serializers/pull/1839) `fields` tests demonstrating usage for both attributes and relationships. (@NullVoxPopuli)
|
|
191
|
+
- [#1812](https://github.com/rails-api/active_model_serializers/pull/1812) add a code of conduct (@corainchicago)
|
|
192
|
+
|
|
193
|
+
- [#1878](https://github.com/rails-api/active_model_serializers/pull/1878) Cache key generation for serializers now uses `ActiveSupport::Cache.expand_cache_key` instead of `Array#join` by default and is also overridable. This change should be backward-compatible. (@markiz)
|
|
194
|
+
|
|
195
|
+
- [#1799](https://github.com/rails-api/active_model_serializers/pull/1799) Add documentation for setting the adapter. (@cassidycodes)
|
|
196
|
+
- [#1909](https://github.com/rails-api/active_model_serializers/pull/1909) Add documentation for relationship links. (@vasilakisfil, @NullVoxPopuli)
|
|
197
|
+
- [#1959](https://github.com/rails-api/active_model_serializers/pull/1959) Add documentation for root. (@shunsuke227ono)
|
|
198
|
+
- [#1967](https://github.com/rails-api/active_model_serializers/pull/1967) Improve type method documentation. (@yukideluxe)
|
|
199
|
+
|
|
200
|
+
### [v0.10.2 (2016-07-05)](https://github.com/rails-api/active_model_serializers/compare/v0.10.1...v0.10.2)
|
|
201
|
+
|
|
202
|
+
Fixes:
|
|
203
|
+
- [#1814](https://github.com/rails-api/active_model_serializers/pull/1814) Ensuring read_multi works with fragment cache
|
|
204
|
+
- [#1848](https://github.com/rails-api/active_model_serializers/pull/1848) Redefine associations on inherited serializers. (@EhsanYousefi)
|
|
205
|
+
|
|
206
|
+
Misc:
|
|
207
|
+
- [#1808](https://github.com/rails-api/active_model_serializers/pull/1808) Adds documentation for `fields` option. (@luizkowalski)
|
|
208
|
+
|
|
209
|
+
### [v0.10.1 (2016-06-16)](https://github.com/rails-api/active_model_serializers/compare/v0.10.0...v0.10.1)
|
|
210
|
+
|
|
211
|
+
Features:
|
|
212
|
+
- [#1668](https://github.com/rails-api/active_model_serializers/pull/1668) Exclude nil and empty links. (@sigmike)
|
|
213
|
+
- [#1426](https://github.com/rails-api/active_model_serializers/pull/1426) Add ActiveModelSerializers.config.default_includes (@empact)
|
|
214
|
+
|
|
215
|
+
Fixes:
|
|
216
|
+
- [#1754](https://github.com/rails-api/active_model_serializers/pull/1754) Fixes #1759, Grape integration, improves serialization_context
|
|
217
|
+
missing error message on pagination. Document overriding CollectionSerializer#paginated?. (@bf4)
|
|
218
|
+
Moved serialization_context creation to Grape formatter, so resource serialization works without explicit calls to the `render` helper method.
|
|
219
|
+
Added Grape collection tests. (@onomated)
|
|
220
|
+
- [#1287](https://github.com/rails-api/active_model_serializers/pull/1287) Pass `fields` options from adapter to serializer. (@vasilakisfil)
|
|
221
|
+
- [#1710](https://github.com/rails-api/active_model_serializers/pull/1710) Prevent association loading when `include_data` option
|
|
222
|
+
is set to `false`. (@groyoh)
|
|
223
|
+
- [#1747](https://github.com/rails-api/active_model_serializers/pull/1747) Improve jsonapi mime type registration for Rails 5 (@remear)
|
|
224
|
+
|
|
225
|
+
Misc:
|
|
226
|
+
- [#1734](https://github.com/rails-api/active_model_serializers/pull/1734) Adds documentation for conditional attribute (@lambda2)
|
|
227
|
+
- [#1685](https://github.com/rails-api/active_model_serializers/pull/1685) Replace `IncludeTree` with `IncludeDirective` from the jsonapi gem.
|
|
228
|
+
|
|
229
|
+
### [v0.10.0 (2016-05-17)](https://github.com/rails-api/active_model_serializers/compare/4a2d9853ba7...v0.10.0)
|
|
6
230
|
|
|
7
231
|
Breaking changes:
|
|
8
232
|
- [#1662](https://github.com/rails-api/active_model_serializers/pull/1662) Drop support for Rails 4.0 and Ruby 2.0.0. (@remear)
|
|
@@ -22,6 +246,7 @@ Fixes:
|
|
|
22
246
|
|
|
23
247
|
Misc:
|
|
24
248
|
- [#1673](https://github.com/rails-api/active_model_serializers/pull/1673) Adds "How to" guide on using AMS with POROs (@DrSayre)
|
|
249
|
+
- [#1730](https://github.com/rails-api/active_model_serializers/pull/1730) Adds documentation for overriding default serializer based on conditions (@groyoh/@cgmckeever)
|
|
25
250
|
|
|
26
251
|
### [v0.10.0.rc5 (2016-04-04)](https://github.com/rails-api/active_model_serializers/compare/v0.10.0.rc4...v0.10.0.rc5)
|
|
27
252
|
|
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>
|
|
@@ -24,17 +24,6 @@
|
|
|
24
24
|
</tr>
|
|
25
25
|
</table>
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
## Documentation
|
|
29
|
-
|
|
30
|
-
- [0.10 (master) Documentation](https://github.com/rails-api/active_model_serializers/tree/master)
|
|
31
|
-
- [](http://www.rubydoc.info/github/rails-api/active_model_serializers/v0.10.0)
|
|
32
|
-
- [Guides](docs)
|
|
33
|
-
- [0.9 (0-9-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-9-stable)
|
|
34
|
-
- [](http://www.rubydoc.info/github/rails-api/active_model_serializers/0-9-stable)
|
|
35
|
-
- [0.8 (0-8-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-8-stable)
|
|
36
|
-
- [](http://www.rubydoc.info/github/rails-api/active_model_serializers/0-8-stable)
|
|
37
|
-
|
|
38
27
|
## About
|
|
39
28
|
|
|
40
29
|
ActiveModelSerializers brings convention over configuration to your JSON generation.
|
|
@@ -50,33 +39,22 @@ resource serialization. The serialization has the `#as_json`, `#to_json` and `#s
|
|
|
50
39
|
methods used by the Rails JSON Renderer. (SerializableResource actually delegates
|
|
51
40
|
these methods to the adapter.)
|
|
52
41
|
|
|
53
|
-
By default ActiveModelSerializers will use the **Attributes Adapter
|
|
42
|
+
By default ActiveModelSerializers will use the **Attributes Adapter** (no JSON root).
|
|
54
43
|
But we strongly advise you to use **JsonApi Adapter**, which
|
|
55
|
-
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).
|
|
56
45
|
Check how to change the adapter in the sections below.
|
|
57
46
|
|
|
58
|
-
## RELEASE CANDIDATE, PLEASE READ
|
|
59
|
-
|
|
60
|
-
This is the **master** branch of ActiveModelSerializers.
|
|
61
|
-
|
|
62
|
-
It will become the `0.10.0` release when it's ready. Currently this is a release candidate.
|
|
63
|
-
|
|
64
47
|
`0.10.x` is **not** backward compatible with `0.9.x` nor `0.8.x`.
|
|
65
48
|
|
|
66
|
-
`0.10.x`
|
|
49
|
+
`0.10.x` is based on the `0.8.0` code, but with a more flexible
|
|
67
50
|
architecture. We'd love your help. [Learn how you can help here.](CONTRIBUTING.md)
|
|
68
51
|
|
|
69
|
-
It is generally safe and recommended to use the master branch.
|
|
70
|
-
|
|
71
|
-
For more information, see the post '[The future of
|
|
72
|
-
AMS](https://medium.com/@joaomdmoura/the-future-of-ams-e5f9047ca7e9)'.
|
|
73
|
-
|
|
74
52
|
## Installation
|
|
75
53
|
|
|
76
54
|
Add this line to your application's Gemfile:
|
|
77
55
|
|
|
78
56
|
```
|
|
79
|
-
gem 'active_model_serializers'
|
|
57
|
+
gem 'active_model_serializers', '~> 0.10.0'
|
|
80
58
|
```
|
|
81
59
|
|
|
82
60
|
And then execute:
|
|
@@ -97,14 +75,36 @@ More information is available in the [Guides](docs) and
|
|
|
97
75
|
If you find a bug, please report an [Issue](https://github.com/rails-api/active_model_serializers/issues/new)
|
|
98
76
|
and see our [contributing guide](CONTRIBUTING.md).
|
|
99
77
|
|
|
100
|
-
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).
|
|
101
79
|
|
|
102
|
-
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).
|
|
103
81
|
|
|
104
82
|
Thanks!
|
|
105
83
|
|
|
84
|
+
## Documentation
|
|
85
|
+
|
|
86
|
+
If you're reading this at https://github.com/rails-api/active_model_serializers you are
|
|
87
|
+
reading documentation for our `master`, which may include features that have not
|
|
88
|
+
been released yet. Please see below for the documentation relevant to you.
|
|
89
|
+
|
|
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
|
+
- [0.9 (0-9-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-9-stable)
|
|
95
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.9.7)
|
|
96
|
+
- [0.8 (0-8-stable) Documentation](https://github.com/rails-api/active_model_serializers/tree/0-8-stable)
|
|
97
|
+
- [](https://www.rubydoc.info/gems/active_model_serializers/0.8.4)
|
|
98
|
+
|
|
99
|
+
|
|
106
100
|
## High-level behavior
|
|
107
101
|
|
|
102
|
+
Choose an adapter from [adapters](lib/active_model_serializers/adapter):
|
|
103
|
+
|
|
104
|
+
``` ruby
|
|
105
|
+
ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes`
|
|
106
|
+
```
|
|
107
|
+
|
|
108
108
|
Given a [serializable model](lib/active_model/serializer/lint.rb):
|
|
109
109
|
|
|
110
110
|
```ruby
|
|
@@ -114,7 +114,7 @@ class SomeResource < ActiveRecord::Base
|
|
|
114
114
|
end
|
|
115
115
|
# or
|
|
116
116
|
class SomeResource < ActiveModelSerializers::Model
|
|
117
|
-
|
|
117
|
+
attributes :title, :body
|
|
118
118
|
end
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -160,8 +160,146 @@ serializer = SomeSerializer.new(resource, serializer_options)
|
|
|
160
160
|
serializer.attributes
|
|
161
161
|
serializer.associations
|
|
162
162
|
```
|
|
163
|
-
See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for more information.
|
|
164
163
|
|
|
165
|
-
|
|
164
|
+
## Architecture
|
|
165
|
+
|
|
166
|
+
This section 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,
|
|
167
|
+
please refer to the [0.8 README](https://github.com/rails-api/active_model_serializers/blob/0-8-stable/README.md) or
|
|
168
|
+
[0.9 README](https://github.com/rails-api/active_model_serializers/blob/0-9-stable/README.md).
|
|
169
|
+
|
|
170
|
+
The original design is also available [here](https://github.com/rails-api/active_model_serializers/blob/d72b66d4c5355b0ff0a75a04895fcc4ea5b0c65e/README.textile).
|
|
171
|
+
|
|
172
|
+
### ActiveModel::Serializer
|
|
173
|
+
|
|
174
|
+
An **`ActiveModel::Serializer`** wraps a [serializable resource](https://github.com/rails/rails/blob/master/activemodel/lib/active_model/serialization.rb)
|
|
175
|
+
and exposes an `attributes` method, among a few others.
|
|
176
|
+
It allows you to specify which attributes and associations should be represented in the serializatation of the resource.
|
|
177
|
+
It requires an adapter to transform its attributes into a JSON document; it cannot be serialized itself.
|
|
178
|
+
It may be useful to think of it as a
|
|
179
|
+
[presenter](https://blog.steveklabnik.com/posts/2011-09-09-better-ruby-presenters).
|
|
180
|
+
|
|
181
|
+
#### ActiveModel::CollectionSerializer
|
|
182
|
+
|
|
183
|
+
The **`ActiveModel::CollectionSerializer`** represents a collection of resources as serializers
|
|
184
|
+
and, if there is no serializer, primitives.
|
|
185
|
+
|
|
186
|
+
### ActiveModelSerializers::Adapter::Base
|
|
187
|
+
|
|
188
|
+
The **`ActiveModelSerializers::Adapter::Base`** describes the structure of the JSON document generated from a
|
|
189
|
+
serializer. For example, the `Attributes` example represents each serializer as its
|
|
190
|
+
unmodified attributes. The `JsonApi` adapter represents the serializer as a [JSON
|
|
191
|
+
API](https://jsonapi.org/) document.
|
|
192
|
+
|
|
193
|
+
### ActiveModelSerializers::SerializableResource
|
|
194
|
+
|
|
195
|
+
The **`ActiveModelSerializers::SerializableResource`** acts to coordinate the serializer(s) and adapter
|
|
196
|
+
to an object that responds to `to_json`, and `as_json`. It is used in the controller to
|
|
197
|
+
encapsulate the serialization resource when rendered. However, it can also be used on its own
|
|
198
|
+
to serialize a resource outside of a controller, as well.
|
|
199
|
+
|
|
200
|
+
### Primitive handling
|
|
201
|
+
|
|
202
|
+
Definitions: A primitive is usually a String or Array. There is no serializer
|
|
203
|
+
defined for them; they will be serialized when the resource is converted to JSON (`as_json` or
|
|
204
|
+
`to_json`). (The below also applies for any object with no serializer.)
|
|
205
|
+
|
|
206
|
+
- ActiveModelSerializers doesn't handle primitives passed to `render json:` at all.
|
|
207
|
+
|
|
208
|
+
Internally, if no serializer can be found in the controller, the resource is not decorated by
|
|
209
|
+
ActiveModelSerializers.
|
|
210
|
+
|
|
211
|
+
- However, when a primitive value is an attribute or in a collection, it is not modified.
|
|
212
|
+
|
|
213
|
+
When serializing a collection and the collection serializer (CollectionSerializer) cannot
|
|
214
|
+
identify a serializer for a resource in its collection, it throws [`:no_serializer`](https://github.com/rails-api/active_model_serializers/issues/1191#issuecomment-142327128).
|
|
215
|
+
For example, when caught by `Reflection#build_association`, and the association value is set directly:
|
|
216
|
+
|
|
217
|
+
```ruby
|
|
218
|
+
reflection_options[:virtual_value] = association_value.try(:as_json) || association_value
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
(which is called by the adapter as `serializer.associations(*)`.)
|
|
222
|
+
|
|
223
|
+
### How options are parsed
|
|
224
|
+
|
|
225
|
+
High-level overview:
|
|
226
|
+
|
|
227
|
+
- For a **collection**
|
|
228
|
+
- `:serializer` specifies the collection serializer and
|
|
229
|
+
- `:each_serializer` specifies the serializer for each resource in the collection.
|
|
230
|
+
- For a **single resource**, the `:serializer` option is the resource serializer.
|
|
231
|
+
- Options are partitioned in serializer options and adapter options. Keys for adapter options are specified by
|
|
232
|
+
[`ADAPTER_OPTION_KEYS`](lib/active_model_serializers/serializable_resource.rb#L5).
|
|
233
|
+
The remaining options are serializer options.
|
|
234
|
+
|
|
235
|
+
Details:
|
|
236
|
+
|
|
237
|
+
1. **ActionController::Serialization**
|
|
238
|
+
1. `serializable_resource = ActiveModelSerializers::SerializableResource.new(resource, options)`
|
|
239
|
+
1. `options` are partitioned into `adapter_opts` and everything else (`serializer_opts`).
|
|
240
|
+
The `adapter_opts` keys are defined in [`ActiveModelSerializers::SerializableResource::ADAPTER_OPTION_KEYS`](lib/active_model_serializers/serializable_resource.rb#L5).
|
|
241
|
+
1. **ActiveModelSerializers::SerializableResource**
|
|
242
|
+
1. `if serializable_resource.serializer?` (there is a serializer for the resource, and an adapter is used.)
|
|
243
|
+
- Where `serializer?` is `use_adapter? && !!(serializer)`
|
|
244
|
+
- Where `use_adapter?`: 'True when no explicit adapter given, or explicit value is truthy (non-nil);
|
|
245
|
+
False when explicit adapter is falsy (nil or false)'
|
|
246
|
+
- Where `serializer`:
|
|
247
|
+
1. from explicit `:serializer` option, else
|
|
248
|
+
2. implicitly from resource `ActiveModel::Serializer.serializer_for(resource)`
|
|
249
|
+
1. A side-effect of checking `serializer` is:
|
|
250
|
+
- The `:serializer` option is removed from the serializer_opts hash
|
|
251
|
+
- If the `:each_serializer` option is present, it is removed from the serializer_opts hash and set as the `:serializer` option
|
|
252
|
+
1. The serializer and adapter are created as
|
|
253
|
+
1. `serializer_instance = serializer.new(resource, serializer_opts)`
|
|
254
|
+
2. `adapter_instance = ActiveModel::Serializer::Adapter.create(serializer_instance, adapter_opts)`
|
|
255
|
+
1. **ActiveModel::Serializer::CollectionSerializer#new**
|
|
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/0-10-stable/lib/active_model/serializer/collection_serializer.rb#L77-L79).
|
|
258
|
+
1. **ActiveModel::Serializer#attributes** is used by the adapter to get the attributes for
|
|
259
|
+
resource as defined by the serializer.
|
|
260
|
+
|
|
261
|
+
(In Rails, the `options` are also passed to the `as_json(options)` or `to_json(options)`
|
|
262
|
+
methods on the resource serialization by the Rails JSON renderer. They are, therefore, important
|
|
263
|
+
to know about, but not part of ActiveModelSerializers.)
|
|
264
|
+
|
|
265
|
+
### What does a 'serializable resource' look like?
|
|
266
|
+
|
|
267
|
+
- An `ActiveRecord::Base` object.
|
|
268
|
+
- Any Ruby object that passes the
|
|
269
|
+
[Lint](https://www.rubydoc.info/gems/active_model_serializers/ActiveModel/Serializer/Lint/Tests)
|
|
270
|
+
[(code)](lib/active_model/serializer/lint.rb).
|
|
271
|
+
|
|
272
|
+
ActiveModelSerializers provides a
|
|
273
|
+
[`ActiveModelSerializers::Model`](lib/active_model_serializers/model.rb),
|
|
274
|
+
which is a simple serializable PORO (Plain-Old Ruby Object).
|
|
275
|
+
|
|
276
|
+
`ActiveModelSerializers::Model` may be used either as a reference implementation, or in production code.
|
|
277
|
+
|
|
278
|
+
```ruby
|
|
279
|
+
class MyModel < ActiveModelSerializers::Model
|
|
280
|
+
attributes :id, :name, :level
|
|
281
|
+
end
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
The default serializer for `MyModel` would be `MyModelSerializer` whether MyModel is an
|
|
285
|
+
ActiveRecord::Base object or not.
|
|
286
|
+
|
|
287
|
+
Outside of the controller the rules are **exactly** the same as for records. For example:
|
|
288
|
+
|
|
289
|
+
```ruby
|
|
290
|
+
render json: MyModel.new(level: 'awesome'), adapter: :json
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
would be serialized the same as
|
|
294
|
+
|
|
295
|
+
```ruby
|
|
296
|
+
ActiveModelSerializers::SerializableResource.new(MyModel.new(level: 'awesome'), adapter: :json).as_json
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Semantic Versioning
|
|
300
|
+
|
|
301
|
+
This project adheres to [semver](https://semver.org/)
|
|
302
|
+
|
|
303
|
+
## Contributing
|
|
166
304
|
|
|
167
305
|
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
@@ -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
|
|
|
@@ -16,19 +18,37 @@ module ActionController
|
|
|
16
18
|
included do
|
|
17
19
|
class_attribute :_serialization_scope
|
|
18
20
|
self._serialization_scope = :current_user
|
|
21
|
+
|
|
22
|
+
attr_writer :namespace_for_serializer
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def namespace_for_serializer
|
|
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
|
|
19
35
|
end
|
|
20
36
|
|
|
21
37
|
def serialization_scope
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
return unless _serialization_scope && respond_to?(_serialization_scope, true)
|
|
39
|
+
|
|
40
|
+
send(_serialization_scope)
|
|
24
41
|
end
|
|
25
42
|
|
|
26
43
|
def get_serializer(resource, options = {})
|
|
27
|
-
|
|
44
|
+
unless use_adapter?
|
|
28
45
|
warn 'ActionController::Serialization#use_adapter? has been removed. '\
|
|
29
46
|
"Please pass 'adapter: false' or see ActiveSupport::SerializableResource.new"
|
|
30
47
|
options[:adapter] = false
|
|
31
48
|
end
|
|
49
|
+
|
|
50
|
+
options.fetch(:namespace) { options[:namespace] = namespace_for_serializer }
|
|
51
|
+
|
|
32
52
|
serializable_resource = ActiveModelSerializers::SerializableResource.new(resource, options)
|
|
33
53
|
serializable_resource.serialization_scope ||= options.fetch(:scope) { serialization_scope }
|
|
34
54
|
serializable_resource.serialization_scope_name = options.fetch(:scope_name) { _serialization_scope }
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModel
|
|
2
4
|
class Serializer
|
|
3
5
|
module Adapter
|
|
@@ -7,9 +9,11 @@ module ActiveModel
|
|
|
7
9
|
deprecate :inherited, 'ActiveModelSerializers::Adapter::Base.'
|
|
8
10
|
end
|
|
9
11
|
|
|
12
|
+
# :nocov:
|
|
10
13
|
def initialize(serializer, options = {})
|
|
11
14
|
super(ActiveModelSerializers::Adapter::Base.new(serializer, options))
|
|
12
15
|
end
|
|
16
|
+
# :nocov:
|
|
13
17
|
end
|
|
14
18
|
end
|
|
15
19
|
end
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'active_model/serializer/collection_serializer'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
|
|
5
|
+
module ActiveModel
|
|
6
|
+
class Serializer
|
|
7
|
+
class ArraySerializer < CollectionSerializer
|
|
8
|
+
class << self
|
|
9
|
+
extend ActiveModelSerializers::Deprecate
|
|
10
|
+
deprecate :new, 'ActiveModel::Serializer::CollectionSerializer.'
|
|
11
|
+
end
|
|
7
12
|
end
|
|
8
13
|
end
|
|
9
14
|
end
|