You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
3.5 KiB

/**
* filtering result
*
*
*/
class Filter {
/**
*
*
* @param {object} options
*
*/
constructor(options) {
this._options = options
}
/**
* if result with key is equal
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_eq(value, key, result) {
let isValid = false
if (result[key] === value) {
isValid = true
}
return isValid
}
/**
* if result with key is not equal
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_neq(value, key, result) {
let isValid = false
if (result[key] !== value) {
isValid = true
}
return isValid
}
/**
* if result with key has a single value or
* value from value
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_in(value, key, result) {
let isValid = false
if (result[key]) {
if (Array.isArray(value)) {
let found = false
// run through array
value.forEach((v, index) => {
if (result[key].indexOf(v) !== -1) {
found = true
}
})
if (found) {
isValid = true
}
} else {
if (result[key].indexOf(value) !== -1) {
isValid = true
}
}
}
return isValid
}
/**
* if result with key is lesser
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_lt(value, key, result) {
let isValid = false
if (result[key] > value) {
isValid = true
}
return isValid
}
/**
* if result with key is lesser or equal
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_lte(value, key, result) {
let isValid = false
if (result[key] >= value) {
isValid = true
}
return isValid
}
/**
* if result with key is greater
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_gt(value, key, result) {
let isValid = false
if (result[key] < value) {
isValid = true
}
return isValid
}
/**
* if result with key is greater or equal
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_gte(value, key, result) {
let isValid = false
if (result[key] <= value) {
isValid = true
}
return isValid
}
/**
* if result with key is null
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_null(value, key, result) {
let isValid = false
if (!result[key]) {
isValid = true
}
return isValid
}
/**
* if result with key is not null
*
*
* @param {object} value
* @param {string} key
* @param {object} result
*
* @return {boolean}
*
*/
_nnull(value, key, result) {
let isValid = false
if (result[key]) {
isValid = true
}
return isValid
}
/**
* run through all options with single result
*
*
* @param {object} result
* @return {boolean}
*
*/
validate(result) {
let isValid = true
for (const [key, value] of Object.entries(this._options)) {
const operators = Object.keys(value)
operators.forEach((operator) => {
if (!this[operator](value[operator], key, result)) {
isValid = false
}
})
}
return isValid
}
}
module.exports = Filter