From a6c5062ef9669698f81082b6c4f3d679edda20ee Mon Sep 17 00:00:00 2001 From: Mariusz Kierski Date: Thu, 6 Nov 2014 15:53:20 +0100 Subject: [PATCH] Added purge command --- lib/cradle/database/documents.js | 37 ++++++++++++++++++++++++++++++++ test/database-test.js | 16 ++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/lib/cradle/database/documents.js b/lib/cradle/database/documents.js index 2dc706e..250972b 100644 --- a/lib/cradle/database/documents.js +++ b/lib/cradle/database/documents.js @@ -235,3 +235,40 @@ Database.prototype.remove = function (id, rev) { remove(); }; + +Database.prototype.purge = function(id, rev) { + var that = this, doc, args = new(Args)(arguments); + function purge() { + var body = {}; + body[id] = [rev]; + that.query({ + method: 'POST', + path: '_purge', + body: body + }, function (err, res) { + if (! err) { that.cache.purge(id); } + args.callback(err, res); + }); + } + + if (typeof(rev) !== 'string') { + if (doc = this.cache.get(id)) { + rev = doc._rev; + } + else { + return this.get(id, function (err, _doc) { + if (err) { + return args.callback(err); + } + else if (!_doc._rev) { + return args.callback(new Error('No _rev found for ' + id)); + } + + rev = _doc._rev; + purge(); + }); + } + } + + purge(); +}; diff --git a/test/database-test.js b/test/database-test.js index 64cf135..2877d51 100644 --- a/test/database-test.js +++ b/test/database-test.js @@ -196,8 +196,20 @@ function shouldQueryCouch(name) { return promise; }, "returns a 200": macros.status(200) - } - } + }, + "purging a document (PURGE)": { + topic: function (db) { + var promise = new(events.EventEmitter); + db.get('deleteme', function (e, res) { + db.purge('deleteme', res.rev, function (e, res) { + promise.emit('success', res); + }); + }); + return promise; + }, + "returns a 200": macros.status(200) + }, + }; } var cradle = require('../lib/cradle');