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 3
3
Breaking changes:
4
4
5
5
Features:
6
+ - [ #1616 ] ( https://github.com/rails-api/active_model_serializers/pull/1616 ) SerializableResource handles no serializer like controller. (@bf4 )
6
7
- [ #1618 ] ( https://github.com/rails-api/active_model_serializers/issues/1618 ) Get collection root key for
7
8
empty collection from explicit serializer option, when possible. (@bf4 )
8
9
- [ #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 = {})
33
33
options [ :adapter ] = false
34
34
end
35
35
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
50
42
end
51
43
52
44
# Deprecated
Original file line number Diff line number Diff line change @@ -30,11 +30,19 @@ def serialization_scope_name=(scope_name)
30
30
serializer_opts [ :scope_name ] = scope_name
31
31
end
32
32
33
+ # NOTE: if no adapter is available, returns the resource itself. (i.e. adapter is a no-op)
33
34
def adapter
34
- @adapter ||= ActiveModelSerializers :: Adapter . create ( serializer_instance , adapter_opts )
35
+ @adapter ||= find_adapter
35
36
end
36
37
alias adapter_instance adapter
37
38
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
+
38
46
def serializer_instance
39
47
@serializer_instance ||= serializer . new ( resource , serializer_opts )
40
48
end
You can’t perform that action at this time.
0 commit comments