all files / lib/ cli.js

100% Statements 36/36
100% Branches 14/14
100% Functions 5/5
100% Lines 36/36
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72                                                               248×          
const cli     = require('bagofcli');
const colors  = require('colors');
const fs      = require('fs');
const p       = require('path');
const SwaggyC = require('./swaggyc');
const util    = require('util');
 
const APP_DIR     = process.cwd();
const SWAGGYC_DIR = p.join(__dirname, '..');
 
function _exec() {
 
  var lastArg = arguments[arguments.length - 1];
  var tasks   = [lastArg._name].concat(lastArg.parent.args.slice(0, -1));
 
  var apiSpec  = lastArg.parent.apiSpec;
  var confFile = lastArg.parent.confFile || p.join(APP_DIR, '{lang}/conf.json');
  var outDir   = lastArg.parent.outDir || p.join(APP_DIR, '{lang}/generated/');
  var logDir   = lastArg.parent.logDir || p.join(APP_DIR, '{lang}/log/');
  var quiet    = lastArg.parent.quiet || false;
 
  var swaggerCodegen = lastArg.parent.jar ? util.format('java -jar %s', lastArg.parent.jar) : 'swagger-codegen';
 
  var params = {
    apiSpec: apiSpec,
    appDir: APP_DIR,
    confFile: confFile,
    outDir: outDir,
    swaggerCodegen: swaggerCodegen,
  };
 
  var opts = {
    logDir: logDir,
    swaggycDir: SWAGGYC_DIR,
    quiet: quiet
  };
 
  function errorCb(err) {
    if (err.code && !isNaN(err.code)) {
      console.error('%s | exit code %d', 'FAILURE'.red, err.code);
      process.exit(err.code);
    } else {
      console.error('%s | %s', 'ERROR'.red, err.message);
    }
  }
 
  function successCb() {
    console.log('%s | exit code 0', 'SUCCESS'.green);
  }
 
  var swaggyC = new SwaggyC(params, opts);
  swaggyC.run(tasks, cli.exitCb(errorCb, successCb));
}
 
/**
 * Execute Swaggy-C CLI.
 */
function exec() {
 
  var commandFile = p.join(SWAGGYC_DIR, 'conf', 'commands.json');
  var commands    = Object.keys(JSON.parse(fs.readFileSync(commandFile)).commands);
 
  var actions = { commands: {} };
  commands.forEach(function (command) {
    actions.commands[command] = { action: _exec };
  });
 
  cli.command(__dirname, actions);
}
 
exports.exec = exec;