UNPKG

redink

Version:
201 lines (167 loc) 11.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Resource = require('./Resource'); var _Resource2 = _interopRequireDefault(_Resource); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var ResourceArray = function () { /** * @class ResourceArray * @param {Object} conn * @param {Object} schema * @param {Array} records */ function ResourceArray(conn, schema, records) { _classCallCheck(this, ResourceArray); if (!conn) { throw new TypeError('A valid RethinkDB connection is required to instantiate a ResourceArray.'); } if (!schema) { throw new TypeError('A valid schema is required to instantiate a ResourceArray.'); } if (!records) { throw new TypeError('The \'records\' array is required to instantiate a ResourceArray.'); } if (!Array.isArray(records)) { throw new TypeError('The \'records\' argument must be an Array, instead had type \'' + (typeof records === 'undefined' ? 'undefined' : _typeof(records)) + '\'.'); } this.resources = records.map(function (record) { return new _Resource2.default(conn, schema, record); }); } /** * Returns the first resource. * * @method first * @return {Resource} */ _createClass(ResourceArray, [{ key: 'first', value: function first() { return this.resources[0]; } /** * Returns the last resource. * * @method last * @return {Resource} */ }, { key: 'last', value: function last() { return this.resources[this.resources.length - 1]; } /** * Maps over the resources and invokes `fn` with each individual `resource` as the argument. * * ``` * model('user').findRelated('1', 'pets').then(pets => { * return pets.map(pet => pet.update({ age: pet.attribute('age') + 1 })); * }).then(newPets => { * // ResourceArray * }); * ``` * * @method map * @param {Function} fn * @return {Array} */ }, { key: 'map', value: function map(fn) { return this.resources.map(fn); } /** * Invokes `fn` with each individual `resource` as the argument. * * ``` * model('user').findRelated('1', 'pets').then(pets => { * return pets.each(pet => pet.archive()); * }); * ``` * * @method fn * @param {Function} fn */ }, { key: 'forEach', value: function forEach(fn) { this.resources.forEach(fn); } /** * Returns the number of resources. * * @method size * @return {Number} */ }, { key: 'size', value: function size() { return this.resources.length; } /** * Returns true if the predicate function returns true for every resource. * * ``` * model('user').findRelated('1', 'pets').then(pets => { * return pets.every(pet => pet.attribute('species') === 'Dog'); * }).then(areAllPetsDogs => { * // Boolean * }); * ``` * * @method every * @param {Function} fn * @return {Boolean} */ }, { key: 'every', value: function every(fn) { return this.resoures.every(fn); } /** * Returns true if the predicate function returns true for any resource. * * @method some * @param {Function} fn * @return {Boolean} */ }, { key: 'some', value: function some(fn) { return this.resources.some(fn); } /** * Reduces this resource array. * * @param {Function} fn * @param {*} initialValue * @return {*} */ }, { key: 'reduce', value: function reduce(fn, initialValue) { return this.resources.reduce(fn, initialValue); } /** * Returns an array of plan `Resource` objects. * * @method toArray * @return {Array} */ }, { key: 'toArray', value: function toArray() { return this.resources.map(function (resource) { return resource.toObject(); }); } }]); return ResourceArray; }(); exports.default = ResourceArray; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9SZXNvdXJjZUFycmF5LmpzIl0sIm5hbWVzIjpbIlJlc291cmNlQXJyYXkiLCJjb25uIiwic2NoZW1hIiwicmVjb3JkcyIsIlR5cGVFcnJvciIsIkFycmF5IiwiaXNBcnJheSIsInJlc291cmNlcyIsIm1hcCIsInJlY29yZCIsImxlbmd0aCIsImZuIiwiZm9yRWFjaCIsInJlc291cmVzIiwiZXZlcnkiLCJzb21lIiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlIiwicmVzb3VyY2UiLCJ0b09iamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztJQUVxQkEsYTtBQUNuQjs7Ozs7O0FBTUEseUJBQVlDLElBQVosRUFBa0JDLE1BQWxCLEVBQTBCQyxPQUExQixFQUFtQztBQUFBOztBQUNqQyxRQUFJLENBQUNGLElBQUwsRUFBVztBQUNULFlBQU0sSUFBSUcsU0FBSixDQUNKLDBFQURJLENBQU47QUFHRDs7QUFFRCxRQUFJLENBQUNGLE1BQUwsRUFBYTtBQUNYLFlBQU0sSUFBSUUsU0FBSixDQUFjLDREQUFkLENBQU47QUFDRDs7QUFFRCxRQUFJLENBQUNELE9BQUwsRUFBYztBQUNaLFlBQU0sSUFBSUMsU0FBSixDQUFjLG1FQUFkLENBQU47QUFDRDs7QUFFRCxRQUFJLENBQUNDLE1BQU1DLE9BQU4sQ0FBY0gsT0FBZCxDQUFMLEVBQTZCO0FBQzNCLFlBQU0sSUFBSUMsU0FBSiw0RUFDaUVELE9BRGpFLHlDQUNpRUEsT0FEakUsV0FBTjtBQUdEOztBQUVELFNBQUtJLFNBQUwsR0FBaUJKLFFBQVFLLEdBQVIsQ0FBWTtBQUFBLGFBQVUsdUJBQWFQLElBQWIsRUFBbUJDLE1BQW5CLEVBQTJCTyxNQUEzQixDQUFWO0FBQUEsS0FBWixDQUFqQjtBQUNEOztBQUVEOzs7Ozs7Ozs7OzRCQU1RO0FBQ04sYUFBTyxLQUFLRixTQUFMLENBQWUsQ0FBZixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OzsyQkFNTztBQUNMLGFBQU8sS0FBS0EsU0FBTCxDQUFlLEtBQUtBLFNBQUwsQ0FBZUcsTUFBZixHQUF3QixDQUF2QyxDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFlSUMsRSxFQUFJO0FBQ04sYUFBTyxLQUFLSixTQUFMLENBQWVDLEdBQWYsQ0FBbUJHLEVBQW5CLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OzRCQVlRQSxFLEVBQUk7QUFDVixXQUFLSixTQUFMLENBQWVLLE9BQWYsQ0FBdUJELEVBQXZCO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OzsyQkFNTztBQUNMLGFBQU8sS0FBS0osU0FBTCxDQUFlRyxNQUF0QjtBQUNEOztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBZU1DLEUsRUFBSTtBQUNSLGFBQU8sS0FBS0UsUUFBTCxDQUFjQyxLQUFkLENBQW9CSCxFQUFwQixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7eUJBT0tBLEUsRUFBSTtBQUNQLGFBQU8sS0FBS0osU0FBTCxDQUFlUSxJQUFmLENBQW9CSixFQUFwQixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7MkJBT09BLEUsRUFBSUssWSxFQUFjO0FBQ3ZCLGFBQU8sS0FBS1QsU0FBTCxDQUFlVSxNQUFmLENBQXNCTixFQUF0QixFQUEwQkssWUFBMUIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7OEJBTVU7QUFDUixhQUFPLEtBQUtULFNBQUwsQ0FBZUMsR0FBZixDQUFtQjtBQUFBLGVBQVlVLFNBQVNDLFFBQVQsRUFBWjtBQUFBLE9BQW5CLENBQVA7QUFDRDs7Ozs7O2tCQWpKa0JuQixhIiwiZmlsZSI6IlJlc291cmNlQXJyYXkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2UgZnJvbSAnLi9SZXNvdXJjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc291cmNlQXJyYXkge1xuICAvKipcbiAgICogQGNsYXNzIFJlc291cmNlQXJyYXlcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbm5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICAgKiBAcGFyYW0ge0FycmF5fSByZWNvcmRzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25uLCBzY2hlbWEsIHJlY29yZHMpIHtcbiAgICBpZiAoIWNvbm4pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdBIHZhbGlkIFJldGhpbmtEQiBjb25uZWN0aW9uIGlzIHJlcXVpcmVkIHRvIGluc3RhbnRpYXRlIGEgUmVzb3VyY2VBcnJheS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIHZhbGlkIHNjaGVtYSBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBhIFJlc291cmNlQXJyYXkuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXFwncmVjb3Jkc1xcJyBhcnJheSBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBhIFJlc291cmNlQXJyYXkuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgVGhlICdyZWNvcmRzJyBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5LCBpbnN0ZWFkIGhhZCB0eXBlICcke3R5cGVvZiByZWNvcmRzfScuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHJlY29yZHMubWFwKHJlY29yZCA9PiBuZXcgUmVzb3VyY2UoY29ubiwgc2NoZW1hLCByZWNvcmQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCByZXNvdXJjZS5cbiAgICpcbiAgICogQG1ldGhvZCBmaXJzdFxuICAgKiBAcmV0dXJuIHtSZXNvdXJjZX1cbiAgICovXG4gIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IHJlc291cmNlLlxuICAgKlxuICAgKiBAbWV0aG9kIGxhc3RcbiAgICogQHJldHVybiB7UmVzb3VyY2V9XG4gICAqL1xuICBsYXN0KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1t0aGlzLnJlc291cmNlcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIG92ZXIgdGhlIHJlc291cmNlcyBhbmQgaW52b2tlcyBgZm5gIHdpdGggZWFjaCBpbmRpdmlkdWFsIGByZXNvdXJjZWAgYXMgdGhlIGFyZ3VtZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogbW9kZWwoJ3VzZXInKS5maW5kUmVsYXRlZCgnMScsICdwZXRzJykudGhlbihwZXRzID0+IHtcbiAgICogICByZXR1cm4gcGV0cy5tYXAocGV0ID0+IHBldC51cGRhdGUoeyBhZ2U6IHBldC5hdHRyaWJ1dGUoJ2FnZScpICsgMSB9KSk7XG4gICAqIH0pLnRoZW4obmV3UGV0cyA9PiB7XG4gICAqICAgLy8gUmVzb3VyY2VBcnJheVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBtZXRob2QgbWFwXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgbWFwKGZuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLm1hcChmbik7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyBgZm5gIHdpdGggZWFjaCBpbmRpdmlkdWFsIGByZXNvdXJjZWAgYXMgdGhlIGFyZ3VtZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogbW9kZWwoJ3VzZXInKS5maW5kUmVsYXRlZCgnMScsICdwZXRzJykudGhlbihwZXRzID0+IHtcbiAgICogICByZXR1cm4gcGV0cy5lYWNoKHBldCA9PiBwZXQuYXJjaGl2ZSgpKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAbWV0aG9kIGZuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdGhpcy5yZXNvdXJjZXMuZm9yRWFjaChmbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlc291cmNlcy5cbiAgICpcbiAgICogQG1ldGhvZCBzaXplXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGV2ZXJ5IHJlc291cmNlLlxuICAgKlxuICAgKiBgYGBcbiAgICogbW9kZWwoJ3VzZXInKS5maW5kUmVsYXRlZCgnMScsICdwZXRzJykudGhlbihwZXRzID0+IHtcbiAgICogICByZXR1cm4gcGV0cy5ldmVyeShwZXQgPT4gcGV0LmF0dHJpYnV0ZSgnc3BlY2llcycpID09PSAnRG9nJyk7XG4gICAqIH0pLnRoZW4oYXJlQWxsUGV0c0RvZ3MgPT4ge1xuICAgKiAgIC8vIEJvb2xlYW5cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAbWV0aG9kIGV2ZXJ5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBldmVyeShmbikge1xuICAgIHJldHVybiB0aGlzLnJlc291cmVzLmV2ZXJ5KGZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFueSByZXNvdXJjZS5cbiAgICpcbiAgICogQG1ldGhvZCBzb21lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBzb21lKGZuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLnNvbWUoZm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZXMgdGhpcyByZXNvdXJjZSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHsqfSBpbml0aWFsVmFsdWVcbiAgICogQHJldHVybiB7Kn1cbiAgICovXG4gIHJlZHVjZShmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLnJlZHVjZShmbiwgaW5pdGlhbFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBsYW4gYFJlc291cmNlYCBvYmplY3RzLlxuICAgKlxuICAgKiBAbWV0aG9kIHRvQXJyYXlcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcy5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2UudG9PYmplY3QoKSk7XG4gIH1cbn1cbiJdfQ==