From f885ee8d7d510527c4f6b3cabdf48c4f0b13a6a4 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Mon, 15 May 2017 10:22:13 -0500 Subject: [PATCH] Correct relationships data --- lib/ams/serializer.rb | 21 ++++++++++++++------- test/unit/serializer/as_json_test.rb | 4 ++-- test/unit/serializer/relationships_test.rb | 12 ++++++------ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/ams/serializer.rb b/lib/ams/serializer.rb index 882ad4c1..a8b8cdd1 100644 --- a/lib/ams/serializer.rb +++ b/lib/ams/serializer.rb @@ -108,9 +108,7 @@ module AMS end def #{relation_name} - related_#{relation_name}_ids.map do |id| - relationship_object(id, "#{type}") - end + relationship_object(related_#{relation_name}_ids, "#{type}") end METHOD end @@ -183,10 +181,19 @@ module AMS self.class._relations end - def relationship_object(id, type) - { - "data": { "id": id, "type": type }, # resource linkage - } + def relationship_object(id_or_ids, type) + data = + if id_or_ids.respond_to?(:to_ary) + id_or_ids.map { |id| relationship_data(id, type) } + else + relationship_data(id_or_ids, type) + end + { "data": data } + end + + # resource linkage + def relationship_data(id, type) + { "id": id, "type": type } end def dump(obj) diff --git a/test/unit/serializer/as_json_test.rb b/test/unit/serializer/as_json_test.rb index b56c32e7..38d3ad42 100644 --- a/test/unit/serializer/as_json_test.rb +++ b/test/unit/serializer/as_json_test.rb @@ -30,7 +30,7 @@ module AMS id: 1, type: :profiles, attributes: { name: "name", summary: "description" }, relationships: - { child_models: [{ data: { id: 2, type: "comments" } }] } + { child_models: { data: [{ id: 2, type: "comments" }] } } } assert_equal expected, @serializer_instance.as_json end @@ -40,7 +40,7 @@ module AMS id: 1, type: :profiles, attributes: { name: "name", summary: "description" }, relationships: - { child_models: [{ data: { id: 2, type: "comments" } }] } + { child_models: { data: [{ id: 2, type: "comments" }] } } }.to_json assert_equal expected, @serializer_instance.to_json end diff --git a/test/unit/serializer/relationships_test.rb b/test/unit/serializer/relationships_test.rb index 78c883b5..d90e6dea 100644 --- a/test/unit/serializer/relationships_test.rb +++ b/test/unit/serializer/relationships_test.rb @@ -20,18 +20,18 @@ module AMS def test_model_instance_relations expected_relations = { - child_models: [{ - data: { type: "comments", id: 2 } - }] + child_models: { + data: [{ type: "comments", id: 2 }] + } } assert_equal expected_relations, @serializer_instance.relations end - def test_model_instance_relationship_object + def test_model_instance_relationship_data expected = { - data: { type: :bananas, id: 5 } + type: :bananas, id: 5 } - assert_equal expected, @serializer_instance.relationship_object(5, :bananas) + assert_equal expected, @serializer_instance.relationship_data(5, :bananas) end end end