var fs = require('fs') , path = require('path') ; function readModule(name) { var filename; if ( name.indexOf('.') === 0 ) { filename = path.join(path.dirname(module.filename),name+'.js'); } else { var dirname = path.join(path.dirname(module.filename), '../../node_modules',name); filename = path.join(dirname,name+'.js'); var pkgfile = path.join(dirname,'package.json'); if ( fs.exists(pkgfile) ) { var pkg = require(pkgfile); if ( pkg.main ) { filename = path.join(dirname,pkg.main); } } } var src = fs.readFileSync(filename, 'utf8'); src = src.replace(/require\s*\(\s*(['\"])([^'"]*)(['\"])\s*\)/g, 'require($1views/lib/$2$3)'); return src; } module.exports = { "schemaInfo": { _id: "schemaInfo", version: "4", viewsVersion: "2" }, "_design/protectPublished": { __configAction: "replace", language: "javascript", validate_doc_update: function(newDoc, oldDoc, userCtx, secObj) { if ( oldDoc && oldDoc.publicationDate ) { throw({forbidden:'Published documents cannot be modified.'}); } } }, "_design/default": { __configAction: "replace", language: "javascript", views: { by_type: { map: function(doc){ emit(doc.type, 1); }, reduce: function(keys,values){ return sum(values); } }, typeless: { map: function(doc){ if ( !doc.type ) { emit(doc._id, doc); } } } } }, "_design/questions": { __configAction: "replace", language: "javascript", views: { all: { map: function(doc){ if ( doc.type !== 'Question' ) { return; } if ( doc.categories && doc.categories.length > 0 ) { for ( var i = 0; i < doc.categories.length; i++ ) { emit([doc.categories[i],doc.topic||"(default)"],1); } } else { emit(["(default)","(default)"],1); } }, reduce: function(keys,values){ return sum(values); } }, published: { map: function(doc){ if ( doc.type!=='Question' || !doc.publicationDate ) { return; } if ( doc.categories && doc.categories.length > 0 ) { for ( var i = 0; i < doc.categories.length; i++ ) { emit([doc.categories[i],doc.topic||"(default)"],1); } } else { emit(["(default)","(default)"],1); } }, reduce: function(keys,values){ return sum(values); } }, all_topics: { map: function(doc){ if( doc.type !== 'Question' ){ return; } emit(doc.topic||"(default)",1); }, reduce: function(key, values, rereduce) { return sum(values); } }, published_topics: { map: function(doc){ if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } emit(doc.topic||"(default)",1); }, reduce: function(key, values ) { return sum(values); } }, all_variables: { map: function(doc) { if ( doc.type !== 'Question' ) { return; } var _ = require('views/lib/underscore'); var objF = require('views/lib/object'); _.chain(objF.collectFields('subcode',doc.content)) .map(function(subcode){ return doc.code+subcode; }) .each(function(variable){ emit(variable,doc._id); }); } }, published_variables: { map: function(doc) { if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } var _ = require('views/lib/underscore'); var objF = require('views/lib/object'); _.chain(objF.collectFields('subcode',doc.content)) .map(function(subcode){ return doc.code+subcode; }) .each(function(variable){ emit(variable,doc._id); }); } }, all_by_code: { map: function(doc){ if ( doc.type !== 'Question' ) { return; } emit(doc.code,1); }, reduce: function(key, values) { return sum(values); } }, published_by_code: { map: function(doc){ if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } emit(doc.code,1); }, reduce: function(key, values) { return sum(values); } }, lib: { underscore: readModule('underscore'), object: readModule('../util/object') } } }, "_design/surveys": { __configAction: "replace", language: "javascript", views: { drafts: { map: function(doc){ if ( doc.type !== 'Survey' || doc.publicationDate ) { return; } emit(doc._id,doc); } }, published: { map: function(doc){ if ( doc.type !== 'Survey' || !doc.publicationDate ) { return; } emit(doc._id,doc); } } } }, "_design/surveyRuns": { __configAction: "replace", language: "javascript", views: { by_start_date: { map: function(doc){ if ( doc.type !== 'SurveyRun' ) { return; } emit(doc.startDate||null,1); }, reduce: function(keys,values){ return sum(values); } }, by_end_date: { map: function(doc){ if ( doc.type !== 'SurveyRun' ) { return; } emit(doc.endDate||{},1); }, reduce: function(keys,values){ return sum(values); } } } }, "_design/responses": { __configAction: "replace", language: "javascript", views: { by_surveyrun: { map: function(doc){ if ( doc.type !== 'Response' ) { return; } emit(doc.surveyRunId, 1); }, reduce: function(keys,values){ return sum(values); } } } } };