Skip to content

Commit

Permalink
Merge pull request #150 from holidayextras/memory-store-clone
Browse files Browse the repository at this point in the history
Clone all objects passing in-to and out-of the in memory store
  • Loading branch information
theninj4 committed Jun 9, 2016
2 parents 1595316 + d1462fc commit 7dff9d3
Showing 1 changed file with 31 additions and 9 deletions.
40 changes: 31 additions & 9 deletions lib/MemoryHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ MemoryStore.prototype.search = function(request, callback) {
if (request.params.page) {
results = results.slice(request.params.page.offset, request.params.page.offset + request.params.page.limit);
}
return callback(null, results, resultCount);
return callback(null, MemoryStore._clone(results), resultCount);
};

/**
Expand All @@ -59,17 +59,27 @@ MemoryStore.prototype.find = function(request, callback) {
}

// Return the requested resource
return callback(null, theResource);
return callback(null, MemoryStore._clone(theResource));
};

/**
Create (store) a new resource give a resource type and an object.
Create (store) a new resource given a resource type and an object.
*/
MemoryStore.prototype.create = function(request, newResource, callback) {
// Check to see if the ID already exists
var index = MemoryStore._indexOf(resources[request.params.type], newResource);
if (index !== -1) {
return callback({
status: "403",
code: "EFORBIDDEN",
title: "Requested resource already exists",
detail: "The requested resource already exists of type " + request.params.type + " with id " + request.params.id
});
}
// Push the newResource into our in-memory store.
resources[request.params.type].push(newResource);
// Return the newly created resource
return callback(null, newResource);
return callback(null, MemoryStore._clone(newResource));
};

/**
Expand All @@ -80,9 +90,9 @@ MemoryStore.prototype.delete = function(request, callback) {
this.find(request, function(err, theResource) {
if (err) return callback(err);

// Remove the resource from the in-meory store.
var resourceIndex = resources[request.params.type].indexOf(theResource);
resources[request.params.type].splice(resourceIndex, 1);
// Remove the resource from the in-memory store.
var index = MemoryStore._indexOf(resources[request.params.type], theResource);
resources[request.params.type].splice(index, 1);

// Return with no error
return callback();
Expand All @@ -102,10 +112,11 @@ MemoryStore.prototype.update = function(request, partialResource, callback) {
theResource = _.assign(theResource, partialResource);

// Push the newly updated resource back into the in-memory store
resources[request.params.type][request.params.id] = theResource;
var index = MemoryStore._indexOf(resources[request.params.type], theResource);
resources[request.params.type][index] = theResource;

// Return the newly updated resource
return callback(null, theResource);
return callback(null, MemoryStore._clone(theResource));
});
};

Expand Down Expand Up @@ -133,3 +144,14 @@ MemoryStore.prototype._sortList = function(request, list) {
}
});
};

MemoryStore._clone = function(obj) {
return JSON.parse(JSON.stringify(obj));
};

MemoryStore._indexOf = function(list, obj) {
for (var i in list) {
if (list[i].id === obj.id) return i;
}
return -1;
};

0 comments on commit 7dff9d3

Please sign in to comment.