Skip to content

Instantly share code, notes, and snippets.

@benoror
Last active May 1, 2016 17:59
Show Gist options
  • Save benoror/8f3855d6f843eff63135a233b00874ae to your computer and use it in GitHub Desktop.
Save benoror/8f3855d6f843eff63135a233b00874ae to your computer and use it in GitHub Desktop.
AirtableSerializer
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