| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | /* 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;    }};
 |