File tree Expand file tree Collapse file tree 3 files changed +16
-15
lines changed Expand file tree Collapse file tree 3 files changed +16
-15
lines changed Original file line number Diff line number Diff line change 33Breaking changes:
44
55Features:
6+ - [ #1616 ] ( https://github.com/rails-api/active_model_serializers/pull/1616 ) SerializableResource handles no serializer like controller. (@bf4 )
67- [ #1618 ] ( https://github.com/rails-api/active_model_serializers/issues/1618 ) Get collection root key for
78 empty collection from explicit serializer option, when possible. (@bf4 )
89- [ #1574 ] ( https://github.com/rails-api/active_model_serializers/pull/1574 ) Provide key translation. (@remear )
Original file line number Diff line number Diff line change @@ -33,20 +33,12 @@ def get_serializer(resource, options = {})
3333 options [ :adapter ] = false
3434 end
3535 serializable_resource = ActiveModel ::SerializableResource . new ( resource , options )
36- if serializable_resource . serializer?
37- serializable_resource . serialization_scope ||= serialization_scope
38- serializable_resource . serialization_scope_name = _serialization_scope
39- begin
40- # Necessary to ensure we have an adapter for the serializable resource
41- # after it has been figured.
42- # TODO: This logic should be less opaque and probably moved into the SerializableResource.
43- serializable_resource . tap ( &:adapter )
44- rescue ActiveModel ::Serializer ::CollectionSerializer ::NoSerializerError
45- resource
46- end
47- else
48- resource
49- end
36+ serializable_resource . serialization_scope ||= serialization_scope
37+ serializable_resource . serialization_scope_name = _serialization_scope
38+ # For compatibility with the JSON renderer: `json.to_json(options) if json.is_a?(String)`.
39+ # Otherwise, since `serializable_resource` is not a string, the renderer would call
40+ # `to_json` on a String and given odd results, such as `"".to_json #=> '""'`
41+ serializable_resource . adapter . is_a? ( String ) ? serializable_resource . adapter : serializable_resource
5042 end
5143
5244 # Deprecated
Original file line number Diff line number Diff line change @@ -30,11 +30,19 @@ def serialization_scope_name=(scope_name)
3030 serializer_opts [ :scope_name ] = scope_name
3131 end
3232
33+ # NOTE: if no adapter is available, returns the resource itself. (i.e. adapter is a no-op)
3334 def adapter
34- @adapter ||= ActiveModelSerializers :: Adapter . create ( serializer_instance , adapter_opts )
35+ @adapter ||= find_adapter
3536 end
3637 alias adapter_instance adapter
3738
39+ def find_adapter
40+ return resource unless serializer?
41+ ActiveModelSerializers ::Adapter . create ( serializer_instance , adapter_opts )
42+ rescue ActiveModel ::Serializer ::CollectionSerializer ::NoSerializerError
43+ resource
44+ end
45+
3846 def serializer_instance
3947 @serializer_instance ||= serializer . new ( resource , serializer_opts )
4048 end
You can’t perform that action at this time.
0 commit comments