File tree Expand file tree Collapse file tree 3 files changed +7
-13
lines changed Expand file tree Collapse file tree 3 files changed +7
-13
lines changed Original file line number Diff line number Diff line change @@ -43,10 +43,10 @@ def use_adapter?
43
43
@_serializer_opts [ :scope_name ] = _serialization_scope
44
44
45
45
begin
46
- object = serializer . new ( resource , @_serializer_opts )
47
- rescue ActiveModel ::Serializer ::ArraySerializer ::Error
46
+ serialized = serializer . new ( resource , @_serializer_opts )
47
+ rescue ActiveModel ::Serializer ::ArraySerializer ::NoSerializerError
48
48
else
49
- resource = ActiveModel ::Serializer ::Adapter . create ( object , @_adapter_opts )
49
+ resource = ActiveModel ::Serializer ::Adapter . create ( serialized , @_adapter_opts )
50
50
end
51
51
end
52
52
Original file line number Diff line number Diff line change @@ -211,13 +211,7 @@ def each_association(&block)
211
211
association_value ,
212
212
options . except ( :serializer ) . merge ( serializer_from_options ( association_options ) )
213
213
)
214
- rescue ActiveModel ::Serializer ::ArraySerializer ::Error
215
- # 1. Failure to serialize an element in a collection, e.g. [ {hi: "Steve" } ] will fail
216
- # with NoMethodError when the ArraySerializer finds no serializer for the hash { hi: "Steve" },
217
- # and tries to call new on that nil.
218
- # 2. Convert association_value to hash using implicit as_json
219
- # 3. Set as virtual value (serializer is nil)
220
- # 4. Consider warning when this happens
214
+ rescue ActiveModel ::Serializer ::ArraySerializer ::NoSerializerError
221
215
virtual_value = association_value
222
216
virtual_value = virtual_value . as_json if virtual_value . respond_to? ( :as_json )
223
217
association_options [ :association_options ] [ :virtual_value ] = virtual_value
Original file line number Diff line number Diff line change 1
1
module ActiveModel
2
2
class Serializer
3
3
class ArraySerializer
4
- Error = Class . new ( StandardError )
4
+ NoSerializerError = Class . new ( StandardError )
5
5
include Enumerable
6
6
delegate :each , to : :@objects
7
7
8
- attr_reader :meta , :meta_key , :objects
8
+ attr_reader :meta , :meta_key
9
9
10
10
def initialize ( objects , options = { } )
11
11
@resource = objects
@@ -16,7 +16,7 @@ def initialize(objects, options = {})
16
16
)
17
17
18
18
if serializer_class . nil?
19
- fail Error , "No serializer found for object: #{ object . inspect } "
19
+ fail NoSerializerError , "No serializer found for object: #{ object . inspect } "
20
20
else
21
21
serializer_class . new ( object , options . except ( :serializer ) )
22
22
end
You can’t perform that action at this time.
0 commit comments