From 39a579c9dbbb9c72294a0cba8a626c4533e2df00 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 11 Nov 2015 14:57:22 +0100 Subject: [PATCH] Fix handling relationships for V2 API * we should look for both embedded relationship and relationship key, so in cases like for commit, when there's a full commit data on "commit" property, and only id at "commit_id", we will use commit data * we can't add @type to V2 fallback, because in other places we chack for @type to distinguish V2 and V3 payloads * there's no need to include a record in "included" if there's only a type and an id there --- app/serializers/v2_fallback.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app/serializers/v2_fallback.js b/app/serializers/v2_fallback.js index b22e563e..2aec382a 100644 --- a/app/serializers/v2_fallback.js +++ b/app/serializers/v2_fallback.js @@ -15,9 +15,9 @@ export default V3Serializer.extend({ let relationship = null; let relationshipKey = this.keyForV2Relationship(key, relationshipMeta.kind, 'deserialize'); - if (resourceHash.hasOwnProperty(relationshipKey)) { + if (resourceHash.hasOwnProperty(key) || resourceHash.hasOwnProperty(relationshipKey)) { let data = null; - let relationshipHash = resourceHash[relationshipKey]; + let relationshipHash = resourceHash[key] || resourceHash[relationshipKey]; if (relationshipMeta.kind === 'belongsTo') { data = this.extractRelationship(relationshipMeta.type, relationshipHash); } else if (relationshipMeta.kind === 'hasMany') { @@ -46,7 +46,6 @@ export default V3Serializer.extend({ resourceHash[key] = attributes[key]; }; - resourceHash['@type'] = modelKey; resourceHash['type'] = modelKey; delete resourceHash[modelKey]; } @@ -61,15 +60,18 @@ export default V3Serializer.extend({ Object.keys(data.relationships).forEach(function (key) { let relationship = data.relationships[key]; let process = function(data) { - let type = key.singularize(); - let serializer = store.serializerFor(type); - let modelClass = store.modelFor(type); - let normalized = serializer.normalize(modelClass, data); - included.push(normalized.data); - if(normalized.included) { - normalized.included.forEach(function(item) { - included.push(item); - }); + if(Object.keys(data).sort()+'' !== 'id,type') { + // no need to add records if they have only id and type + let type = key.singularize(); + let serializer = store.serializerFor(type); + let modelClass = store.modelFor(type); + let normalized = serializer.normalize(modelClass, data); + included.push(normalized.data); + if(normalized.included) { + normalized.included.forEach(function(item) { + included.push(item); + }); + } } };