1 |
|
2 |
|
3 |
|
4 |
|
5 | 'use strict';
|
6 | const Helpers = require('./Helpers');
|
7 |
|
8 | class Cursor extends Array {
|
9 | constructor () {
|
10 | super();
|
11 | }
|
12 |
|
13 | |
14 |
|
15 |
|
16 | has (doc) {
|
17 | return !(this.indexOf(doc) <= -1);
|
18 | }
|
19 |
|
20 | |
21 |
|
22 |
|
23 | add (docs = []) {
|
24 | Array.prototype.push.apply(this, (Array.isArray(docs) ? docs : [docs]).filter((doc) => {
|
25 | return doc.isDocument && !this.has(doc);
|
26 | }));
|
27 |
|
28 | return this;
|
29 | }
|
30 |
|
31 | |
32 |
|
33 |
|
34 | empty () {
|
35 | return !(this.length >= 1);
|
36 | }
|
37 |
|
38 | |
39 |
|
40 |
|
41 | sort (sort = {}) {
|
42 | let obj = Helpers.is(sort, 'Object') ? sort : { default: sort };
|
43 | Object.keys(obj).forEach((key, idx) => {
|
44 | Array.prototype.sort.call(this, (a, b) => {
|
45 | let vals = (Helpers.is(a.value, 'Object') && Helpers.is(b.value, 'Object')) ? Helpers.dotNotation(key, [a.value, b.value]) : [a, b];
|
46 | return (vals[0] < vals[1]) ? -1 : ((vals[0] > vals[1]) ? 1 : 0);
|
47 | })[obj[key] === -1 ? 'reverse' : 'valueOf']().forEach((val, idx2) => {
|
48 | return this[idx2] = val;
|
49 | });
|
50 | });
|
51 | return this;
|
52 | }
|
53 |
|
54 | |
55 |
|
56 |
|
57 | limit (num = false) {
|
58 | return Helpers.is(num, 'Number') ? this.slice(0, num) : this;
|
59 | }
|
60 |
|
61 | |
62 |
|
63 |
|
64 | get [Symbol.toStringTag]() {
|
65 | return (this.constructor.name || 'Cursor');
|
66 | }
|
67 | }
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | module.exports = Cursor;
|