|
|
- /* eslint-disable class-methods-use-this */
- 'use strict';
-
- const Q = require('q');
-
- /**
- * COA Object
- *
- * Base class for all COA-related objects
- *
- * --------|-----|-----|-----
- * | Cmd | Opt | Arg
- * --------|-----|-----|-----
- * name | ✓ | ✓ | ✓
- * title | ✓ | ✓ | ✓
- * comp | ✓ | ✓ | ✓
- * reject | ✓ | ✓ | ✓
- * end | ✓ | ✓ | ✓
- * apply | ✓ | ✓ | ✓
- *
- * @class CoaObject
- */
- module.exports = class CoaObject {
- constructor(cmd) {
- this._cmd = cmd;
- this._name = null;
- this._title = null;
- this._comp = null;
- }
-
- /**
- * Set a canonical identifier to be used anywhere in the API.
- *
- * @param {String} name - command, option or argument name
- * @returns {COA.CoaObject} - this instance (for chainability)
- */
- name(name) {
- this._name = name;
- return this;
- }
-
- /**
- * Set a long description to be used anywhere in text messages.
- * @param {String} title - human readable entity title
- * @returns {COA.CoaObject} - this instance (for chainability)
- */
- title(title) {
- this._title = title;
- return this;
- }
-
- /**
- * Set custom additional completion for current object.
- *
- * @param {Function} comp - completion generation function,
- * invoked in the context of object instance.
- * Accepts parameters:
- * - {Object} opts - completion options
- * It can return promise or any other value threated as a result.
- * @returns {COA.CoaObject} - this instance (for chainability)
- */
- comp(comp) {
- this._comp = comp;
- return this;
- }
-
- /**
- * Apply function with arguments in a context of object instance.
- *
- * @param {Function} fn - body
- * @param {Array.<*>} args... - arguments
- * @returns {COA.CoaObject} - this instance (for chainability)
- */
- apply(fn) {
- arguments.length > 1?
- fn.apply(this, [].slice.call(arguments, 1))
- : fn.call(this);
-
- return this;
- }
-
- /**
- * Return reject of actions results promise with error code.
- * Use in .act() for return with error.
- * @param {Object} reason - reject reason
- * You can customize toString() method and exitCode property
- * of reason object.
- * @returns {Q.promise} rejected promise
- */
- reject(reason) {
- return Q.reject(reason);
- }
-
- /**
- * Finish chain for current subcommand and return parent command instance.
- * @returns {COA.Cmd} parent command
- */
- end() {
- return this._cmd;
- }
- };
|