Ignore:
Timestamp:
03/19/14 21:33:13 (11 years ago)
Author:
hendrikvanantwerpen
Message:
  • Allow empty subcodes.
  • Use HTTPResult exclusively on server (no more q).
  • Set readonly & disabled on ourselves as well in _ComplexValueMixin
  • Split server into several modules.
  • Check codes on the variable level, not question level.
  • We can add modules in design documents now.
Location:
Dev/trunk/src/server/config
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/src/server/config/check-couchdb.js

    r492 r525  
    1 var Q = require('q')
    2   , _ = require('underscore')
     1var _ = require('underscore')
     2  , HTTPResult = require('../util/http-result')
    33  , validator = require('../util/validator')
    4   , CouchDB = require('../util/couch').CouchDB
     4  , CouchDB = require('../util/couch')
     5  , objF = require('../util/object')
    56  ;
    67
     
    1011    var server = new CouchDB(couchServerURL,dbName);
    1112    var designRe = /^_design\//;
    12 
    13     var codes = {};
    14     function codeUnique(code) {
    15         if ( code in codes ) {
    16             return false;
    17         } else {
    18             codes[code] = true;
    19             return true;
    20         }
    21     }
    2213
    2314    return server.get('/_all_docs')
     
    3223                .then(function(doc){
    3324                    var valid = validator(doc,schema);
    34                     if ( doc.type === "Question" && !codeUnique(doc.code) ) {
    35                         valid.valid = false;
    36                         valid.error = "Question code "+doc.code+" is not unique.";
    37                     }
    3825                    result[doc._id] = valid;
    3926                    return result;
    4027                });
    4128            });
    42         }, Q.resolve({}))
     29        }, new HTTPResult(200,{}))
    4330        .value();
    44     }).all();
     31    }).then(function(result){
     32        return server.get('_design/questions/_view/all_variables')
     33        .then(function(variables){
     34            var dups = objF.findDuplicates(
     35                variables.rows,
     36                function(row){ return row.key; });
     37            result._duplicateVariables = _.groupBy(
     38                dups,
     39                function(dup){ return dup.key; });
     40            return result;
     41        });
     42    });
    4543};
  • Dev/trunk/src/server/config/config-couchdb.js

    r519 r525  
    1 var Q = require('q')
     1var HTTPResult = require('../util/http-result')
    22  , _ = require('underscore')
    3   , CouchDB = require('../util/couch').CouchDB
     3  , CouchDB = require('../util/couch')
    44  , util = require('util')
    55  ;
     
    6262                }
    6363            });
    64         }, Q.resolve());
     64        }, new HTTPResult(200));
    6565    });
    6666};
  • Dev/trunk/src/server/config/couchdb-design-docs.js

    r523 r525  
     1var fs = require('fs')
     2  , path = require('path')
     3  ;
     4
     5function 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
    127module.exports = {
    228
     
    80106                reduce: function(key, values, rereduce) { return sum(values); }
    81107            },
     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            },
    82136            all_by_code: {
    83137                map: function(doc){
     
    91145                    emit(doc.code,doc);
    92146                }
     147            },
     148            lib: {
     149                underscore: readModule('underscore'),
     150                object: readModule('../util/object')
    93151            }
    94152        }
  • Dev/trunk/src/server/config/couchdb-schema.json

    r523 r525  
    1111    "nonEmptyString": { "type": "string", "minLength": 1 },
    1212    "codeString": { "type": "string", "pattern": "^[A-Za-z0-9]+$" },
     13    "subcodeString": { "type": "string", "pattern": "^[A-Za-z0-9]*$" },
    1314    "schemaInfo": {
    1415      "type": "object",
     
    148149        "properties": {
    149150          "type": { "type": "string", "pattern": "^StringInput$" },
    150           "subcode": { "$ref": "#/definitions/codeString" },
     151          "subcode": { "$ref": "#/definitions/subcodeString" },
    151152          "text": { "$ref": "#/definitions/nonEmptyString" }
    152153        },
     
    159160          "type": { "type": "string", "pattern": "^TextInput$" },
    160161          "maxLength": { "type": "integer" },
    161           "subcode": { "$ref": "#/definitions/codeString" },
     162          "subcode": { "$ref": "#/definitions/subcodeString" },
    162163          "text": { "$ref": "#/definitions/nonEmptyString" }
    163164        },
     
    172173          "max": { "type": "integer" },
    173174          "places": { "type": "integer" },
    174           "subcode": { "$ref": "#/definitions/codeString" },
     175          "subcode": { "$ref": "#/definitions/subcodeString" },
    175176          "text": { "$ref": "#/definitions/nonEmptyString" }
    176177        },
     
    192193              "minLabel": { "$ref": "#/definitions/nonEmptyString" },
    193194              "maxLabel": { "$ref": "#/definitions/nonEmptyString" },
    194               "subcode": { "$ref": "#/definitions/codeString" },
     195              "subcode": { "$ref": "#/definitions/subcodeString" },
    195196              "text": { "$ref": "#/definitions/nonEmptyString" }
    196197            },
     
    218219              "type": "object",
    219220              "properties": {
    220                   "subcode": { "$ref": "#/definitions/codeString" }
     221                  "subcode": { "$ref": "#/definitions/subcodeString" }
    221222              },
    222223              "required": ["subcode"],
    223224              "additionalProperties": false
    224225          },
    225           "subcode": { "$ref": "#/definitions/codeString" }
     226          "subcode": { "$ref": "#/definitions/subcodeString" }
    226227        },
    227228        "required":["type","items","subcode"],
     
    235236              "type": "object",
    236237              "properties": {
    237                 "subcode": { "$ref": "#/definitions/codeString" },
     238                "subcode": { "$ref": "#/definitions/subcodeString" },
    238239                "text": { "$ref": "#/definitions/nonEmptyString" }
    239240              },
     
    244245              "type": "object",
    245246              "properties": {
    246                 "subcode": { "$ref": "#/definitions/codeString" }
     247                "subcode": { "$ref": "#/definitions/subcodeString" }
    247248              },
    248249              "required": ["subcode"],
  • Dev/trunk/src/server/config/upgrade-couchdb.js

    r492 r525  
    1 var Q = require('q')
     1var HTTPResult = require('../util/http-result')
    22  , _ = require('underscore')
    3   , CouchDB = require('../util/couch').CouchDB
     3  , CouchDB = require('../util/couch')
    44  ;
    55
     
    1919                return server.get(doc.id)
    2020                .then(function(doc){
    21                     Q.when(upgrade(doc))
     21                    HTTPResult.when(200,upgrade(doc))
    2222                    .then(function(newDoc){
    2323                        return server.put(doc._id,newDoc)
     
    3232                });
    3333            });
    34         }, Q.resolve({}))
     34        }, new HTTPResult(200,{}))
    3535        .value();
    3636    }).all();
Note: See TracChangeset for help on using the changeset viewer.