define([ 'dojo/_base/json', 'dojo/_base/lang', 'dojox/lang/functional', 'qed/lib/async', './util/db', './data/design-docs' ],function(json,lang,func,async,db,docs){ function serializeFunctions(value) { if ( value === null ) { return null; } else if ( lang.isArray(value) ) { return value; } else if ( lang.isFunction(value) ) { return value.toString(); } else if ( lang.isObject(value) ) { return func.mapIn(value,serializeFunctions); } else { return value; } } async.seq([ function(){ console.log("Configuring CouchDB for QED:"); }, function(){ console.log("Checking CouchDB version"); return db.req('get','') .then(function(res){ if (res.version !== "1.2.0" ) { console.log("Found "+res.version+", only tested with CouchDB 1.2.0") } else { console.log("CouchDB 1.2.0 found"); } }); },function(){ console.log("Checking database 'qed'"); return db.req('get','qed') .then(function(res){ if (res.error) { console.log("Creating database 'qed'"); return db.req('put','/qed'); } else { console.log("Database 'qed' found."); } },function(res){ console.log("Creating database 'qed'"); return db.req('put','/qed'); }); },function(){ return serializeFunctions(docs); },function(docs){ console.log("Putting documents in database."); return async.forEach(func.keys(docs),function(docUrl){ var doc = docs[docUrl]; var configAction = doc.__configAction; delete doc.__configAction; switch (configAction) { case "ignore": console.log(docUrl+" ignored."); case "update": console.log(docUrl+" updating."); return db.req('get',docUrl) .then(function(oldDoc){ lang.mixin(oldDoc,doc); return db.req('put',docUrl,oldDoc); },function(){ return db.req('put',docUrl,doc); }); case "replace": default: console.log(docUrl+" replacing."); return db.req('get',docUrl) .then(function(oldDoc){ doc['_rev'] = oldDoc['_rev']; return db.req('put',docUrl,doc); },function(){ return db.req('put',docUrl,doc); }); } }); },function(){ console.log("Done!"); } ]); });