46 lines
1.2 KiB
JavaScript
46 lines
1.2 KiB
JavaScript
|
import Ember from 'ember';
|
||
|
import JSONSerializer from 'ember-data/serializers/json';
|
||
|
|
||
|
const { makeArray } = Ember;
|
||
|
|
||
|
export default JSONSerializer.extend({
|
||
|
primaryKey: 'ID',
|
||
|
|
||
|
keyForAttribute(attr) {
|
||
|
return attr.camelize().capitalize();
|
||
|
},
|
||
|
|
||
|
keyForRelationship(attr, relationshipType) {
|
||
|
const key = `${attr.camelize().capitalize()}ID`;
|
||
|
return relationshipType === 'hasMany' ? key.pluralize() : key;
|
||
|
},
|
||
|
|
||
|
// Modeled after the pushPayload for ember-data/serializers/rest
|
||
|
pushPayload(store, payload) {
|
||
|
const documentHash = {
|
||
|
data: [],
|
||
|
included: [],
|
||
|
};
|
||
|
|
||
|
Object.keys(payload).forEach(key => {
|
||
|
const modelName = this.modelNameFromPayloadKey(key);
|
||
|
const serializer = store.serializerFor(modelName);
|
||
|
const type = store.modelFor(modelName);
|
||
|
|
||
|
makeArray(payload[key]).forEach(hash => {
|
||
|
const { data, included } = serializer.normalize(type, hash, key);
|
||
|
documentHash.data.push(data);
|
||
|
if (included) {
|
||
|
documentHash.included.push(...included);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
store.push(documentHash);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
modelNameFromPayloadKey(key) {
|
||
|
return key.dasherize().singularize();
|
||
|
},
|
||
|
});
|