From 32ff0b4eb7ecb4aee985fa998dcc638271e551c7 Mon Sep 17 00:00:00 2001 From: Marten de Vries Date: Sun, 31 Aug 2014 22:08:54 +0200 Subject: [PATCH] Makes _users and _replicator databases system databases (sets extra protections for them like in CouchDB). No regressions, but JS test coverage isn't complete yet. --- index.js | 39 +++++++-------------------------------- package.json | 4 +++- 2 files changed, 10 insertions(+), 33 deletions(-) diff --git a/index.js b/index.js index e465bd2..efc8130 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,7 @@ var coucheval = require("couchdb-eval"); var couchdb_objects = require("couchdb-objects"); var wrappers = require("pouchdb-wrappers"); +var createBulkDocsWrapper = require("pouchdb-bulkdocs-wrapper"); var PouchPluginError = require("pouchdb-plugin-error"); var uuid = require("random-uuid-v4"); @@ -131,12 +132,13 @@ function parseValidationFunctions(resp) { } var wrapperApi = {}; + wrapperApi.put = function (orig, args) { return doValidation(args.db, args.doc, args.options).then(orig); }; wrapperApi.post = function (orig, args) { - args.doc.id = args.doc.id || uuid(); + args.doc._id = args.doc._id || uuid(); return doValidation(args.db, args.doc, args.options).then(orig); }; @@ -145,37 +147,10 @@ wrapperApi.remove = function (orig, args) { return doValidation(args.db, args.doc, args.options).then(orig); }; -wrapperApi.bulkDocs = function (original, args) { - //the ``all_or_nothing`` attribute on ``bulkDocs`` is unsupported. - //Also, the result array might not be in the same order as - //``bulkDocs.docs`` argument. - - var done = []; - var notYetDone = []; - - var validations = args.docs.map(function (doc) { - doc._id = doc._id || uuid(); - var validationPromise = doValidation(args.db, doc, args.options); - - return validationPromise - .then(function (resp) { - notYetDone.push(doc); - }) - .catch(function (err) { - err.id = doc._id; - done.push(err); - }); - }); - return Promise.all(validations) - .then(function () { - args.docs = notYetDone; - - return original(); - }) - .then(function (insertedDocs) { - return done.concat(insertedDocs); - }); -}; +wrapperApi.bulkDocs = createBulkDocsWrapper(function (doc, args) { + doc._id = doc._id || uuid(); + return doValidation(args.db, doc, args.options); +}); wrapperApi.putAttachment = function (orig, args) { return args.db.get(args.docId, {rev: args.rev, revs: true}) diff --git a/package.json b/package.json index 5ed96f3..cc545b1 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "couchdb-eval": "^1.0.0", "pouchdb-promise": "^0.0.0", "random-uuid-v4": "^0.0.4", - "pouchdb-plugin-error": "^0.2.0" + "pouchdb-plugin-error": "^0.2.0", + "pouchdb-wrappers": "^0.1.0", + "pouchdb-bulkdocs-wrapper": "^0.1.0" }, "devDependencies": { "browserify": "^4.1.8",