var HTTPResult = require('../util/http-result') , _ = require('underscore') , CouchDB = require('../util/couch') , util = require('util') ; module.exports = function(couchServerURL, dbName, designDocs) { var server = new CouchDB(couchServerURL); if ( !designDocs ) { throw new Error("Forgot to pass design docs to checkCouch."); } console.log("Configuring CouchDB for QED"); console.log("Checking CouchDB version"); return server.get('') .then(function(info){ if (info.version !== "1.4.0" ) { console.log("Found "+info.version+", only tested with CouchDB 1.2.0"); } else { console.log("CouchDB 1.4.0 found"); } }).then(function(res){ console.log("Checking database '"+dbName+"'"); return server.get(dbName) .then(function(db){ console.log("Database found."); },function(err){ console.log("Creating database."); return server.put(dbName); }); }).then(function(){ console.log("Putting documents in database."); return _.reduce(designDocs, function(memo, doc, docUrl) { return memo.then(function(){ var configAction = doc.__configAction || "replace"; delete doc.__configAction; docUrl = dbName+'/'+docUrl; switch (configAction) { case "ignore": console.log(docUrl+" ignored."); return null; case "update": console.log(docUrl+" updating."); return server.get(docUrl) .then(function(oldDoc){ _.extend(oldDoc,doc); return server.put(docUrl,oldDoc); },function(){ return server.put(docUrl,doc); }); case "replace": console.log(docUrl+" replacing."); return server.get(docUrl) .then(function(oldDoc){ _.extend(doc,_.pick(oldDoc,'_id','_rev')); return server.put(docUrl,doc); },function(){ return server.put(docUrl,doc); }); default: console.warn("Unknown action",configAction); return null; } }); }, new HTTPResult(200)); }); };