@@ -5,8 +5,6 @@ class ActiveModel::Serializer::Adapter::JsonApi < ActiveModel::Serializer::Adapt
5
5
6
6
def initialize ( serializer , options = { } )
7
7
super
8
- @hash = { data : [ ] }
9
-
10
8
@included = ActiveModel ::Serializer ::Utils . include_args_to_hash ( @options [ :include ] )
11
9
fields = options . delete ( :fields )
12
10
if fields
@@ -19,38 +17,50 @@ def initialize(serializer, options = {})
19
17
def serializable_hash ( options = nil )
20
18
options ||= { }
21
19
if serializer . respond_to? ( :each )
22
- serializer . each do |s |
23
- result = self . class . new ( s , @options . merge ( fieldset : @fieldset ) ) . serializable_hash ( options )
24
- @hash [ :data ] << result [ :data ]
25
-
26
- if result [ :included ]
27
- @hash [ :included ] ||= [ ]
28
- @hash [ :included ] |= result [ :included ]
29
- end
30
- end
31
-
32
- if serializer . paginated?
33
- @hash [ :links ] ||= { }
34
- @hash [ :links ] . update ( links_for ( serializer , options ) )
35
- end
20
+ serializable_hash_for_collection ( serializer , options )
36
21
else
37
- primary_data = primary_data_for ( serializer , options )
38
- relationships = relationships_for ( serializer )
39
- included = included_for ( serializer )
40
- @hash [ :data ] = primary_data
41
- @hash [ :data ] [ :relationships ] = relationships if relationships . any?
42
- @hash [ :included ] = included if included . any?
22
+ serializable_hash_for_single_resource ( serializer , options )
43
23
end
44
- @hash
45
24
end
46
25
47
26
def fragment_cache ( cached_hash , non_cached_hash )
48
27
root = false if @options . include? ( :include )
49
- ActiveModel ::Serializer ::Adapter ::JsonApi ::FragmentCache . new ( ) . fragment_cache ( root , cached_hash , non_cached_hash )
28
+ ActiveModel ::Serializer ::Adapter ::JsonApi ::FragmentCache . new . fragment_cache ( root , cached_hash , non_cached_hash )
50
29
end
51
30
52
31
private
53
32
33
+ def serializable_hash_for_collection ( serializer , options )
34
+ hash = { data : [ ] }
35
+ serializer . each do |s |
36
+ result = self . class . new ( s , @options . merge ( fieldset : @fieldset ) ) . serializable_hash ( options )
37
+ hash [ :data ] << result [ :data ]
38
+
39
+ if result [ :included ]
40
+ hash [ :included ] ||= [ ]
41
+ hash [ :included ] |= result [ :included ]
42
+ end
43
+ end
44
+
45
+ if serializer . paginated?
46
+ hash [ :links ] ||= { }
47
+ hash [ :links ] . update ( links_for ( serializer , options ) )
48
+ end
49
+
50
+ hash
51
+ end
52
+
53
+ def serializable_hash_for_single_resource ( serializer , options )
54
+ primary_data = primary_data_for ( serializer , options )
55
+ relationships = relationships_for ( serializer )
56
+ included = included_for ( serializer )
57
+ hash = { data : primary_data }
58
+ hash [ :data ] [ :relationships ] = relationships if relationships . any?
59
+ hash [ :included ] = included if included . any?
60
+
61
+ hash
62
+ end
63
+
54
64
def resource_identifier_type_for ( serializer )
55
65
if ActiveModel ::Serializer . config . jsonapi_resource_type == :singular
56
66
serializer . object . class . model_name . singular
0 commit comments