src/services/paramBuilder.js
import FilterBuilder from './filterBuilder' // eslint-disable-line no-unused-vars
export default class ParamBuilder {
/**
*
* @param {FilterBuilder} filter
*/
constructor (filter) {
this._filter = filter
}
/**
* Equivalence
* @param {*} value
*
* @returns {FilterBuilder}
*/
eq (value) {
this._setValue(value)
return this._filter
}
/**
* Not equal (!=)
* @param {*} value
*/
neq (value) {
this._setValue({ neq: value })
return this._filter
}
/**
* Numerical greather than (>)
* Valid for numberical and date values. For Geopoint values, the units are in miles by default.
*
* @param {string|number|Date} value
*/
gt (value) {
this._setValue({ gt: value })
return this._filter
}
/**
* Numerical greater than of equal (>=)
* Valid for numberical and date values. For Geopoint values, the units are in miles by default.
*
* @param {string|number|Date} value
*/
gte (value) {
this._setValue({ gte: value })
return this._filter
}
/**
* Numerical less than (<)
* Valid only for numerical and date values. For Geopoint values, the units are in miles by default.
* @param {string|number|Date} value
*/
lt (value) {
this._setValue({ lt: value })
return this._filter
}
/**
* Numerical less than or equal (<=)
* Valid only for numerical and date values. For Geopoint values, the units are in miles by default.
* @param {string|number|Date} value
*/
lte (value) {
this._setValue({ lte: value })
return this._filter
}
/**
* True if the value is between the two specified values
* greater than or equal to first value and less than or equal to second value.
* @param {*} valFrom
* @param {*} valTo
*/
between (valFrom, valTo) {
this._setValue({ between: [valFrom, valTo] })
return this._filter
}
/**
* In an array of values.
* @param {*} values
*/
inq (...values) {
this._setValue({ inq: values })
return this._filter
}
/**
* Not in an array of values.
* @param {*} values
*/
nin (...values) {
this._setValue({ nin: values })
return this._filter
}
/**
* For geolocations, return the closest points, sorted in order of distance.
* Use with limit to return the n closest points.
* maxDistance and unit can also be passed on same level as near to configure the search.
* @param {string} near
* @param {number} maxDistance
* @param {string} unit miles or meters. Default: miles
*/
near (near, maxDistance = null, unit = null) {
let value = near
if (maxDistance) {
value = Object.assign({}, { near, maxDistance })
}
if (unit) {
value = Object.assign({}, { near, maxDistance, unit })
}
this._setValue(value)
return this._filter
}
/**
* LIKE operators for use with regular expressions
* @param {string} value
*/
like (value) {
this._setValue({like: value})
return this._filter
}
/**
* NOT LIKE operators for use with regular expressions
* @param {string} value
*/
nlike (value) {
this._setValue({nlike: value})
return this._filter
}
/**
* Regular expression
* @param {string} regexp
*/
regexp (regexp) {
this._setValue({ regexp })
return this._filter
}
/**
* Sets the value to the filter builder
* @param {*} value
*/
_setValue (value) {
let fields = this._filter._where
if (this._filter._where.and !== undefined) {
fields = this._filter._where.and[this._filter._where.and.length - 1]
} else if (this._filter._where.or !== undefined) {
fields = this._filter._where.or[this._filter._where.or.length - 1]
}
for (var key of Object.keys(fields)) {
fields[key] = value
}
}
}