var Q = require('q') , _ = require('underscore') , CouchDB = require('../util/couch').CouchDB , util = require('util') ; var designDocs = require('./couchdb-design-docs'); module.exports = function(couchServerURL) { var server = new CouchDB(couchServerURL); console.log("Configuring CouchDB for QED"); console.log("Checking CouchDB version"); return server.get('') .then(function(info){ if (info.version !== "1.2.0" ) { console.log("Found "+info.version+", only tested with CouchDB 1.2.0"); } else { console.log("CouchDB 1.2.0 found"); } }).then(function(res){ console.log("Checking database 'qed'"); return server.get('qed') .then(function(db){ console.log("Database 'qed' found."); },function(err){ console.log("Creating database 'qed'"); return server.put('qed'); }); }).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; 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; } }); }, Q.resolve()); }); };