code: function(obj) {
      var self = this
      var args = process.argv.slice(2)
      var cmdargs = _.cloneDeep(obj[CMDARGS_FIELD])
  
      self._initArgParser(obj, cmdargs, self._argparser, args)
  
      // parse the command line
      var parsedCmdargs = self._argparser.parse(args)
      delete parsedCmdargs._ // kill the _ args since we don't want them
  
      // configure subcommand
      var subcommand = self._configureSubcommand(cmdargs, parsedCmdargs)
  
      // configure option properties
      self._configureOptionProperties(obj, cmdargs, parsedCmdargs, subcommand)
  
      // attach the parsed args to the main object
      obj.parsedCmdargs = parsedCmdargs
  
      // add method to query the usage string
      obj.getUsage = function(cmd, colors) {
        var path = require('path')
        var _args = [cmd, '--help']
        var cmdargs = _.cloneDeep(obj[CMDARGS_FIELD])
        var _argparser = argparser()
        if (typeof _args[0] === 'undefined') {
          _args.shift()
        }
        self._initArgParser(obj, cmdargs, _argparser, _args)
        if (!colors) {
          _argparser.nocolors()
        }
        _argparser
          .printer(function() {/* noop */})
          .script(path.basename(process.argv[1]))
          .parse(_args)
  
        return _argparser.getUsage()
      }
  
      return subcommand
    }
docs: ***************************************************************************
  @method _processCmdargs
  @description Parses and processes all command line arguments as defined by
  "obj.cmdargs". Returns the string representing the subcommand
  to execute ("default" if no subcommands).
  @param {Object} obj -- The object being constructed
  @returns {string}
  @ignore