diff --git a/component.json b/component.json index 1aee2ff..3aac387 100644 --- a/component.json +++ b/component.json @@ -5,6 +5,7 @@ "version": "0.0.1", "keywords": ["enumerable", "data", "model", "db"], "dependencies": { + "component/emitter": "*", "component/enumerable": "*" }, "development": {}, diff --git a/index.js b/index.js index 96f8077..60cf5a6 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,8 @@ * Module dependencies. */ -var Enumerable = require('enumerable'); +var Emitter = require('emitter') + , Enumerable = require('enumerable'); /** * Expose `Collection`. @@ -22,6 +23,12 @@ function Collection(models) { this.models = models || []; } +/** + * Mixin emitter. + */ + +Emitter(Collection.prototype); + /** * Mixin enumerable. */ @@ -59,6 +66,26 @@ Collection.prototype.length = function(){ * @api public */ +Collection.prototype.add = Collection.prototype.push = function(model){ - return this.models.push(model); + var length = this.models.push(model); + this.emit('add', model); + return length; +}; + +/** + * Remove `model` from the collection, returning `true` when present, + * otherwise `false`. + * + * @param {Object} model + * @api public + */ + +Collection.prototype.remove = function(model){ + var i = this.indexOf(model); + if (~i) { + this.models.splice(i, 1); + this.emit('remove', model); + } + return !! ~i; };