You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.6 KiB
101 lines
2.6 KiB
/* 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; |
|
} |
|
};
|
|
|