UNPKG

@qelos/assets

Version:

manage assets like images and static files on remote servers

115 lines (90 loc) 2.4 kB
const api = require('./api'); const {isEmpty, isNumber} = require('../utils'); const Search = class Search { constructor() { this.query_hash = { sort_by: [], aggregate: [], with_field: [] }; } static instance() { return new Search(); } static expression(value) { return this.instance().expression(value); } static max_results(value) { return this.instance().max_results(value); } static next_cursor(value) { return this.instance().next_cursor(value); } static aggregate(value) { return this.instance().aggregate(value); } static with_field(value) { return this.instance().with_field(value); } static sort_by(field_name, dir = 'asc') { return this.instance().sort_by(field_name, dir); } expression(value) { this.query_hash.expression = value; return this; } max_results(value) { this.query_hash.max_results = value; return this; } next_cursor(value) { this.query_hash.next_cursor = value; return this; } aggregate(value) { const found = this.query_hash.aggregate.find(v => v === value); if (!found) { this.query_hash.aggregate.push(value); } return this; } with_field(value) { const found = this.query_hash.with_field.find(v => v === value); if (!found) { this.query_hash.with_field.push(value); } return this; } sort_by(field_name, dir = "desc") { let sort_bucket; sort_bucket = {}; sort_bucket[field_name] = dir; // Check if this field name is already stored in the hash const previously_sorted_obj = this.query_hash.sort_by.find((sort_by) => sort_by[field_name]); // Since objects are references in Javascript, we can update the reference we found // For example, if (previously_sorted_obj) { previously_sorted_obj[field_name] = dir; } else { this.query_hash.sort_by.push(sort_bucket); } return this; } to_query() { Object.keys(this.query_hash).forEach((k) => { let v = this.query_hash[k]; if (!isNumber(v) && isEmpty(v)) { delete this.query_hash[k]; } }); return this.query_hash; } execute(options, callback) { if (callback === null) { callback = options; } options = options || {}; return api.search(this.to_query(), options, callback); } }; module.exports = Search;