Skip to content

Commit fe42b50

Browse files
committed
Split serializable_hash into two methods.
1 parent d953947 commit fe42b50

File tree

1 file changed

+33
-23
lines changed

1 file changed

+33
-23
lines changed

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)