colonizers/colonizers

View on GitHub
packages/colonizers-core/lib/game-objects/collections/queryable-collection.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

class QueryableCollection {
  constructor(clauses) {
    this.items = [];
    this.clauses = clauses;
  }

  push(item) {
    if (Array.isArray(item)) {
      this.items.push.apply(this, item);
    } else {
      this.items.push(item);
    }
  }

  forEach(callback, thisArg) {
    this.items.forEach(callback, thisArg);
  }

  map(map, thisArg) {
    return this.items.map(map, thisArg);
  }

  filter(filter, thisArg) {
    return this.items.filter(filter, thisArg);
  }

  all() {
    return this.items;
  }

  getById(id) {
    return this.items.find(item => item.id === id);
  }

  query(options) {
    var q = this.items;

    this.clauses.forEach(function(clause) {
      if (clause.valid(options)) {
        q = clause.filter(options, q);
      }
    });

    return q;
  }
}

module.exports = QueryableCollection;