diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index 4cb31643..8eafe166 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -102,9 +102,8 @@ module ActiveModel end def serializable_hash_for_single_resource - primary_data = primary_data_for(serializer) - relationships = relationships_for(serializer) - primary_data[:relationships] = relationships if relationships.any? + primary_data = resource_object_for(serializer) + hash = { data: primary_data } included = included_resources(@include_tree, [primary_data]) @@ -142,26 +141,22 @@ module ActiveModel end def resource_object_for(serializer) - cache_check(serializer) do + resource_object = cache_check(serializer) do resource_object = resource_identifier_for(serializer) requested_fields = fieldset && fieldset.fields_for(resource_object[:type]) attributes = attributes_for(serializer, requested_fields) resource_object[:attributes] = attributes if attributes.any? - - links = links_for(serializer) - resource_object[:links] = links if links.any? - resource_object end - end - def primary_data_for(serializer) - if serializer.respond_to?(:each) - serializer.map { |s| resource_object_for(s) } - else - resource_object_for(serializer) - end + relationships = relationships_for(serializer) + resource_object[:relationships] = relationships if relationships.any? + + links = links_for(serializer) + resource_object[:links] = links if links.any? + + resource_object end def relationship_value_for(serializer, options = {}) @@ -201,9 +196,7 @@ module ActiveModel else return unless serializer && serializer.object - resource_object = primary_data_for(serializer) - relationships = relationships_for(serializer) - resource_object[:relationships] = relationships if relationships.any? + resource_object = resource_object_for(serializer) return if included.include?(resource_object) || primary_data.include?(resource_object) included.push(resource_object)