couchinator
Version:
Fixtures for Cloudant: Create and destroy cloudant databases with ease
120 lines (104 loc) • 2.83 kB
JavaScript
#!/usr/bin/env node
const program = require('commander');
const path = require('path');
const Couchinator = require('../lib');
const package = require('../package.json');
const DEFAULT_PATH = 'fixtures';
let command;
program.version(package.version);
program.command('create').action(cmd => (command = 'create'));
program.command('destroy').action(cmd => (command = 'destroy'));
program.command('recreate').action(cmd => (command = 'recreate'));
program
.option('-u --url <url>', 'couchdb url')
.option('-p --path <path>', 'resource path. Default ./' + DEFAULT_PATH)
.option('-x --prefix <prefix>', 'db name prefix')
.option('-s --suffix <suffix>', 'db name suffix')
.option('-b --verbose', 'verbose logs', false)
.option(
'-d --ddocsonly',
'import design docs only. Do no import other docs ',
false
);
program.parse(process.argv);
validate();
const rpath = program.path
? path.isAbsolute(program.path)
? program.path
: path.join(process.cwd(), program.path)
: path.join(process.cwd(), DEFAULT_PATH);
main({
command,
url: program.url,
path: rpath,
prefix: program.prefix,
suffix: program.suffix,
allDocs: !program.ddocsonly,
verbose: program.verbose,
});
function main(opts) {
const command = opts.command;
const url = opts.url;
const prefix = opts.prefix;
const suffix = opts.suffix;
const rpath = opts.path;
const allDocs = opts.allDocs;
const visitor = o => {
const level = opts.verbose ? 0 : 30;
if (o.level >= level) {
if (o.error) {
console.error(o.msg);
} else {
console.log(o.msg);
}
}
};
const couchinator = new Couchinator(url);
switch (command) {
case 'create':
couchinator
.resources(rpath, true)
.visitor(visitor, true)
.prefix(prefix, true)
.suffix(suffix, true)
.configure()
.create(allDocs)
.catch(e => process.exit(2));
break;
case 'destroy':
couchinator
.resources(rpath, true)
.visitor(visitor, true)
.prefix(prefix, true)
.suffix(suffix, true)
.configure()
.destroy()
.catch(e => process.exit(2));
break;
case 'recreate':
couchinator
.resources(rpath, true)
.visitor(visitor, true)
.prefix(prefix, true)
.suffix(suffix, true)
.configure()
.recreate(allDocs)
.catch(e => process.exit(2));
break;
default:
exit('Invalid command.');
}
}
function validate() {
if (program.args.length === 0) exit();
if (!command) exit('Invalid command.');
if (!program.url) exit('Url required.');
if (program.args.length === 0) exit();
}
function exit(msg) {
if (msg) {
console.error('Error: ' + msg + '\n');
}
program.outputHelp();
process.exit(1);
}