l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

action.js (4659B)


      1 /**
      2  * class Action
      3  *
      4  * Base class for all actions
      5  * Do not call in your code, use this class only for inherits your own action
      6  *
      7  * Information about how to convert command line strings to Javascript objects.
      8  * Action objects are used by an ArgumentParser to represent the information
      9  * needed to parse a single argument from one or more strings from the command
     10  * line. The keyword arguments to the Action constructor are also all attributes
     11  * of Action instances.
     12  *
     13  * ##### Allowed keywords:
     14  *
     15  * - `store`
     16  * - `storeConstant`
     17  * - `storeTrue`
     18  * - `storeFalse`
     19  * - `append`
     20  * - `appendConstant`
     21  * - `count`
     22  * - `help`
     23  * - `version`
     24  *
     25  * Information about action options see [[Action.new]]
     26  *
     27  * See also [original guide](http://docs.python.org/dev/library/argparse.html#action)
     28  *
     29  **/
     30 
     31 'use strict';
     32 
     33 
     34 // Constants
     35 var c = require('./const');
     36 
     37 
     38 /**
     39  * new Action(options)
     40  *
     41  * Base class for all actions. Used only for inherits
     42  *
     43  *
     44  * ##### Options:
     45  *
     46  * - `optionStrings`  A list of command-line option strings for the action.
     47  * - `dest`  Attribute to hold the created object(s)
     48  * - `nargs`  The number of command-line arguments that should be consumed.
     49  * By default, one argument will be consumed and a single value will be
     50  * produced.
     51  * - `constant`  Default value for an action with no value.
     52  * - `defaultValue`  The value to be produced if the option is not specified.
     53  * - `type`  Cast to 'string'|'int'|'float'|'complex'|function (string). If
     54  * None, 'string'.
     55  * - `choices`  The choices available.
     56  * - `required`  True if the action must always be specified at the command
     57  * line.
     58  * - `help`  The help describing the argument.
     59  * - `metavar`  The name to be used for the option's argument with the help
     60  * string. If None, the 'dest' value will be used as the name.
     61  *
     62  * ##### nargs supported values:
     63  *
     64  * - `N` (an integer) consumes N arguments (and produces a list)
     65  * - `?`  consumes zero or one arguments
     66  * - `*` consumes zero or more arguments (and produces a list)
     67  * - `+` consumes one or more arguments (and produces a list)
     68  *
     69  * Note: that the difference between the default and nargs=1 is that with the
     70  * default, a single value will be produced, while with nargs=1, a list
     71  * containing a single value will be produced.
     72  **/
     73 var Action = module.exports = function Action(options) {
     74   options = options || {};
     75   this.optionStrings = options.optionStrings || [];
     76   this.dest = options.dest;
     77   this.nargs = typeof options.nargs !== 'undefined' ? options.nargs : null;
     78   this.constant = typeof options.constant !== 'undefined' ? options.constant : null;
     79   this.defaultValue = options.defaultValue;
     80   this.type = typeof options.type !== 'undefined' ? options.type : null;
     81   this.choices = typeof options.choices !== 'undefined' ? options.choices : null;
     82   this.required = typeof options.required !== 'undefined' ? options.required : false;
     83   this.help = typeof options.help !== 'undefined' ? options.help : null;
     84   this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : null;
     85 
     86   if (!(this.optionStrings instanceof Array)) {
     87     throw new Error('optionStrings should be an array');
     88   }
     89   if (typeof this.required !== 'undefined' && typeof this.required !== 'boolean') {
     90     throw new Error('required should be a boolean');
     91   }
     92 };
     93 
     94 /**
     95  * Action#getName -> String
     96  *
     97  * Tells action name
     98  **/
     99 Action.prototype.getName = function () {
    100   if (this.optionStrings.length > 0) {
    101     return this.optionStrings.join('/');
    102   } else if (this.metavar !== null && this.metavar !== c.SUPPRESS) {
    103     return this.metavar;
    104   } else if (typeof this.dest !== 'undefined' && this.dest !== c.SUPPRESS) {
    105     return this.dest;
    106   }
    107   return null;
    108 };
    109 
    110 /**
    111  * Action#isOptional -> Boolean
    112  *
    113  * Return true if optional
    114  **/
    115 Action.prototype.isOptional = function () {
    116   return !this.isPositional();
    117 };
    118 
    119 /**
    120  * Action#isPositional -> Boolean
    121  *
    122  * Return true if positional
    123  **/
    124 Action.prototype.isPositional = function () {
    125   return (this.optionStrings.length === 0);
    126 };
    127 
    128 /**
    129  * Action#call(parser, namespace, values, optionString) -> Void
    130  * - parser (ArgumentParser): current parser
    131  * - namespace (Namespace): namespace for output data
    132  * - values (Array): parsed values
    133  * - optionString (Array): input option string(not parsed)
    134  *
    135  * Call the action. Should be implemented in inherited classes
    136  *
    137  * ##### Example
    138  *
    139  *      ActionCount.prototype.call = function (parser, namespace, values, optionString) {
    140  *        namespace.set(this.dest, (namespace[this.dest] || 0) + 1);
    141  *      };
    142  *
    143  **/
    144 Action.prototype.call = function () {
    145   throw new Error('.call() not defined');// Not Implemented error
    146 };