Ignore:
Timestamp:
07/28/13 17:46:12 (12 years ago)
Author:
hendrikvanantwerpen
Message:
  • Added CouchDB script to make interacting with couch easier.
  • Use this script in the database configuration.
  • Get CSV export to work.
File:
1 edited

Legend:

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

    r470 r475  
    1 var q = require('q'),
    2     request = require('../util/q-request'),
    3     _ = require('underscore'),
    4     util = require('util');
     1var Q = require('q')
     2  , request = require('../util/q-request')
     3  , _ = require('underscore')
     4  , CouchDB = require('../util/couch').CouchDB
     5  , util = require('util');
    56
    67var designDocs = require('./couchdb-design-docs');
    78
    89module.exports = function(couchDbURL) {
    9 
    10     function stringifyFunctions(value) {
    11         if ( value === null ) {
    12             return null;
    13         } else if ( _.isArray(value) ) {
    14             return value;
    15         } else if ( _.isFunction(value) ) {
    16             return value.toString();
    17         } else if ( _.isObject(value) ) {
    18             value = _.clone(value);
    19             _.each(value, function(propValue, propName){
    20                 value[propName] = stringifyFunctions(propValue);
    21             });
    22             return value;
    23         } else {
    24             return value;
    25         }
    26     }
    27 
    28     function dbRequest(method,path,content) {
    29         var url = couchDbURL+path;
    30         var options = {
    31             method: method,
    32             headers: {
    33                 'content-type': 'application/json; charset=utf-8',
    34                 'accept': 'application/json'
    35             },
    36             body: JSON.stringify(content)
    37         };
    38         //console.log('req',url,options);
    39         return request(url,options).then(function(res){
    40             return JSON.parse(res);
    41         }, function(err){
    42             return JSON.parse(err);
    43         });
    44     }
     10    var server = new CouchDB(couchDbURL);
    4511
    4612    console.log("Configuring CouchDB for QED");
    4713    console.log("Checking CouchDB version");
    48     return dbRequest('GET','')
    49     .then(function(res){
    50         if (res.version !== "1.2.0" ) {
    51             console.log("Found "+res.version+", only tested with CouchDB 1.2.0");
     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");
    5218        } else {
    5319            console.log("CouchDB 1.2.0 found");
     
    5521    }).then(function(res){
    5622        console.log("Checking database 'qed'");
    57         return dbRequest('GET','qed')
    58         .then(function(res){
     23        return server.get('qed')
     24        .then(function(db){
    5925            console.log("Database 'qed' found.");
    6026        },function(err){
    6127            console.log("Creating database 'qed'");
    62             return dbRequest('PUT','qed');
     28            return server.put('qed');
    6329        });
    6430    }).then(function(){
    6531        console.log("Putting documents in database.");
    66         designDocs = stringifyFunctions(designDocs);
    67         return q.all(_.map(designDocs, function(doc,docUrl){
     32        return _.reduce(designDocs, function(memo, doc, docUrl) {
    6833            var configAction = doc.__configAction || "replace";
    6934            delete doc.__configAction;
     
    7136            case "ignore":
    7237                console.log(docUrl+" ignored.");
    73                 break;
     38                return memo;
    7439            case "update":
    7540                console.log(docUrl+" updating.");
    76                 return dbRequest('GET',docUrl)
    77                 .then(function(oldDoc){
    78                     _.extend(oldDoc,doc);
    79                     return dbRequest('PUT',docUrl,oldDoc);
    80                 },function(){
    81                     return dbRequest('PUT',docUrl,doc);
     41                return memo.then(function(){
     42                    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                    });
    8249                });
    8350            case "replace":
    8451                console.log(docUrl+" replacing.");
    85                 return dbRequest('GET',docUrl)
    86                 .then(function(oldDoc){
    87                     _.extend(doc,_.pick(oldDoc,'_id','_rev'));
    88                     return dbRequest('PUT',docUrl,doc);
    89                 },function(){
    90                     return dbRequest('PUT',docUrl,doc);
     52                return memo.then(function(){
     53                    server.get(docUrl)
     54                    .then(function(oldDoc){
     55                        _.extend(doc,_.pick(oldDoc,'_id','_rev'));
     56                        return server.put(docUrl,doc);
     57                    },function(){
     58                        return server.put(docUrl,doc);
     59                    });
    9160                });
    9261            default:
    9362                console.warn("Unknown action",configAction);
    94                 break;
     63                return memo;
    9564            }
    96         }));
     65        }, Q.resolve());
    9766    }).then(function(results){
    98         console.log("Done!");
     67        console.log("Done!", results);
    9968    },function(err){
    10069        console.error("ERROR",err,err.stack);
Note: See TracChangeset for help on using the changeset viewer.