@@ -4,20 +4,30 @@ class IncludedData
44
55 def initialize ( result_set , data )
66 record_class = result_set . record_class
7- included_set = data . map do |datum |
8- type = datum [ " type" ]
7+ grouped_data = data . group_by { |datum | datum [ "type" ] }
8+ grouped_included_set = grouped_data . each_with_object ( { } ) do | ( type , records ) , h |
99 klass = Utils . compute_type ( record_class , record_class . key_formatter . unformat ( type ) . singularize . classify )
10- params = klass . parser . parameters_from_resource ( datum )
11- resource = klass . load ( params )
12- resource . last_result_set = result_set
13- resource
10+ h [ type ] = records . map do |record |
11+ params = klass . parser . parameters_from_resource ( record )
12+ klass . load ( params ) . tap do |resource |
13+ resource . last_result_set = result_set
14+ end
15+ end
1416 end
1517
16- included_set . concat ( result_set ) if record_class . search_included_in_result_set
17- @data = included_set . group_by ( &:type ) . inject ( { } ) do |h , ( type , resources ) |
18- h [ type ] = resources . index_by ( &:id )
19- h
18+ if record_class . search_included_in_result_set
19+ # deep_merge overrides the nested Arrays o_O
20+ # {a: [1,2]}.deep_merge(a: [3,4]) # => {a: [3,4]}
21+ grouped_included_set . merge! ( result_set . group_by ( &:type ) ) do |_ , resources1 , resources2 |
22+ resources1 + resources2
23+ end
2024 end
25+
26+ grouped_included_set . each do |type , resources |
27+ grouped_included_set [ type ] = resources . index_by ( &:id )
28+ end
29+
30+ @data = grouped_included_set
2131 end
2232
2333 def data_for ( method_name , definition )
0 commit comments