var _ = require('underscore') , HTTPResult = require('../util/http-result') , validator = require('../util/validator') , CouchDB = require('../util/couch') , objF = require('../util/object') ; var schema = require('./couchdb-schema'); module.exports = function(couchServerURL,dbName) { 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){ var valid = validator(doc,schema); result[doc._id] = valid; return result; }); }); }, new HTTPResult(200,{})) .value(); }).then(function(result){ return server.get('_design/questions/_view/all_variables') .then(function(variables){ var dups = objF.findDuplicates( variables.rows, function(row){ return row.key; }); result._duplicateVariables = _.groupBy( dups, function(dup){ return dup.key; }); return result; }); }); };