colonizers/colonizers-core

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

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

var _ = require('underscore');

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 _.find(this.items, function(item) {
      return 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;