From c6ef338c8d17eafecd156002c7f45a01188c3d91 Mon Sep 17 00:00:00 2001 From: Louis Chatriot Date: Thu, 2 May 2013 09:43:54 +0200 Subject: [PATCH] Can update docs --- lib/datastore.js | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/lib/datastore.js b/lib/datastore.js index 7141648..7ab3163 100644 --- a/lib/datastore.js +++ b/lib/datastore.js @@ -2,7 +2,9 @@ * The datastore itself * TODO * Improve serialization (for types such as Dates, handle new lines in strings) + * Serialization and deserialization functions * Queue inserts, removes and updates + * Update and removes should only modify the corresponding part of the database */ var fs = require('fs') @@ -180,14 +182,32 @@ Datastore.prototype.persistWholeDatabase = function (data, cb) { /** - * Update the first doc matching query + * Update all docs matching query + * For now, very naive implementation (recalculating the whole database) * @param {Object} query - * @param {Object} newDoc Will replace the former doc - * @param {Function} cb Optional callback, signature: err, replaced?, newDoc + * @param {Object} newDoc Will replace the former docs + * @param {Function} cb Optional callback, signature: err, numReplaced */ -Datastore.prototype.updateOne = function (query, newDoc, cb) { - var callback = cb || function () {}; +Datastore.prototype.update = function (query, newDoc, cb) { + var callback = cb || function () {} + , self = this + , numReplaced = 0 + , newData = []; + + self.data.forEach(function (d) { + if (Datastore.match(d, query)) { + numReplaced += 1; + newData.push(newDoc); + } else { + newData.push(d); + } + }); + self.persistWholeDatabase(newData, function (err) { + if (err) { return callback(err); } + self.data = newData; + return callback(null, numReplaced); + }); }; @@ -196,8 +216,12 @@ Datastore.prototype.updateOne = function (query, newDoc, cb) { var d = new Datastore('workspace/test.db'); d.loadDatabase(function (err) { console.log(d.data); - d.data = [{ff: 'mec'}, {ee: 'test'}]; + d.update({ yahoo: 'dailymotion' }, {yahoo: 'great' }, function (err, n) { + console.log("--------------"); + console.log(err); + console.log(n); + }); });