123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /**
- * class Action
- *
- * Base class for all actions
- * Do not call in your code, use this class only for inherits your own action
- *
- * Information about how to convert command line strings to Javascript objects.
- * Action objects are used by an ArgumentParser to represent the information
- * needed to parse a single argument from one or more strings from the command
- * line. The keyword arguments to the Action constructor are also all attributes
- * of Action instances.
- *
- * #####Alowed keywords:
- *
- * - `store`
- * - `storeConstant`
- * - `storeTrue`
- * - `storeFalse`
- * - `append`
- * - `appendConstant`
- * - `count`
- * - `help`
- * - `version`
- *
- * Information about action options see [[Action.new]]
- *
- * See also [original guide](http://docs.python.org/dev/library/argparse.html#action)
- *
- **/
- 'use strict';
- // Constants
- var $$ = require('./const');
- /**
- * new Action(options)
- *
- * Base class for all actions. Used only for inherits
- *
- *
- * ##### Options:
- *
- * - `optionStrings` A list of command-line option strings for the action.
- * - `dest` Attribute to hold the created object(s)
- * - `nargs` The number of command-line arguments that should be consumed.
- * By default, one argument will be consumed and a single value will be
- * produced.
- * - `constant` Default value for an action with no value.
- * - `defaultValue` The value to be produced if the option is not specified.
- * - `type` Cast to 'string'|'int'|'float'|'complex'|function (string). If
- * None, 'string'.
- * - `choices` The choices available.
- * - `required` True if the action must always be specified at the command
- * line.
- * - `help` The help describing the argument.
- * - `metavar` The name to be used for the option's argument with the help
- * string. If None, the 'dest' value will be used as the name.
- *
- * ##### nargs supported values:
- *
- * - `N` (an integer) consumes N arguments (and produces a list)
- * - `?` consumes zero or one arguments
- * - `*` consumes zero or more arguments (and produces a list)
- * - `+` consumes one or more arguments (and produces a list)
- *
- * Note: that the difference between the default and nargs=1 is that with the
- * default, a single value will be produced, while with nargs=1, a list
- * containing a single value will be produced.
- **/
- var Action = module.exports = function Action(options) {
- options = options || {};
- this.optionStrings = options.optionStrings || [];
- this.dest = options.dest;
- this.nargs = options.nargs !== undefined ? options.nargs : null;
- this.constant = options.constant !== undefined ? options.constant : null;
- this.defaultValue = options.defaultValue;
- this.type = options.type !== undefined ? options.type : null;
- this.choices = options.choices !== undefined ? options.choices : null;
- this.required = options.required !== undefined ? options.required: false;
- this.help = options.help !== undefined ? options.help : null;
- this.metavar = options.metavar !== undefined ? options.metavar : null;
- if (!(this.optionStrings instanceof Array)) {
- throw new Error('optionStrings should be an array');
- }
- if (this.required !== undefined && typeof(this.required) !== 'boolean') {
- throw new Error('required should be a boolean');
- }
- };
- /**
- * Action#getName -> String
- *
- * Tells action name
- **/
- Action.prototype.getName = function () {
- if (this.optionStrings.length > 0) {
- return this.optionStrings.join('/');
- } else if (this.metavar !== null && this.metavar !== $$.SUPPRESS) {
- return this.metavar;
- } else if (this.dest !== undefined && this.dest !== $$.SUPPRESS) {
- return this.dest;
- }
- return null;
- };
- /**
- * Action#isOptional -> Boolean
- *
- * Return true if optional
- **/
- Action.prototype.isOptional = function () {
- return !this.isPositional();
- };
- /**
- * Action#isPositional -> Boolean
- *
- * Return true if positional
- **/
- Action.prototype.isPositional = function () {
- return (this.optionStrings.length === 0);
- };
- /**
- * Action#call(parser, namespace, values, optionString) -> Void
- * - parser (ArgumentParser): current parser
- * - namespace (Namespace): namespace for output data
- * - values (Array): parsed values
- * - optionString (Array): input option string(not parsed)
- *
- * Call the action. Should be implemented in inherited classes
- *
- * ##### Example
- *
- * ActionCount.prototype.call = function (parser, namespace, values, optionString) {
- * namespace.set(this.dest, (namespace[this.dest] || 0) + 1);
- * };
- *
- **/
- Action.prototype.call = function () {
- throw new Error('.call() not defined');// Not Implemented error
- };
|