active_model_serializers 0.10.7 → 0.10.10
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 +45 -1
- data/README.md +2 -2
- 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 +6 -6
- data/lib/active_model/serializer/concerns/caching.rb +5 -1
- 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 +2 -0
- 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 +5 -0
- data/lib/active_model/serializer/version.rb +3 -1
- data/lib/active_model/serializer.rb +32 -16
- 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 +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/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.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 +2 -0
- metadata +64 -290
- 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: 20ead782c7fc4fcfbfd9739a0fcb1957f65284c65c53b619b3b2ac5ed7339bc3
|
|
4
|
+
data.tar.gz: d65bf0ce1f442f19679c36f624fde661f6ce4d97db1f849ac948d104ac3d88d2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ff70ab49d8bc826f3247ffefe845a169411a2a0767a92fa5de560894f70914c99bdad75d17cf2403c7a1eeff68a1611dcfa35da175d2f2cc711c5f7961ac522f
|
|
7
|
+
data.tar.gz: d85f6549fb002b01220c0710f3928489d747792b4cd9bf65fef2b712dd3c70a6e628a6e33f306927886e85a0f50d32d195c988c8cb7d6045c30f235d5410f6c6
|
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.10...0-10-stable)
|
|
4
4
|
|
|
5
5
|
Breaking changes:
|
|
6
6
|
|
|
@@ -10,6 +10,50 @@ Fixes:
|
|
|
10
10
|
|
|
11
11
|
Misc:
|
|
12
12
|
|
|
13
|
+
### [v0.10.10 (2019-07-13)](https://github.com/rails-api/active_model_serializers/compare/v0.10.9...v0.10.10)
|
|
14
|
+
|
|
15
|
+
Fixes:
|
|
16
|
+
|
|
17
|
+
- [#2319](https://github.com/rails-api/active_model_serializers/pull/2319) Fixes #2316. (@kylekeesling)
|
|
18
|
+
- Fix Rails 6.0 deprication warnings
|
|
19
|
+
- update test fixture schema to use `timestamps` instead of `timestamp`
|
|
20
|
+
- [#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)
|
|
21
|
+
- [#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)
|
|
22
|
+
- Fixes incorrect json-api generation when `jsonapi_use_foreign_key_on_belongs_to_relationship` is `true` and the relationship is blank
|
|
23
|
+
- [#2172](https://github.com/rails-api/active_model_serializers/pull/2172) Preserve the namespace when falling back to a superclass serializer
|
|
24
|
+
|
|
25
|
+
Misc:
|
|
26
|
+
|
|
27
|
+
- [#2327](https://github.com/rails-api/active_model_serializers/pull/2327) Add support for Ruby 2.6 on Travis CI (@wasifhossain)
|
|
28
|
+
- [#2304](https://github.com/rails-api/active_model_serializers/pull/2304) Slim down bundled gem by excluding test files and docs (@greysteil)
|
|
29
|
+
|
|
30
|
+
### [v0.10.9 (2019-02-08)](https://github.com/rails-api/active_model_serializers/compare/v0.10.8...v0.10.9)
|
|
31
|
+
|
|
32
|
+
Fixes:
|
|
33
|
+
|
|
34
|
+
- [#2288](https://github.com/rails-api/active_model_serializers/pull/2288)
|
|
35
|
+
Change the fetch method to deal with recyclable key cache strategy.
|
|
36
|
+
Fixes #2287. (@cintamani, @wasifhossain)
|
|
37
|
+
- [#2307](https://github.com/rails-api/active_model_serializers/pull/2307) Falsey attribute values should not be reevaluated.
|
|
38
|
+
|
|
39
|
+
Misc:
|
|
40
|
+
|
|
41
|
+
- [#2309](https://github.com/rails-api/active_model_serializers/pull/2309) Performance and memory usage fixes
|
|
42
|
+
|
|
43
|
+
### [v0.10.8 (2018-11-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...v0.10.8)
|
|
44
|
+
|
|
45
|
+
Features:
|
|
46
|
+
- [#2279](https://github.com/rails-api/active_model_serializers/pull/2279) Support condition options in serializer link statements
|
|
47
|
+
|
|
48
|
+
Fixes:
|
|
49
|
+
|
|
50
|
+
- [#2296](https://github.com/rails-api/active_model_serializers/pull/2296) Fixes #2295 (@Hirurg103)
|
|
51
|
+
- Fix finding of namespaced serializer and non-namespaced model.
|
|
52
|
+
- [#2289](https://github.com/rails-api/active_model_serializers/pull/2289) Fixes #2255 (@f-mer)
|
|
53
|
+
- Fix autoloading race condition, especially in Rails 5.
|
|
54
|
+
- [#2299](https://github.com/rails-api/active_model_serializers/pull/2299) Fixes #2270 (@chau-bao-long via #2276)
|
|
55
|
+
- Fix reflection thread-safety bug
|
|
56
|
+
|
|
13
57
|
### [v0.10.7 (2017-11-14)](https://github.com/rails-api/active_model_serializers/compare/v0.10.6...v0.10.7)
|
|
14
58
|
|
|
15
59
|
Regressions Fixed From v0.10.6:
|
data/README.md
CHANGED
|
@@ -266,8 +266,8 @@ 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
273
|
[`ActiveModelSerializers::Model`](https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model_serializers/model.rb),
|
|
@@ -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
|
|
|
@@ -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)
|
|
@@ -281,7 +283,9 @@ module ActiveModel
|
|
|
281
283
|
# Use object's cache_key if available, else derive a key from the object
|
|
282
284
|
# Pass the `key` option to the `cache` declaration or override this method to customize the cache key
|
|
283
285
|
def object_cache_key
|
|
284
|
-
if object.respond_to?(:
|
|
286
|
+
if object.respond_to?(:cache_key_with_version)
|
|
287
|
+
object.cache_key_with_version
|
|
288
|
+
elsif object.respond_to?(:cache_key)
|
|
285
289
|
object.cache_key
|
|
286
290
|
elsif (serializer_cache_key = (serializer_class._cache_key || serializer_class._cache_options[:key]))
|
|
287
291
|
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
|
# @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
|
|
|
@@ -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
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'thread_safe'
|
|
2
4
|
require 'jsonapi/include_directive'
|
|
3
5
|
require 'active_model/serializer/collection_serializer'
|
|
@@ -18,16 +20,17 @@ module ActiveModel
|
|
|
18
20
|
# @see #serializable_hash for more details on these valid keys.
|
|
19
21
|
SERIALIZABLE_HASH_VALID_KEYS = [:only, :except, :methods, :include, :root].freeze
|
|
20
22
|
extend ActiveSupport::Autoload
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
eager_autoload do
|
|
24
|
+
autoload :Adapter
|
|
25
|
+
autoload :Null
|
|
26
|
+
autoload :Attribute
|
|
27
|
+
autoload :Link
|
|
28
|
+
autoload :Association
|
|
29
|
+
autoload :Reflection
|
|
30
|
+
autoload :BelongsToReflection
|
|
31
|
+
autoload :HasOneReflection
|
|
32
|
+
autoload :HasManyReflection
|
|
33
|
+
end
|
|
31
34
|
include ActiveSupport::Configurable
|
|
32
35
|
include Caching
|
|
33
36
|
|
|
@@ -91,7 +94,7 @@ module ActiveModel
|
|
|
91
94
|
if serializer_class
|
|
92
95
|
serializer_class
|
|
93
96
|
elsif klass.superclass
|
|
94
|
-
get_serializer_for(klass.superclass)
|
|
97
|
+
get_serializer_for(klass.superclass, namespace)
|
|
95
98
|
else
|
|
96
99
|
nil # No serializer found
|
|
97
100
|
end
|
|
@@ -275,9 +278,14 @@ module ActiveModel
|
|
|
275
278
|
# link(:self) { "http://example.com/resource/#{object.id}" }
|
|
276
279
|
# @example
|
|
277
280
|
# link :resource, "http://example.com/resource"
|
|
281
|
+
# @example
|
|
282
|
+
# link(:callback, if: :internal?), { "http://example.com/callback" }
|
|
278
283
|
#
|
|
279
|
-
def self.link(name,
|
|
280
|
-
|
|
284
|
+
def self.link(name, *args, &block)
|
|
285
|
+
options = args.extract_options!
|
|
286
|
+
# For compatibility with the use case of passing link directly as string argument
|
|
287
|
+
# without block, we are creating a wrapping block
|
|
288
|
+
_links[name] = Link.new(name, options, block || ->(_serializer) { args.first })
|
|
281
289
|
end
|
|
282
290
|
|
|
283
291
|
# Set the JSON API meta attribute of a serializer.
|
|
@@ -341,7 +349,7 @@ module ActiveModel
|
|
|
341
349
|
return Enumerator.new {} unless object
|
|
342
350
|
|
|
343
351
|
Enumerator.new do |y|
|
|
344
|
-
self.class._reflections.each do |key, reflection|
|
|
352
|
+
(self.instance_reflections ||= self.class._reflections.deep_dup).each do |key, reflection|
|
|
345
353
|
next if reflection.excluded?(self)
|
|
346
354
|
next unless include_directive.key?(key)
|
|
347
355
|
|
|
@@ -357,6 +365,9 @@ module ActiveModel
|
|
|
357
365
|
def serializable_hash(adapter_options = nil, options = {}, adapter_instance = self.class.serialization_adapter_instance)
|
|
358
366
|
adapter_options ||= {}
|
|
359
367
|
options[:include_directive] ||= ActiveModel::Serializer.include_directive_from_options(adapter_options)
|
|
368
|
+
if (fieldset = adapter_options[:fieldset])
|
|
369
|
+
options[:fields] = fieldset.fields_for(json_key)
|
|
370
|
+
end
|
|
360
371
|
resource = attributes_hash(adapter_options, options, adapter_instance)
|
|
361
372
|
relationships = associations_hash(adapter_options, options, adapter_instance)
|
|
362
373
|
resource.merge(relationships)
|
|
@@ -371,7 +382,12 @@ module ActiveModel
|
|
|
371
382
|
|
|
372
383
|
# Used by adapter as resource root.
|
|
373
384
|
def json_key
|
|
374
|
-
root || _type ||
|
|
385
|
+
root || _type ||
|
|
386
|
+
begin
|
|
387
|
+
object.class.model_name.to_s.underscore
|
|
388
|
+
rescue ArgumentError
|
|
389
|
+
'anonymous_object'
|
|
390
|
+
end
|
|
375
391
|
end
|
|
376
392
|
|
|
377
393
|
def read_attribute_for_serialization(attr)
|
|
@@ -405,6 +421,6 @@ module ActiveModel
|
|
|
405
421
|
|
|
406
422
|
protected
|
|
407
423
|
|
|
408
|
-
attr_accessor :instance_options
|
|
424
|
+
attr_accessor :instance_options, :instance_reflections
|
|
409
425
|
end
|
|
410
426
|
end
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModelSerializers
|
|
2
4
|
module Adapter
|
|
3
5
|
class Attributes < Base
|
|
6
|
+
def initialize(*)
|
|
7
|
+
super
|
|
8
|
+
instance_options[:fieldset] ||= ActiveModel::Serializer::Fieldset.new(fields_to_fieldset(instance_options.delete(:fields)))
|
|
9
|
+
end
|
|
10
|
+
|
|
4
11
|
def serializable_hash(options = nil)
|
|
5
12
|
options = serialization_options(options)
|
|
6
13
|
options[:fields] ||= instance_options[:fields]
|
|
@@ -8,6 +15,22 @@ module ActiveModelSerializers
|
|
|
8
15
|
|
|
9
16
|
self.class.transform_key_casing!(serialized_hash, instance_options)
|
|
10
17
|
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def fields_to_fieldset(fields)
|
|
22
|
+
return fields if fields.nil?
|
|
23
|
+
resource_fields = []
|
|
24
|
+
relationship_fields = {}
|
|
25
|
+
fields.each do |field|
|
|
26
|
+
case field
|
|
27
|
+
when Symbol, String then resource_fields << field
|
|
28
|
+
when Hash then relationship_fields.merge!(field)
|
|
29
|
+
else fail ArgumentError, "Unknown conversion of fields to fieldset: '#{field.inspect}' in '#{fields.inspect}'"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
relationship_fields.merge!(serializer.json_key.to_sym => resource_fields)
|
|
33
|
+
end
|
|
11
34
|
end
|
|
12
35
|
end
|
|
13
36
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModelSerializers
|
|
2
4
|
module Adapter
|
|
3
5
|
class JsonApi
|
|
@@ -11,7 +13,7 @@ module ActiveModelSerializers
|
|
|
11
13
|
type = inflect_type(type)
|
|
12
14
|
type = type_for(:no_class_needed, type, options)
|
|
13
15
|
if id.blank?
|
|
14
|
-
|
|
16
|
+
nil
|
|
15
17
|
else
|
|
16
18
|
{ id: id.to_s, type: type }
|
|
17
19
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# {http://jsonapi.org/format/ JSON API specification}
|
|
2
4
|
# rubocop:disable Style/AsciiComments
|
|
3
5
|
# TODO: implement!
|
|
@@ -22,14 +24,16 @@ module ActiveModelSerializers
|
|
|
22
24
|
module Adapter
|
|
23
25
|
class JsonApi < Base
|
|
24
26
|
extend ActiveSupport::Autoload
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
eager_autoload do
|
|
28
|
+
autoload :Jsonapi
|
|
29
|
+
autoload :ResourceIdentifier
|
|
30
|
+
autoload :Link
|
|
31
|
+
autoload :PaginationLinks
|
|
32
|
+
autoload :Meta
|
|
33
|
+
autoload :Error
|
|
34
|
+
autoload :Deserialization
|
|
35
|
+
autoload :Relationship
|
|
36
|
+
end
|
|
33
37
|
|
|
34
38
|
def self.default_key_transform
|
|
35
39
|
:dash
|
|
@@ -480,7 +484,8 @@ module ActiveModelSerializers
|
|
|
480
484
|
# }.reject! {|_,v| v.nil? }
|
|
481
485
|
def links_for(serializer)
|
|
482
486
|
serializer._links.each_with_object({}) do |(name, value), hash|
|
|
483
|
-
|
|
487
|
+
next if value.excluded?(serializer)
|
|
488
|
+
result = Link.new(serializer, value.block).as_json
|
|
484
489
|
hash[name] = result if result
|
|
485
490
|
end
|
|
486
491
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveModelSerializers
|
|
2
4
|
module Adapter
|
|
3
5
|
UnknownAdapterError = Class.new(ArgumentError)
|
|
@@ -35,7 +37,7 @@ module ActiveModelSerializers
|
|
|
35
37
|
|
|
36
38
|
# @return [Array<Symbol>] list of adapter names
|
|
37
39
|
def adapters
|
|
38
|
-
adapter_map.keys.sort
|
|
40
|
+
adapter_map.keys.sort!
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
# Adds an adapter 'klass' with 'name' to the 'adapter_map'
|