ocl
v1.1.1
Published
A git-style command parser for Optimist: the Optimist Command Loader.
Downloads
18
Readme
OCL: the Optimist Command Loader
Isn't this what ___ does?
Probably, and probably not. This is, quite specifically, a git-style command parser for Optimist. Not something kinda like Optimist, but Optimist.
Why?
I originally built OCL to bring apps like slc
and bacn
more
in line with patterns I started using in [discovery
][discovery]'s HTTP
trackers application and elsewhere. With these patterns, the purpose of OCL
is to gracefully co-exist with rc
and optimist
.
If so, the following becomes possible:
// This file is assumed to be located in a project's bin/ directory.
// Create a command loader for modules in the lib/commands directory.
var loader = require('ocl')({ root: __dirname + '../lib/commands' });
// Load configuration options from the same argv.
// NOTE: This same line can (and should) exist in each command that uses the
// `rc` config. Alternatively, it can be composed into lib/config.js.
var rc = require('rc')('discovery', {});
// Load commands, falling back to lib/commands/help in a pickle.
loader.run();
Or, to use Optimist's dynamic help formatting:
// This file is assumed to be located in a project's bin/ directory.
// Load options from JSON in bin/options.
var options = require('./options.json');
// Create a command loader for modules in the lib/commands directory.
var loader = require('ocl')({ root: __dirname + '../lib/commands' });
var optimist = require('optimist').options(options);
// Load configuration from the same argv.
var rc = require('rc')('discovery', {}, optimist.argv);
// Display dynamic help, if needed.
if (rc.help) {
optimist.showHelp();
process.exit(0);
}
// Load commands as before (lib/commands/help may still be loaded, and can
// fall back to optimist.showHelp().
loader.run();