redink
Version:
RethinkDB model layer
201 lines (167 loc) • 11.8 kB
JavaScript
;
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==