@@ -7,8 +7,6 @@ class Adapter
77 class JsonApi < Adapter
88 def initialize ( serializer , options = { } )
99 super
10- @hash = { data : [ ] }
11-
1210 @options [ :include ] ||= [ ]
1311 if @options [ :include ] . is_a? ( String )
1412 @options [ :include ] = @options [ :include ] . split ( ',' )
@@ -25,29 +23,10 @@ def initialize(serializer, options = {})
2523 def serializable_hash ( options = nil )
2624 options ||= { }
2725 if serializer . respond_to? ( :each )
28- serializer . each do |s |
29- result = self . class . new ( s , @options . merge ( fieldset : @fieldset ) ) . serializable_hash ( options )
30- @hash [ :data ] << result [ :data ]
31-
32- if result [ :included ]
33- @hash [ :included ] ||= [ ]
34- @hash [ :included ] |= result [ :included ]
35- end
36- end
37-
38- if serializer . paginated?
39- @hash [ :links ] ||= { }
40- @hash [ :links ] . update ( links_for ( serializer , options ) )
41- end
26+ serializable_hash_for_collection ( serializer , options )
4227 else
43- primary_data = primary_data_for ( serializer , options )
44- relationships = relationships_for ( serializer )
45- included = included_for ( serializer )
46- @hash [ :data ] = primary_data
47- @hash [ :data ] [ :relationships ] = relationships if relationships . any?
48- @hash [ :included ] = included if included . any?
28+ serializable_hash_for_single_resource ( serializer , options )
4929 end
50- @hash
5130 end
5231
5332 def fragment_cache ( cached_hash , non_cached_hash )
@@ -57,6 +36,37 @@ def fragment_cache(cached_hash, non_cached_hash)
5736
5837 private
5938
39+ def serializable_hash_for_collection ( serializer , options )
40+ hash = { data : [ ] }
41+ serializer . each do |s |
42+ result = self . class . new ( s , @options . merge ( fieldset : @fieldset ) ) . serializable_hash ( options )
43+ hash [ :data ] << result [ :data ]
44+
45+ if result [ :included ]
46+ hash [ :included ] ||= [ ]
47+ hash [ :included ] |= result [ :included ]
48+ end
49+ end
50+
51+ if serializer . paginated?
52+ hash [ :links ] ||= { }
53+ hash [ :links ] . update ( links_for ( serializer , options ) )
54+ end
55+
56+ hash
57+ end
58+
59+ def serializable_hash_for_single_resource ( serializer , options )
60+ primary_data = primary_data_for ( serializer , options )
61+ relationships = relationships_for ( serializer )
62+ included = included_for ( serializer )
63+ hash = { data : primary_data }
64+ hash [ :data ] [ :relationships ] = relationships if relationships . any?
65+ hash [ :included ] = included if included . any?
66+
67+ hash
68+ end
69+
6070 def resource_identifier_type_for ( serializer )
6171 if ActiveModel ::Serializer . config . jsonapi_resource_type == :singular
6272 serializer . object . class . model_name . singular
0 commit comments