Ignore:
Timestamp:
12/04/12 16:29:49 (12 years ago)
Author:
hendrikvanantwerpen
Message:

Support data validation and increase dendency separation.

Added json-schema validation before documents are saved. Acts both as
a safe-guard and as a reference of the data model.

Added directory for server related material. For now it contains scripts
to configure CouchDB and check validity of documents against the schema.

Started separating out parts that depend on the data model from parts
that do not.

Location:
Dev/branches/rest-dojo-ui/server
Files:
2 added
1 copied
1 moved

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui/server/couchdb-admin/config/config.js

    r414 r415  
    22     'dojo/_base/json',
    33     'dojo/_base/lang',
    4      'dojo/Deferred',
    5      'dojo/request',
    64     'dojox/lang/functional',
    7      './docs'
    8 ],function(json,lang,Deferred,request,func,docs){
    9     var dbUrl = "http://localhost:5984/";
     5     './util/async',
     6     './util/db',
     7     './data/design-docs'
     8],function(json,lang,func,async,db,docs){
    109
    1110    function serializeFunctions(value) {
     
    2322    }
    2423
    25     function req(method,path,body) {
    26         var args = {
    27             contentType: 'application/json',
    28             handleAs: 'json',
    29             data: json.toJson(body || {})
    30         };
    31         return request[method](dbUrl+path,args);
    32     }
    33 
    34     function asyncSeq(functions) {
    35         var d = new Deferred();
    36         (function stepper(fs,arg) {
    37             if ( fs.length > 0 ) {
    38                 try {
    39                     var f = fs.shift();
    40                     var ret = f(arg);
    41                     if ( ret && ret.then ) {
    42                         ret.then(function(ret){
    43                             stepper(fs,ret);
    44                         });
    45                     } else {
    46                         stepper(fs,ret);
    47                     }
    48                 } catch(err) {
    49                     d.reject(err);
    50                 }
    51             } else {
    52                 d.resolve();
    53             }
    54         })(functions);
    55         return d.promise;
    56     }
    57 
    58     function asyncFor(list,callback,ctx) {
    59         var d = new Deferred();
    60         (function stepper(list,idx){
    61             if ( list.length > 0 ) {
    62                 var el = list.shift();
    63                 var ret = callback.call(ctx,el,idx);
    64                 if ( ret && ret.then ) {
    65                     ret.then(function(){
    66                         stepper(list,idx+1);
    67                     });
    68                 } else {
    69                     stepper(list,idx+1);
    70                 }
    71             } else {
    72                 d.resolve();
    73             }
    74         })(list,0);
    75         return d.promise;
    76     }
    77 
    78     asyncSeq([
     24    async.seq([
    7925        function(){
    80             console.log("Configuring CouchDB for RFT:");
     26            console.log("Configuring CouchDB for QED:");
    8127        },
    8228        function(){
    8329            console.log("Checking CouchDB version");
    84             return req('get','')
     30            return db.req('get','')
    8531            .then(function(res){
    8632                if (res.version !== "1.2.0" ) {
     
    9238        },function(){
    9339            console.log("Checking database 'qed'");
    94             return req('get','qed')
     40            return db.req('get','qed')
    9541            .then(function(res){
    9642                if (res.error) {
    9743                    console.log("Creating database 'qed'");
    98                     return req('put','/qed');
     44                    return db.req('put','/qed');
    9945                } else {
    10046                    console.log("Database 'qed' found.");
     
    10248            },function(res){
    10349                console.log("Creating database 'qed'");
    104                 return req('put','/qed');
     50                return db.req('put','/qed');
    10551            });
    10652        },function(){
     
    10854        },function(docs){
    10955            console.log("Putting documents in database.");
    110             return asyncFor(func.keys(docs),function(docUrl){
     56            return async.forEach(func.keys(docs),function(docUrl){
    11157                var doc = docs[docUrl];
    11258                var configAction = doc.__configAction;
     
    11763                    case "update":
    11864                        console.log(docUrl+" updating.");
    119                         return req('get',docUrl)
     65                        return db.req('get',docUrl)
    12066                        .then(function(oldDoc){
    12167                            lang.mixin(oldDoc,doc);
    122                             return req('put',docUrl,oldDoc);
     68                            return db.req('put',docUrl,oldDoc);
    12369                        },function(){
    124                             return req('put',docUrl,doc);
     70                            return db.req('put',docUrl,doc);
    12571                        });
    12672                    case "replace":
    12773                    default:
    12874                        console.log(docUrl+" replacing.");
    129                         return req('get',docUrl)
     75                        return db.req('get',docUrl)
    13076                        .then(function(oldDoc){
    13177                            doc['_rev'] = oldDoc['_rev'];
    132                             return req('put',docUrl,doc);
     78                            return db.req('put',docUrl,doc);
    13379                        },function(){
    134                             return req('put',docUrl,doc);
     80                            return db.req('put',docUrl,doc);
    13581                        });
    13682                }
Note: See TracChangeset for help on using the changeset viewer.