1 | var fs = require('fs') |
---|
2 | , path = require('path') |
---|
3 | ; |
---|
4 | |
---|
5 | function readModule(name) { |
---|
6 | var filename; |
---|
7 | if ( name.indexOf('.') === 0 ) { |
---|
8 | filename = path.join(path.dirname(module.filename),name+'.js'); |
---|
9 | } else { |
---|
10 | var dirname = path.join(path.dirname(module.filename), |
---|
11 | '../../node_modules',name); |
---|
12 | filename = path.join(dirname,name+'.js'); |
---|
13 | var pkgfile = path.join(dirname,'package.json'); |
---|
14 | if ( fs.exists(pkgfile) ) { |
---|
15 | var pkg = require(pkgfile); |
---|
16 | if ( pkg.main ) { |
---|
17 | filename = path.join(dirname,pkg.main); |
---|
18 | } |
---|
19 | } |
---|
20 | } |
---|
21 | var src = fs.readFileSync(filename, 'utf8'); |
---|
22 | src = src.replace(/require\s*\(\s*(['\"])([^'"]*)(['\"])\s*\)/g, |
---|
23 | 'require($1views/lib/$2$3)'); |
---|
24 | return src; |
---|
25 | } |
---|
26 | |
---|
27 | module.exports = { |
---|
28 | |
---|
29 | "schemaInfo": { |
---|
30 | _id: "schemaInfo", |
---|
31 | version: "4", |
---|
32 | viewsVersion: "1" |
---|
33 | }, |
---|
34 | |
---|
35 | "_design/protectPublished": { |
---|
36 | __configAction: "replace", |
---|
37 | language: "javascript", |
---|
38 | validate_doc_update: function(newDoc, oldDoc, userCtx, secObj) { |
---|
39 | if ( oldDoc && oldDoc.publicationDate ) { |
---|
40 | throw({forbidden:'Published documents cannot be modified.'}); |
---|
41 | } |
---|
42 | } |
---|
43 | }, |
---|
44 | |
---|
45 | "_design/default": { |
---|
46 | __configAction: "replace", |
---|
47 | language: "javascript", |
---|
48 | views: { |
---|
49 | by_type: { |
---|
50 | map: function(doc){ |
---|
51 | emit(doc.type, doc); |
---|
52 | } |
---|
53 | }, |
---|
54 | typeless: { |
---|
55 | map: function(doc){ |
---|
56 | if ( !doc.type ) { |
---|
57 | emit(doc._id, doc); |
---|
58 | } |
---|
59 | } |
---|
60 | } |
---|
61 | } |
---|
62 | }, |
---|
63 | |
---|
64 | "_design/questions": { |
---|
65 | __configAction: "replace", |
---|
66 | language: "javascript", |
---|
67 | views: { |
---|
68 | all: { |
---|
69 | map: function(doc){ |
---|
70 | if ( doc.type !== 'Question' ) { return; } |
---|
71 | if ( doc.categories && doc.categories.length > 0 ) { |
---|
72 | for ( var i = 0; i < doc.categories.length; i++ ) { |
---|
73 | emit([doc.categories[i],doc.topic||"(default)"],1); |
---|
74 | } |
---|
75 | } else { |
---|
76 | emit(["(default)","(default)"],1); |
---|
77 | } |
---|
78 | }, |
---|
79 | reduce: function(keys,values){ return sum(values); } |
---|
80 | }, |
---|
81 | published: { |
---|
82 | map: function(doc){ |
---|
83 | if ( doc.type!=='Question' || !doc.publicationDate ) { return; } |
---|
84 | if ( doc.categories && doc.categories.length > 0 ) { |
---|
85 | for ( var i = 0; i < doc.categories.length; i++ ) { |
---|
86 | emit([doc.categories[i],doc.topic||"(default)"],1); |
---|
87 | } |
---|
88 | } else { |
---|
89 | emit(["(default)","(default)"],1); |
---|
90 | } |
---|
91 | }, |
---|
92 | reduce: function(keys,values){ return sum(values); } |
---|
93 | }, |
---|
94 | all_topics: { |
---|
95 | map: function(doc){ |
---|
96 | if( doc.type !== 'Question' ){ return; } |
---|
97 | emit(doc.topic||"(default)",1); |
---|
98 | }, |
---|
99 | reduce: function(key, values, rereduce) { return sum(values); } |
---|
100 | }, |
---|
101 | published_topics: { |
---|
102 | map: function(doc){ |
---|
103 | if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } |
---|
104 | emit(doc.topic||"(default)",1); |
---|
105 | }, |
---|
106 | reduce: function(key, values, rereduce) { return sum(values); } |
---|
107 | }, |
---|
108 | all_variables: { |
---|
109 | map: function(doc) { |
---|
110 | if ( doc.type !== 'Question' ) { return; } |
---|
111 | var _ = require('views/lib/underscore'); |
---|
112 | var objF = require('views/lib/object'); |
---|
113 | _.chain(objF.collectFields('subcode',doc.content)) |
---|
114 | .map(function(subcode){ |
---|
115 | return doc.code+subcode; |
---|
116 | }) |
---|
117 | .each(function(variable){ |
---|
118 | emit(variable,doc._id); |
---|
119 | }); |
---|
120 | } |
---|
121 | }, |
---|
122 | published_variables: { |
---|
123 | map: function(doc) { |
---|
124 | if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } |
---|
125 | var _ = require('views/lib/underscore'); |
---|
126 | var objF = require('views/lib/object'); |
---|
127 | _.chain(objF.collectFields('subcode',doc.content)) |
---|
128 | .map(function(subcode){ |
---|
129 | return doc.code+subcode; |
---|
130 | }) |
---|
131 | .each(function(variable){ |
---|
132 | emit(variable,doc._id); |
---|
133 | }); |
---|
134 | } |
---|
135 | }, |
---|
136 | all_by_code: { |
---|
137 | map: function(doc){ |
---|
138 | if ( doc.type !== 'Question' ) { return; } |
---|
139 | emit(doc.code,doc); |
---|
140 | } |
---|
141 | }, |
---|
142 | published_by_code: { |
---|
143 | map: function(doc){ |
---|
144 | if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } |
---|
145 | emit(doc.code,doc); |
---|
146 | } |
---|
147 | }, |
---|
148 | lib: { |
---|
149 | underscore: readModule('underscore'), |
---|
150 | object: readModule('../util/object') |
---|
151 | } |
---|
152 | } |
---|
153 | }, |
---|
154 | |
---|
155 | "_design/surveys": { |
---|
156 | __configAction: "replace", |
---|
157 | language: "javascript", |
---|
158 | views: { |
---|
159 | drafts: { |
---|
160 | map: function(doc){ |
---|
161 | if ( doc.type !== 'Survey' || doc.publicationDate ) { return; } |
---|
162 | emit(doc._id,doc); |
---|
163 | } |
---|
164 | }, |
---|
165 | published: { |
---|
166 | map: function(doc){ |
---|
167 | if ( doc.type !== 'Survey' || !doc.publicationDate ) { return; } |
---|
168 | emit(doc._id,doc); |
---|
169 | } |
---|
170 | } |
---|
171 | } |
---|
172 | }, |
---|
173 | |
---|
174 | "_design/surveyRuns": { |
---|
175 | __configAction: "replace", |
---|
176 | language: "javascript", |
---|
177 | views: { |
---|
178 | by_dates: { |
---|
179 | map: function(doc){ |
---|
180 | if ( doc.type !== 'SurveyRun' ) { return; } |
---|
181 | var startDate = doc.startDate || ""; |
---|
182 | var endDate = doc.endDate || {}; |
---|
183 | emit([startDate,endDate,doc.liveName||null],doc); |
---|
184 | } |
---|
185 | } |
---|
186 | } |
---|
187 | }, |
---|
188 | |
---|
189 | "_design/responses": { |
---|
190 | __configAction: "replace", |
---|
191 | language: "javascript", |
---|
192 | views: { |
---|
193 | by_surveyrun: { |
---|
194 | map: function(doc){ |
---|
195 | if ( doc.type !== 'Response' ) { return; } |
---|
196 | emit(doc.surveyRunId, doc); |
---|
197 | } |
---|
198 | } |
---|
199 | } |
---|
200 | } |
---|
201 | |
---|
202 | }; |
---|