| /** | 
|  * 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. | 
|  * | 
|  * ##### Allowed 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 c = 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 = typeof options.nargs !== 'undefined' ? options.nargs : null; | 
|   this.constant = typeof options.constant !== 'undefined' ? options.constant : null; | 
|   this.defaultValue = options.defaultValue; | 
|   this.type = typeof options.type !== 'undefined' ? options.type : null; | 
|   this.choices = typeof options.choices !== 'undefined' ? options.choices : null; | 
|   this.required = typeof options.required !== 'undefined' ? options.required : false; | 
|   this.help = typeof options.help !== 'undefined' ? options.help : null; | 
|   this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : null; | 
|   | 
|   if (!(this.optionStrings instanceof Array)) { | 
|     throw new Error('optionStrings should be an array'); | 
|   } | 
|   if (typeof 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 !== c.SUPPRESS) { | 
|     return this.metavar; | 
|   } else if (typeof this.dest !== 'undefined' && this.dest !== c.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 | 
| }; |