From 49c8bc6b8afff46077975a0c37f7dceb89927fd5 Mon Sep 17 00:00:00 2001 From: Sean Devine Date: Tue, 2 Aug 2016 12:38:26 -0400 Subject: [PATCH 1/2] avoid situation where the linkage data could be partially calculated --- lib/jsonapi/resource_serializer.rb | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/jsonapi/resource_serializer.rb b/lib/jsonapi/resource_serializer.rb index 49f0bae04..e28f17fa9 100644 --- a/lib/jsonapi/resource_serializer.rb +++ b/lib/jsonapi/resource_serializer.rb @@ -353,16 +353,12 @@ def related_link(source, relationship) end def to_one_linkage(source, relationship) - linkage = {} - linkage_id = foreign_key_value(source, relationship) - - if linkage_id - linkage[:type] = format_key(relationship.type_for_source(source)) - linkage[:id] = linkage_id - else - linkage = nil - end - linkage + return unless linkage_id = foreign_key_value(source, relationship) + return unless linkage_type = format_key(relationship.type_for_source(source)) + { + type: linkage_type, + id: linkage_id, + } end def to_many_linkage(source, relationship) @@ -390,7 +386,9 @@ def to_many_linkage(source, relationship) end linkage_types_and_values.each do |type, value| - linkage.append({type: format_key(type), id: @id_formatter.format(value)}) + if type && value + linkage.append({type: format_key(type), id: @id_formatter.format(value)}) + end end linkage end From ea8bb3c267f372f8c30634853aa737b8fa919a94 Mon Sep 17 00:00:00 2001 From: Sean Devine Date: Tue, 2 Aug 2016 13:08:15 -0400 Subject: [PATCH 2/2] test presence (catch empty strings too) of linkage_id and linkage_type --- lib/jsonapi/resource_serializer.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/jsonapi/resource_serializer.rb b/lib/jsonapi/resource_serializer.rb index e28f17fa9..a023b7835 100644 --- a/lib/jsonapi/resource_serializer.rb +++ b/lib/jsonapi/resource_serializer.rb @@ -353,8 +353,10 @@ def related_link(source, relationship) end def to_one_linkage(source, relationship) - return unless linkage_id = foreign_key_value(source, relationship) - return unless linkage_type = format_key(relationship.type_for_source(source)) + linkage_id = foreign_key_value(source, relationship) + linkage_type = format_key(relationship.type_for_source(source)) + return unless linkage_id.present? && linkage_type.present? + { type: linkage_type, id: linkage_id,