/** * A fluent interace for creating queries against resourceful endpoints * <p>It is not intended that this class will be used on its own by end users. * Instead, require it from {@link Query} as in the below example. * * @param {string} field - The field name to set criteria against * * @example * import { where, field } from '@pikselpalette/sequoia-js-client-sdk/lib/query'; * * where(field('title').notEqualTo('foo')).and(field("startedAt").lessThan("2014")) */ class Predications { constructor(field, raw = false) { if (raw) { this.field = field; } else { this.field = `with${field.charAt(0).toUpperCase()}${field.slice(1)}`; } } /** * Generates a url encoded criteria expression equivalent to: `field=value` * * @param {string} value - value for this predicate * * @example * field('engine').equalTo('diesel'); // returns 'engine=diesel' * * @returns {string} */ equalTo(value) { return `${this.field}=${value}`; } /** * Generates a url encoded criteria expression equivalent to: `field=!value` * * @param {string} value - value for this predicate * * @example * field('engine').notEqualTo('diesel'); // returns 'engine=!diesel' * * @returns {string} */ notEqualTo(value) { return `${this.field}=!${value}`; } /** * Generates a url encoded criteria expression equivalent to: `field=value1||value2` * * @param {...string} value - value(s) for this predicate * * @example * field('engine').oneOrMoreOf('diesel', 'petrol'); // returns 'engine=diesel||petrol' * * @returns {string} */ oneOrMoreOf(...value) { return `${this.field}=${value.join('||')}`; } /** * Generates a url encoded criteria expression equivalent to: `field=value*` * * @param {string} value - value for this predicate * * @example * field('engine').startsWith('diesel'); // returns 'engine=diesel*' * * @returns {string} */ startsWith(value) { return `${this.field}=${value}*`; } /** * Generates a url encoded criteria expression equivalent to: `field=*` * * @example * field('engine').exists(); // returns 'engine=*' * * @returns {string} */ exists() { return `${this.field}=*`; } /** * Generates a url encoded criteria expression equivalent to: `field=!*` * * @example * field('engine').notExists(); // returns 'engine=!*' * * @returns {string} */ notExists() { return `${this.field}=!*`; } /** * Generates a url encoded criteria expression equivalent to: `field=start/end` * * @param {(string|number)} start - start value for this predicate * @param {(string|number)} end - end value for this predicate * * @example * field('startedAt').between('2014', '2015'); // returns 'startedAt=2014/2015' * * @returns {string} */ between(start, end) { return `${this.field}=${start}/${end}`; } /** * Generates a url encoded criteria expression equivalent to: `field=!start/end` * * @param {(string|number)} start - start value for this predicate * @param {(string|number)} end - end value for this predicate * * @example * field('startedAt').notBetween('2014', '2015'); // returns 'startedAt=!2014/2015' * * @returns {string} */ notBetween(start, end) { return `${this.field}=!${start}/${end}`; } /** * Generates a url encoded criteria expression equivalent to: `field=!value/` * * @param {(string|number)} value - value for this predicate * * @example * field('startedAt').lessThan(2015); // returns 'engine=!2015/' * * @returns {string} */ lessThan(value) { return `${this.field}=!${value}/`; } /** * Generates a url encoded criteria expression equivalent to: `field=/value` * * @param {(string|number)} value - value for this predicate * * @example * field('startedAt').lessThanOrEqualTo(2015); // returns 'startedAt=/2015' * * @returns {string} */ lessThanOrEqualTo(value) { return `${this.field}=/${value}`; } /** * Generates a url encoded criteria expression equivalent to: `field=!/value` * * @param {(string|number)} value - value for this predicate * * @example * field('startedAt').greaterThan(2015); // returns 'startedAt=!/2015' * * @returns {string} */ greaterThan(value) { return `${this.field}=!/${value}`; } /** * Generates a url encoded criteria expression equivalent to: `field=value/` * * @param {(string|number)} value - value for this predicate * * @example * field('startedAt').greaterThanOrEqualTo(2015); // returns 'startedAt=2015/' * * @returns {string} */ greaterThanOrEqualTo(value) { return `${this.field}=${value}/`; } } export default Predications;