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
This commit is contained in:
Piotr Sarnacki 2015-11-11 14:57:22 +01:00
parent 34e53c1034
commit 39a579c9db

View File

@ -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);
});
}
}
};