@@ -5,8 +5,7 @@ class JsonApi < Adapter
5
5
def initialize ( serializer , options = { } )
6
6
super
7
7
serializer . root = true
8
- @hash = { }
9
- @top = @options . fetch ( :top ) { @hash }
8
+ @hash = { data : [ ] }
10
9
11
10
if fields = options . delete ( :fields )
12
11
@fieldset = ActiveModel ::Serializer ::Fieldset . new ( fields , serializer . json_key )
@@ -17,8 +16,14 @@ def initialize(serializer, options = {})
17
16
18
17
def serializable_hash ( options = { } )
19
18
if serializer . respond_to? ( :each )
20
- @hash [ :data ] = serializer . map do |s |
21
- self . class . new ( s , @options . merge ( top : @top , fieldset : @fieldset ) ) . serializable_hash [ :data ]
19
+ serializer . each do |s |
20
+ result = self . class . new ( s , @options . merge ( fieldset : @fieldset ) ) . serializable_hash
21
+ @hash [ :data ] << result [ :data ]
22
+
23
+ if result [ :included ]
24
+ @hash [ :included ] ||= [ ]
25
+ @hash [ :included ] |= result [ :included ]
26
+ end
22
27
end
23
28
else
24
29
@hash = cached_object do
@@ -53,14 +58,14 @@ def add_included(resource_name, serializers, parent = nil)
53
58
resource_path = [ parent , resource_name ] . compact . join ( '.' )
54
59
55
60
if include_assoc? ( resource_path )
56
- @top [ :included ] ||= [ ]
61
+ @hash [ :included ] ||= [ ]
57
62
58
63
serializers . each do |serializer |
59
64
attrs = attributes_for_serializer ( serializer , @options )
60
65
61
66
add_resource_links ( attrs , serializer , add_included : false )
62
67
63
- @top [ :included ] . push ( attrs ) unless @top [ :included ] . include? ( attrs )
68
+ @hash [ :included ] . push ( attrs ) unless @hash [ :included ] . include? ( attrs )
64
69
end
65
70
end
66
71
0 commit comments