var Q = require('q') , _ = require('underscore') , CouchDB = require('../util/couch').CouchDB ; var schema = require('./couchdb-schema'); module.exports = function(couchServerURL,dbName,upgrade) { var server = new CouchDB(couchServerURL,dbName); var designRe = /^_design\//; return server.get('/_all_docs') .then(function(allDocs){ return _.chain(allDocs.rows) .filter(function(doc){ return doc.id.match(designRe) === null; }) .reduce(function(memo, doc){ return memo.then(function(result){ return server.get(doc.id) .then(function(doc){ Q.when(upgrade(doc)) .then(function(newDoc){ return server.put(doc._id,newDoc) .then(function(){ result[doc._id] = true; return result; }); },function(){ result[doc._id] = false; }); return result; }); }); }, Q.resolve({})) .value(); }).all(); };