Skip to content

Commit 285cdf8

Browse files
committed
Split serializable_hash into two methods.
1 parent 572ff7d commit 285cdf8

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ class ActiveModel::Serializer::Adapter::JsonApi < ActiveModel::Serializer::Adapt
55

66
def initialize(serializer, options = {})
77
super
8-
@hash = { data: [] }
9-
108
@included = ActiveModel::Serializer::Utils.include_args_to_hash(@options[:include])
119
fields = options.delete(:fields)
1210
if fields
@@ -19,38 +17,50 @@ def initialize(serializer, options = {})
1917
def serializable_hash(options = nil)
2018
options ||= {}
2119
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)
3621
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)
4323
end
44-
@hash
4524
end
4625

4726
def fragment_cache(cached_hash, non_cached_hash)
4827
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)
5029
end
5130

5231
private
5332

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+
5464
def resource_identifier_type_for(serializer)
5565
if ActiveModel::Serializer.config.jsonapi_resource_type == :singular
5666
serializer.object.class.model_name.singular

0 commit comments

Comments
 (0)