'use strict';
var CLASS_NAME = 'RuleResult';
var Argument = require('../system/argument-check.js');
var BrokenRule = require('./broken-rule.js');
var RuleSeverity = require('./rule-severity.js');
/**
* @classdesc Serves as the base class for the failed result of executing a rule.
* @description Creates a new rule result object.
*
* @memberof bo.rules
* @constructor
* @param {string} ruleName - The name of the rule.
* @param {string} propertyName - The name of the property the rule belongs to.
* @param {string} message - Human-readable description of the reason of the failure.
*
* @throws {@link bo.system.ArgumentError Argument error}: The rule name must be a non-empty string.
* @throws {@link bo.system.ArgumentError Argument error}: The message must be a non-empty string.
*/
var ResultBase = function (ruleName, propertyName, message) {
var check = Argument.inConstructor(CLASS_NAME);
/**
* The name of the rule.
* @type {string}
* @readonly
*/
this.ruleName = check(ruleName).forMandatory('ruleName').asString();
/**
* The name of the property the rule belongs to.
* @type {string}
* @readonly
*/
this.propertyName = propertyName || '';
/**
* Human-readable description of the reason of the failure.
* @type {string}
* @readonly
*/
this.message = check(message).forMandatory('message').asString();
/**
* The severity of the rule failure.
* @type {bo.rules.RuleSeverity}
* @readonly
*/
this.severity = RuleSeverity.error;
/**
* Indicates whether processing the rules of the property should stop.
* @type {boolean}
* @readonly
*/
this.stopsProcessing = false;
/**
* Indicates whether the broken rule of this failure is preserved when a new verification starts.
* Typically the broken rules of authorization rules are retained.
* @type {boolean}
* @readonly
*/
this.isPreserved = false;
};
/**
* Maps the rule result to broken rule.
*
* @function bo.rules.ResultBase#toBrokenRule
* @returns {bo.rules.BrokenRule} The broken rule companion of the rule result.
*/
ResultBase.prototype.toBrokenRule = function() {
return new BrokenRule(
this.ruleName,
this.isPreserved,
this.propertyName,
this.message,
this.severity
);
};
module.exports = ResultBase;