src/collection/RestQueryBuilder.js
import URI from "urijs";
export default class RestQueryBuilder {
constructor() {
this.filter = { };
}
toString() {
return Object.keys(this.filter)
.reduce( (memo, n, v) => {
return `'${memo}${memo.length ?', ' :''}${n}=${v}`;
}, "");
// return reduce(this.filter, (memo, n, v) => {
// return `'${memo}${memo.length ?', ' :''}${n}=${v}`;
// }, "");
}
/**
Updates the collection URL instance variable.
Note: This method will permanently overwrite the currently set URL.
*/
applyFilter(url) {
const uri = new URI(url);
uri.setSearch(this.filter);
return uri.toString();
}
/*
Adds a pameter name/value pair to the URL query string.
*/
equals(name, value) {
this.filter[name] = value;
return this;
}
/*
Adds a pameter name/value pair to the URL query string of the form: name=gt(value).
*/
gt(name, value) {
return this.filterOp(name, 'gt', value);
}
/*
Adds a pameter name/value pair to the URL query string of the form: name=gte(value).
*/
gte(name, value) {
return this.filterOp(name, 'gte', value);
}
/*
Adds a pameter name/value pair to the URL query string of the form: name=lt(value).
*/
lt(name, value) {
return this.filterOp(name, 'lt', value);
}
/*
Adds a pameter name/value pair to the URL query string of the form: name=lte(value).
*/
lte(name, value) {
return this.filterOp(name, 'lte', value);
}
/*
Adds a pameter name/value pair to the URL query string of the form: name=op(value).
*/
filterOp(name, op, value) {
this.filter[name] = `${op}(${value})`;
return this;
}
}