diff --git a/lib/adapters/memory.js b/lib/adapters/memory.js index ca24f722..e6f11ffb 100644 --- a/lib/adapters/memory.js +++ b/lib/adapters/memory.js @@ -19,7 +19,7 @@ Memory.prototype.define = function defineModel(descr) { Memory.prototype.create = function create(model, data, callback) { var id = data.id || this.ids[model]++; data.id = id; - this.cache[model][id] = data; + this.cache[model][id] = JSON.stringify(data); process.nextTick(function () { callback(null, id); }); @@ -40,7 +40,7 @@ Memory.prototype.updateOrCreate = function (model, data, callback) { }; Memory.prototype.save = function save(model, data, callback) { - this.cache[model][data.id] = data; + this.cache[model][data.id] = JSON.stringify(data); process.nextTick(function () { callback(null, data); }); @@ -54,7 +54,7 @@ Memory.prototype.exists = function exists(model, id, callback) { Memory.prototype.find = function find(model, id, callback) { process.nextTick(function () { - callback(null, this.cache[model][id]); + callback(null, id in this.cache[model] && JSON.parse(this.cache[model][id])); }.bind(this)); }; @@ -64,8 +64,9 @@ Memory.prototype.destroy = function destroy(model, id, callback) { }; Memory.prototype.all = function all(model, filter, callback) { + var self = this; var nodes = Object.keys(this.cache[model]).map(function (key) { - return this.cache[model][key]; + return JSON.parse(this.cache[model][key]); }.bind(this)); if (filter) { @@ -97,7 +98,11 @@ Memory.prototype.all = function all(model, filter, callback) { } process.nextTick(function () { - callback(null, nodes); + if (filter && filter.include) { + self._models[model].model.include(nodes, filter.include, callback); + } else { + callback(null, nodes); + } }); function sorting(a, b) { @@ -133,6 +138,15 @@ function applyFilter(filter) { } if (typeof example === 'undefined') return undefined; if (typeof value === 'undefined') return undefined; + if (typeof example === 'object') { + if (example.inq) { + if (!value) return false; + for (var i = 0; i < example.inq.length; i += 1) { + if (example.inq[i] == value) return true; + } + return false; + } + } // not strict equality return (example !== null ? example.toString() : example) == (value !== null ? value.toString() : value); } @@ -153,7 +167,7 @@ Memory.prototype.count = function count(model, callback, where) { data = data.filter(function (id) { var ok = true; Object.keys(where).forEach(function (key) { - if (cache[id][key] != where[key]) { + if (JSON.parse(cache[id])[key] != where[key]) { ok = false; } }); diff --git a/test/include.test.js b/test/include.test.js index f8a11b29..53378b65 100644 --- a/test/include.test.js +++ b/test/include.test.js @@ -10,10 +10,12 @@ describe('include', function() { passports.length.should.be.ok; passports.forEach(function(p) { p.__cachedRelations.should.have.property('owner'); - if (p.ownerId === null) { - should.not.exist(p.__cachedRelations.owner); + var owner = p.__cachedRelations.owner; + if (!p.ownerId) { + should.not.exist(owner); } else { - p.__cachedRelations.owner.id.should.equal(p.ownerId); + should.exist(owner); + owner.id.should.equal(p.ownerId); } }); done(); @@ -43,9 +45,10 @@ describe('include', function() { passports.forEach(function(p) { p.__cachedRelations.should.have.property('owner'); var user = p.__cachedRelations.owner; - if (p.ownerId === null) { + if (!p.ownerId) { should.not.exist(user); } else { + should.exist(user); user.id.should.equal(p.ownerId); user.__cachedRelations.should.have.property('posts'); user.__cachedRelations.posts.forEach(function(pp) { @@ -67,9 +70,10 @@ describe('include', function() { passports.forEach(function(p) { p.__cachedRelations.should.have.property('owner'); var user = p.__cachedRelations.owner; - if (p.ownerId === null) { + if (!p.ownerId) { should.not.exist(user); } else { + should.exist(user); user.id.should.equal(p.ownerId); user.__cachedRelations.should.have.property('posts'); user.__cachedRelations.posts.forEach(function(pp) {