"use strict"; /** * Creates instance of step. * * @class * @name Step * @classdesc Step data. * @arg {string} name - Step name. * @arg {object} income - Income state. * @arg {object} outcome - Outcome state. * @arg {number} [usage=1] - Usage number. * @arg {string[]} [actions=[]] - Step actions. * @arg {string[]} [expected=[]] - Step expectations. * @arg {?string[]} [complete] - List of completenesses. * @arg {?string[]} [incomplete] - List of incompletenesses. * @arg {?string} [before] - Name of step, which should be executed after this. * @arg {?string} [after] - Name of step, which this step should be executed after. * @prop {string} name - Step name. * @prop {object} income - Income state. * @prop {object} outcome - Outcome state. * @prop {number} [usage=1] - Usage number. * @prop {number} [actions=[]] - Step actions. * @prop {string[]} [expected=[]] - Step expectations. * @prop {?string[]} [complete] - List of completenesses. * @prop {?string[]} [incomplete] - List of incompletenesses. * @prop {?string} [before] - Name of step, which should be executed after this. * @prop {?string} [after] - Name of step, which this step should be executed after. */ var _ = require("lodash"); var Step = function (name, weight, income, outcome, usage, actions, expected, complete, incomplete, before, after) { this.name = name; this.weight = weight || 1; this.income = income; this.outcome = outcome; this.usage = usage || 1; this.actions = actions || []; this.expected = expected || []; this.complete = complete; this.incomplete = incomplete; this.before = before; this.after = after; }; /** * Clones step. * * @method * @return {Step} New instance of step with the same parameters. */ Step.prototype.clone = function () { return new this.constructor(this.name, this.weight, _.cloneDeep(this.income), _.cloneDeep(this.outcome), this.usage, _.clone(this.actions), _.clone(this.expected), _.clone(this.complete), _.clone(this.incomplete), this.before, this.after); }; module.exports = Step;