@zoranwong/acc-engine.js
Version:
A javascript framework to accelerate your applicatin developement
94 lines (84 loc) • 2.58 kB
JavaScript
import {
isFunction,
filter,
first, isArray
} from 'underscore';
export default class Collection {
items = [];
constructor (items = []) {
if (items instanceof Collection) {
items = items.items;
}
if (items)
this.items = items;
}
#where (...params) {
if (params.length === 1) {
let callback = params[0];
if (isFunction(callback)) {
return filter(this.items, callback);
}
} else if (params.length === 2) {
let [key, value] = params;
return filter(this.items, (model) => {
return model[key] === value;
})
} else if (params.length === 3) {
let [key, operator, value] = params;
return filter(this.items, (model) => {
let result = false;
switch (operator) {
case '=':
result = model[key] === value;
break;
case '>':
result = model[key] > value;
break;
case '>=':
result = model[key] >= value;
break;
case '<':
result = model[key] < value;
break;
case '<=':
result = model[key] <= value;
break;
case 'between':
result = (model[key] >= value[0] && model[key] < value[1])
break;
case 'in':
result = value.includes(model[key]);
break;
case 'not in':
result = !value.includes(model[key]);
break;
}
return result;
})
}
return this.items;
}
where (...params) {
return new Collection(this.#where(...params));
}
find (...params) {
if (params.length === 1) {
params.push('id');
}
return first(this.#where(...params));
}
first (...params) {
return first(this.#where(...params));
}
concat (...params) {
params.forEach((param) => {
if (!isArray(param)) {
param = [param];
}
this.items.concat(param);
});
}
push (...params) {
this.items.concat(params);
}
}