Skip to content

Instantly share code, notes, and snippets.

@samuraisam
Created December 27, 2013 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samuraisam/8140992 to your computer and use it in GitHub Desktop.
Save samuraisam/8140992 to your computer and use it in GitHub Desktop.
// generalize some of the embedded extraction. transforms merchant.locations into ids and returns a list of locations
function extractEmbeddedData(obj, propertyName) {
var ids = [];
var embeddedObjs = [];
if (!Ember.isNone(obj[propertyName])) {
var subObj = obj[propertyName];
var isArray = Array.isArray(subObj);
if (!isArray) {
subObj = [subObj];
}
subObj.forEach(function(subElement) {
embeddedObjs.push(subElement);
ids.push(subElement.id);
});
obj[propertyName] = isArray ? ids : ids[0];
}
return embeddedObjs;
}
App.MerchantSerializer = DS.DjangoRESTSerializer.extend({
extractSingle: function(store, type, payload) {
payload.locations = extractEmbeddedData(payload, 'locations');
return this._super.apply(this, arguments);
},
extractArray: function(store, type, payload) {
var locations = [];
payload.forEach(function(merchant) {
extractEmbeddedData(merchant, 'locations').forEach(function(loc) {
locations.push(loc);
});
});
// payload = {'merchants': payload, 'locations': locations} //<-- this breaks because it expects an array to be returned
payload.locations = locations;
return this._super.apply(this, arguments);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment