diff --git a/lib/customUtils.js b/lib/customUtils.js index af46b07..2a0a40a 100644 --- a/lib/customUtils.js +++ b/lib/customUtils.js @@ -21,7 +21,10 @@ function ensureDirectoryExists (dir, cb) { /** - * Return a random string of length len + * Return a random alphanumerical string of length len + * There is a very small probability for the length to be less than len + * (il the base64 conversion yields to many pluses and slashes) but + * that's not an issue here */ function uid (len) { return crypto.randomBytes(Math.ceil(len * 5 / 4)) @@ -30,7 +33,6 @@ function uid (len) { .slice(0, len); } -console.log(uid(5)); module.exports.ensureDirectoryExists = ensureDirectoryExists; diff --git a/lib/datastore.js b/lib/datastore.js index d569702..d93dd5f 100644 --- a/lib/datastore.js +++ b/lib/datastore.js @@ -1,5 +1,7 @@ /** * The datastore itself + * TODO + * Improve serialization (for types such as Dates, handle new lines in strings) */ var fs = require('fs') @@ -67,9 +69,41 @@ Datastore.treatRawData = function (rawData) { }; +/** + * Insert a new document + * @param {Function} cb Optional callback, signature: err, insertedDoc + */ +Datastore.prototype.insert = function (newDoc, cb) { + var callback = cb || function () {} + , self = this + , persistableNewDoc + ; + + try { + newDoc._id = customUtils.uid(16); + persistableNewDoc = JSON.stringify(newDoc); + } catch (e) { + return callback(e); + } + + fs.appendFile(self.filename, persistableNewDoc + '\n', 'utf8', function (err) { + if (err) { return callback(err); } + + var insertedDoc = JSON.parse(persistableNewDoc); + self.data.push(insertedDoc); // Make sure the doc is the same on the disk and in memory + // Some docs can't be stringified correctly + return callback(null, insertedDoc); + }); +}; + var d = new Datastore('workspace/test.db'); d.loadDatabase(function (err) { + d.insert({ onetest: "oh yeah" }, function (err, insertedDoc) { + console.log(err); + console.log("==============="); + console.log(insertedDoc); + }); });