source: Dev/trunk/src/server/config/config-couchdb.js @ 480

Last change on this file since 480 was 479, checked in by hendrikvanantwerpen, 11 years ago

Changes for validation

  • Split command line wrappers from processing logic.
  • Created a JSON Schema for the database
  • Allow off-line validation of database documents.
File size: 2.3 KB
Line 
1var Q = require('q')
2  , _ = require('underscore')
3  , CouchDB = require('../util/couch').CouchDB
4  , util = require('util')
5  ;
6
7var designDocs = require('./couchdb-design-docs');
8
9module.exports = function(couchServerURL) {
10    var server = new CouchDB(couchServerURL);
11
12    console.log("Configuring CouchDB for QED");
13    console.log("Checking CouchDB version");
14    return server.get('')
15    .then(function(info){
16        if (info.version !== "1.2.0" ) {
17            console.log("Found "+info.version+", only tested with CouchDB 1.2.0");
18        } else {
19            console.log("CouchDB 1.2.0 found");
20        }
21    }).then(function(res){
22        console.log("Checking database 'qed'");
23        return server.get('qed')
24        .then(function(db){
25            console.log("Database 'qed' found.");
26        },function(err){
27            console.log("Creating database 'qed'");
28            return server.put('qed');
29        });
30    }).then(function(){
31        console.log("Putting documents in database.");
32        return _.reduce(designDocs, function(memo, doc, docUrl) {
33            return memo.then(function(){
34                var configAction = doc.__configAction || "replace";
35                delete doc.__configAction;
36                switch (configAction) {
37                case "ignore":
38                    console.log(docUrl+" ignored.");
39                    return null;
40                case "update":
41                    console.log(docUrl+" updating.");
42                    return server.get(docUrl)
43                    .then(function(oldDoc){
44                        _.extend(oldDoc,doc);
45                        return server.put(docUrl,oldDoc);
46                    },function(){
47                        return server.put(docUrl,doc);
48                    });
49                case "replace":
50                    console.log(docUrl+" replacing.");
51                    return server.get(docUrl)
52                    .then(function(oldDoc){
53                        _.extend(doc,_.pick(oldDoc,'_id','_rev'));
54                        return server.put(docUrl,doc);
55                    },function(){
56                        return server.put(docUrl,doc);
57                    });
58                default:
59                    console.warn("Unknown action",configAction);
60                    return null;
61                }
62            });
63        }, Q.resolve());
64    });
65};
Note: See TracBrowser for help on using the repository browser.