From c3fd0d8e985307d6ca206c5e8f9562f26d529ef4 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 18 Nov 2015 17:01:59 +0100 Subject: [PATCH] Fix loading record by slug In a repo route we need to find record by slug there is no easy way to do it with a public finders API, so we need to use adapter and serializers directly. The problem is that the old way of doing this didn't use the normalizePayload function and also it didn't add included records properly. New code properly normalizes response and adds all of the embedded records that were extracted from the response. --- app/models/repo.coffee | 12 ++++++++++-- app/serializers/repo.js | 10 +++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/models/repo.coffee b/app/models/repo.coffee index 6467566e..80a9e57f 100644 --- a/app/models/repo.coffee +++ b/app/models/repo.coffee @@ -162,8 +162,16 @@ Repo.reopenClass else adapter = store.adapterFor('repo') modelClass = store.modelFor('repo') - adapter.findRecord(store, modelClass, slug).then (resourceHash) -> - store.push(store.normalize('repo', resourceHash)); + adapter.findRecord(store, modelClass, slug).then (payload) -> + serializer = store.serializerFor('repo') + modelClass = store.modelFor('repo') + result = serializer.normalizeResponse(store, modelClass, payload, null, 'findRecord') + + repo = store.push(data: result.data) + for record in result.included + r = store.push(data: record) + + repo , -> error = new Error('repo not found') error.slug = slug diff --git a/app/serializers/repo.js b/app/serializers/repo.js index cab2e71a..8aed2822 100644 --- a/app/serializers/repo.js +++ b/app/serializers/repo.js @@ -2,7 +2,15 @@ import Ember from 'ember'; import V2FallbackSerializer from 'travis/serializers/v2_fallback'; var Serializer = V2FallbackSerializer.extend({ - isNewSerializerAPI: true + isNewSerializerAPI: true, + + normalizeResponse(store, primaryModelClass, payload, id, requestType) { + if(!id && requestType == 'findRecord') { + id = payload.id; + } + + return this._super(store, primaryModelClass, payload, id, requestType); + } }); export default Serializer;