"use strict"; var async = require('async'); var prompt = require('prompt'); var winston = require('winston'); var questions = { redis: require('../src/database/redis').questions, mongo: require('../src/database/mongo').questions }; module.exports = function (config, callback) { async.waterfall([ function (next) { process.stdout.write('\n'); winston.info('Now configuring ' + config.database + ' database:'); getDatabaseConfig(config, next); }, function (databaseConfig, next) { saveDatabaseConfig(config, databaseConfig, next); } ], callback); }; function getDatabaseConfig(config, callback) { if (!config) { return callback(new Error('aborted')); } if (config.database === 'redis') { if (config['redis:host'] && config['redis:port']) { callback(null, config); } else { prompt.get(questions.redis, callback); } } else if (config.database === 'mongo') { if (config['mongo:host'] && config['mongo:port']) { callback(null, config); } else { prompt.get(questions.mongo, callback); } } else { return callback(new Error('unknown database : ' + config.database)); } } function saveDatabaseConfig(config, databaseConfig, callback) { if (!databaseConfig) { return callback(new Error('aborted')); } // Translate redis properties into redis object if (config.database === 'redis') { config.redis = { host: databaseConfig['redis:host'], port: databaseConfig['redis:port'], password: databaseConfig['redis:password'], database: databaseConfig['redis:database'] }; if (config.redis.host.slice(0, 1) === '/') { delete config.redis.port; } } else if (config.database === 'mongo') { config.mongo = { host: databaseConfig['mongo:host'], port: databaseConfig['mongo:port'], username: databaseConfig['mongo:username'], password: databaseConfig['mongo:password'], database: databaseConfig['mongo:database'] }; } else { return callback(new Error('unknown database : ' + config.database)); } var allQuestions = questions.redis.concat(questions.mongo); for (var x = 0; x < allQuestions.length; x++) { delete config[allQuestions[x].name]; } callback(null, config); }