Last active
May 1, 2016 17:59
-
-
Save benoror/8f3855d6f843eff63135a233b00874ae to your computer and use it in GitHub Desktop.
AirtableSerializer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Ember from 'ember'; | |
import DS from 'ember-data'; | |
/* | |
* Override RESTSerializer since it's the closest to Airtable's afaik | |
*/ | |
export default DS.RESTSerializer.extend({ | |
/* | |
* Normalize each response from Airtable | |
* to meet expected RESTSerializer criteria | |
*/ | |
normalizeResponse(store, type, payload) { | |
/* | |
* Get model name pluralized | |
* ToDo: pluralization with Ember.Inflector | |
*/ | |
const modelNamePlural = type.modelName + 's'; | |
/* | |
* Adapt the response depending if | |
* multiple records are returned | |
* or a single one | |
* and transform it | |
* see Airtable API for more info | |
*/ | |
if(payload.records) { | |
payload[modelNamePlural] = payload.records; | |
delete payload.records; | |
payload.meta = { | |
offset: payload.offset | |
}; | |
delete payload.offset; | |
payload[modelNamePlural].forEach((record) => { | |
Ember.merge(record, record.fields); | |
delete record.fields; | |
record.created = record.createdTime; | |
delete record.createdTime; | |
}); | |
} else { | |
payload[type.modelName] = payload.fields; | |
payload[type.modelName].id = payload.id; | |
payload[type.modelName].created = payload.createdTime; | |
delete payload.id; | |
delete payload.fields; | |
delete payload.createdTime; | |
} | |
return this._super(...arguments); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment