Initial commit
[yaffs-website] / node_modules / argparse / lib / action.js
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  * #####Alowed 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 };