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: "2" |
---|
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, 1); |
---|
52 | }, |
---|
53 | reduce: function(keys,values){ return sum(values); } |
---|
54 | }, |
---|
55 | typeless: { |
---|
56 | map: function(doc){ |
---|
57 | if ( !doc.type ) { |
---|
58 | emit(doc._id, doc); |
---|
59 | } |
---|
60 | } |
---|
61 | } |
---|
62 | } |
---|
63 | }, |
---|
64 | |
---|
65 | "_design/questions": { |
---|
66 | __configAction: "replace", |
---|
67 | language: "javascript", |
---|
68 | views: { |
---|
69 | all: { |
---|
70 | map: function(doc){ |
---|
71 | if ( doc.type !== 'Question' ) { return; } |
---|
72 | if ( doc.categories && doc.categories.length > 0 ) { |
---|
73 | for ( var i = 0; i < doc.categories.length; i++ ) { |
---|
74 | emit([doc.categories[i],doc.topic||"(default)"],1); |
---|
75 | } |
---|
76 | } else { |
---|
77 | emit(["(default)","(default)"],1); |
---|
78 | } |
---|
79 | }, |
---|
80 | reduce: function(keys,values){ return sum(values); } |
---|
81 | }, |
---|
82 | published: { |
---|
83 | map: function(doc){ |
---|
84 | if ( doc.type!=='Question' || !doc.publicationDate ) { return; } |
---|
85 | if ( doc.categories && doc.categories.length > 0 ) { |
---|
86 | for ( var i = 0; i < doc.categories.length; i++ ) { |
---|
87 | emit([doc.categories[i],doc.topic||"(default)"],1); |
---|
88 | } |
---|
89 | } else { |
---|
90 | emit(["(default)","(default)"],1); |
---|
91 | } |
---|
92 | }, |
---|
93 | reduce: function(keys,values){ return sum(values); } |
---|
94 | }, |
---|
95 | all_topics: { |
---|
96 | map: function(doc){ |
---|
97 | if( doc.type !== 'Question' ){ return; } |
---|
98 | emit(doc.topic||"(default)",1); |
---|
99 | }, |
---|
100 | reduce: function(key, values, rereduce) { return sum(values); } |
---|
101 | }, |
---|
102 | published_topics: { |
---|
103 | map: function(doc){ |
---|
104 | if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } |
---|
105 | emit(doc.topic||"(default)",1); |
---|
106 | }, |
---|
107 | reduce: function(key, values ) { return sum(values); } |
---|
108 | }, |
---|
109 | all_variables: { |
---|
110 | map: function(doc) { |
---|
111 | if ( doc.type !== 'Question' ) { return; } |
---|
112 | var _ = require('views/lib/underscore'); |
---|
113 | var objF = require('views/lib/object'); |
---|
114 | _.chain(objF.collectFields('subcode',doc.content)) |
---|
115 | .map(function(subcode){ |
---|
116 | return doc.code+subcode; |
---|
117 | }) |
---|
118 | .each(function(variable){ |
---|
119 | emit(variable,doc._id); |
---|
120 | }); |
---|
121 | } |
---|
122 | }, |
---|
123 | published_variables: { |
---|
124 | map: function(doc) { |
---|
125 | if ( doc.type !== 'Question' || !doc.publicationDate ) { return; } |
---|
126 | var _ = require('views/lib/underscore'); |
---|
127 | var objF = require('views/lib/object'); |
---|
128 | _.chain(objF.collectFields('subcode',doc.content)) |
---|
129 | .map(function(subcode){ |
---|
130 | return doc.code+subcode; |
---|
131 | }) |
---|
132 | .each(function(variable){ |
---|
133 | emit(variable,doc._id); |
---|
134 | }); |
---|
135 | } |
---|
136 | }, |
---|
137 | all_by_code: { |
---|
138 | map: function(doc){ |
---|
139 | if ( doc.type !== 'Question' ) { return; } |
---|
140 | emit(doc.code,1); |
---|
141 | }, |
---|
142 | reduce: function(key, values) { return sum(values); } |
---|
143 | }, |
---|
144 | published_by_code: { |
---|
145 | map: function(doc){ |
---|
146 | if ( doc.type !== 'Question' || |
---|
147 | !doc.publicationDate ) { return; } |
---|
148 | emit(doc.code,1); |
---|
149 | }, |
---|
150 | reduce: function(key, values) { return sum(values); } |
---|
151 | }, |
---|
152 | lib: { |
---|
153 | underscore: readModule('underscore'), |
---|
154 | object: readModule('../util/object') |
---|
155 | } |
---|
156 | } |
---|
157 | }, |
---|
158 | |
---|
159 | "_design/surveys": { |
---|
160 | __configAction: "replace", |
---|
161 | language: "javascript", |
---|
162 | views: { |
---|
163 | drafts: { |
---|
164 | map: function(doc){ |
---|
165 | if ( doc.type !== 'Survey' || |
---|
166 | doc.publicationDate ) { return; } |
---|
167 | emit(doc._id,doc); |
---|
168 | } |
---|
169 | }, |
---|
170 | published: { |
---|
171 | map: function(doc){ |
---|
172 | if ( doc.type !== 'Survey' || |
---|
173 | !doc.publicationDate ) { return; } |
---|
174 | emit(doc._id,doc); |
---|
175 | } |
---|
176 | } |
---|
177 | } |
---|
178 | }, |
---|
179 | |
---|
180 | "_design/surveyRuns": { |
---|
181 | __configAction: "replace", |
---|
182 | language: "javascript", |
---|
183 | views: { |
---|
184 | by_start_date: { |
---|
185 | map: function(doc){ |
---|
186 | if ( doc.type !== 'SurveyRun' ) { return; } |
---|
187 | emit(doc.startDate||null,1); |
---|
188 | }, |
---|
189 | reduce: function(keys,values){ return sum(values); } |
---|
190 | }, |
---|
191 | by_end_date: { |
---|
192 | map: function(doc){ |
---|
193 | if ( doc.type !== 'SurveyRun' ) { return; } |
---|
194 | emit(doc.endDate||{},1); |
---|
195 | }, |
---|
196 | reduce: function(keys,values){ return sum(values); } |
---|
197 | } |
---|
198 | } |
---|
199 | }, |
---|
200 | |
---|
201 | "_design/responses": { |
---|
202 | __configAction: "replace", |
---|
203 | language: "javascript", |
---|
204 | views: { |
---|
205 | by_surveyrun: { |
---|
206 | map: function(doc){ |
---|
207 | if ( doc.type !== 'Response' ) { return; } |
---|
208 | emit(doc.surveyRunId, 1); |
---|
209 | }, |
---|
210 | reduce: function(keys,values){ return sum(values); } |
---|
211 | } |
---|
212 | } |
---|
213 | } |
---|
214 | |
---|
215 | }; |
---|