From f95f7369f07a9543efd5b7bbcb3e40e309762260 Mon Sep 17 00:00:00 2001 From: Lucas Hosseini Date: Mon, 31 Aug 2015 03:24:03 +0200 Subject: [PATCH] Refactor `add_resource_relationship`. --- .../serializer/adapter/json_api.rb | 43 ++++++------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index ff10c2b3..2447ca03 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -55,25 +55,6 @@ module ActiveModel { id: id, type: type } end - def add_relationships(resource, name, serializers) - resource[:relationships] ||= {} - resource[:relationships][name] ||= { data: [] } - resource[:relationships][name][:data] += serializers.map { |serializer| resource_identifier(serializer) } - end - - def add_relationship(resource, name, serializer, val=nil) - resource[:relationships] ||= {} - - resource[:relationships][name] ||= {} - resource[:relationships][name][:data] = if val - val - elsif serializer && serializer.object - resource_identifier(serializer) - else - nil - end - end - def add_included(resource_name, serializers, parent = nil) unless serializers.respond_to?(:each) return unless serializers.object @@ -148,22 +129,24 @@ module ActiveModel def add_resource_relationships(attrs, serializer, options = {}) options[:add_included] = options.fetch(:add_included, true) + attrs[:relationships] ||= {} if serializer.associations.any? serializer.associations.each do |association| key = association.key serializer = association.serializer opts = association.options + value = if serializer.respond_to?(:each) + serializer.map { |s| resource_identifier(s) } + else + if opts[:virtual_value] + opts[:virtual_value] + elsif serializer && serializer.object + resource_identifier(serializer) + else + nil + end + end - attrs[:relationships] ||= {} - - if serializer.respond_to?(:each) - add_relationships(attrs, key, serializer) - else - if opts[:virtual_value] - add_relationship(attrs, key, nil, opts[:virtual_value]) - else - add_relationship(attrs, key, serializer) - end - end + attrs[:relationships][association.key] = { data: value } if options[:add_included] Array(serializer).each do |s|