/** * Expose `Collection`. */ module.exports = Collection; /** * Module dependencies. */ var Resource = require('resource').Resource , debug = require('debug')('collection') , util = require('util') , inherits = util.inherits , assert = require('assert'); /** * Create a new `Collection` with the given `options`. * * @param {Object} options * @return {Collection} */ function Collection(options) { Resource.apply(this, arguments); this.options = options; // collection middleware this.app.use(function (req, res, next) { req.asyncEmit('request', next); }); // setup http routes // this.setupRoutes(this.app); debug('created with options', options); } /** * Inherit from `Resource`. */ inherits(Collection, Resource); /** * Dependencies. */ Collection.dependencies = { 'store': 'store' } Collection.prototype.setupRoutes = function (app) { var store = this.store; var done = this.done; var Model = this.store; var emit = this.asyncEmit; // create app.post('/', create); app.post('/new', create); function create(req, res, next) { req.asyncEmit('create', function () { var o = store.save(req.body, res.done); }); } // read app.get('/:id', query); app.get('/', query); function query(req, res, next) { var query = req.query; query.where = query.where || {}; if(req.param('id')) { query.where.id = req.param('id'); } if(query.where.id) { query.limit = 1; } req.asyncEmit('query', query, function () { store.all(query, res.done); }); } // update app.put('/:id', function (req, res) { req.asyncEmit('update', req.body, function () { store.updateAttributes(req.body, res.done); }); }); // delete app.destroy('/:id', function () { var id = req.param('id'); req.asyncEmit('delete', id, function () { store.destroy(id, res.done); }); }); }