# All files / coa/lib arg.js

100% Statements 16/16
87.5% Branches 7/8
100% Functions 6/6
100% Lines 16/16

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59

    1x
    1x

    1x

    16x

    16x

    31x

    31x
    31x

    31x

    28x

    2x

    1x

    1x

    1x

    1x

    1x

     'use strict';

    const
        CoaParam = require('./coaparam'),
        Color = require('./color');

    /**
     * Argument
     *
     * Unnamed entity. From command line arguments passed as list of unnamed values.
     *
     * @class Arg
     * @extends CoaParam
     */
    module.exports = class Arg extends CoaParam {
        /**
         * @constructs
         * @param {COA.Cmd} cmd - parent command
         */
        constructor(cmd) {
            super(cmd);

            this._cmd._args.push(this);
        }

        _saveVal(args, val) {
            this._val && (val = this._val(val));

            const name = this._name;
            this._arr
                ? (args[name] || (args[name] = [])).push(val)
                : (args[name] = val);

            return val;
        }

        _parse(arg, args) {
            return this._saveVal(args, arg);
        }

        _checkParsed(opts, args) {
            return !args.hasOwnProperty(this._name);
        }

        _usage() {
            const res = [];

            res.push(Color('lpurple', this._name.toUpperCase()), ' : ', this._title);

            this._req && res.push(' ', Color('lred', '(required)'));

            return res.join('');
        }

        _requiredText() {
            return `Missing required argument:\n  ${this._usage()}`;
        }
    };