Something went wrong on our end
Select Git revision
-
Volker Schukai authoredVolker Schukai authored
oroperator.js 2.32 KiB
'use strict';
/**
* @author schukai GmbH
*/
import {AbstractOperator} from "./abstractoperator.js";
/**
* Constraints are used to define conditions that must be met by the value of a variable.
*
* The uniform API of the constraints allows chains to be formed.
*
* The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.
*
* ```
* <script type="module">
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@latest/source/constraint/oroperator.js';
* new OrOperator();
* </script>
* ```
*
* @example
*
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@latest/source/constraints/valid.js';
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@latest/source/constraints/invalid.js';
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@latest/source/constraints/oroperator.js';
*
* new OrOperator(
* new Valid(), new Invalid()).isValid()
* .then(()=>console.log(true))
* .catch(()=>console.log(false));
* // ↦ true
*
* new OrOperator(
* new Invalid(), new Invalid()).isValid()
* .then(()=>console.log(true))
* .catch(()=>console.log(false));
* // ↦ false
*
* @since 1.3.0
* @copyright schukai GmbH
* @memberOf Monster.Constraints
* @summary A or operator
*/
export class OrOperator extends AbstractOperator {
/**
* this method return a promise containing the result of the check.
*
* @param {*} value
* @returns {Promise}
*/
isValid(value) {
var self = this;
return new Promise(function (resolve, reject) {
let a, b;
self.operantA.isValid(value)
.then(function () {
resolve();
}).catch(function () {
a = false;
/** b has already been evaluated and was not true */
if (b === false) {
reject();
}
});
self.operantB.isValid(value)
.then(function () {
resolve();
}).catch(function () {
b = false;
/** b has already been evaluated and was not true */
if (a === false) {
reject();
}
});
});
}
}