UNPKG

swoosh

Version:

A quick declarative way to use a mongodb backend.

157 lines (154 loc) 4.29 kB
// Generated by CoffeeScript 1.6.3 var mongoose, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; mongoose = require('mongoose'); module.exports = function(name, attributes, methods, publicAttr, root) { var generated, getPub, pub, schema; getPub = function(entity) { if (publicAttr) { return generated.pub(entity); } else { return entity; } }; generated = {}; pub = false; schema = new mongoose.Schema(attributes); generated.model = mongoose.model(name, schema); if (publicAttr) { generated.pub = function(entity) { var retval, x, _i, _len; retval = {}; for (_i = 0, _len = publicAttr.length; _i < _len; _i++) { x = publicAttr[_i]; retval[x] = entity[x]; } return retval; }; } generated.get = function(id, fn) { var cb; cb = fn != null ? fn : function() {}; if (id) { return generated.model.findById(id, function(err, entity) { if (err) { return cb(err); } else { return cb(null, entity); } }); } else { return generated.model.find({}, function(err, entitys) { if (err) { return cb(err); } else { return cb(null, entitys); } }); } }; generated.post = function(data, fn) { var cb, posting; cb = fn != null ? fn : function() {}; posting = new generated.model(data); return posting.save(function(err) { if (err) { return cb(err); } else { return cb(null, posting); } }); }; generated.put = function(id, data, fn) { var cb; cb = fn != null ? fn : function() {}; return generated.model.findById(id, function(err, entity) { var attr; if (err) { return cb(err); } else { for (attr in data) { entity[attr] = data[attr]; } return entity.save(function(err) { if (err) { return cb(err); } else { return cb(null, entity); } }); } }); }; generated["delete"] = function(id, fn) { var cb; cb = fn != null ? fn : function() {}; if (id) { return generated.model.remove({ _id: id }, function(err) { return cb(err); }); } else { return cb("No id specified"); } }; generated.route = function(app) { if (__indexOf.call(methods, "get") >= 0) { app.get("/" + root + "/" + name + "/:id?", function(req, res) { return generated.get(req.params.id, function(err, response) { var x; if (err) { return res.send(500, err); } else if (req.params.id) { return res.send(getPub(response)); } else { return res.send((function() { var _i, _len, _results; _results = []; for (_i = 0, _len = response.length; _i < _len; _i++) { x = response[_i]; _results.push(getPub(x)); } return _results; })()); } }); }); } if (__indexOf.call(methods, "post") >= 0) { app.post("/" + root + "/" + name, function(req, res) { return generated.post(req.body, function(err, response) { if (err) { return res.send(500, err); } else { return res.send(getPub(response)); } }); }); } if (__indexOf.call(methods, "put") >= 0) { app.put("/" + root + "/" + name + "/:id", function(req, res) { return generated.put(req.params.id, req.body, function(err, response) { if (err) { return res.send(500, err); } else { return res.send(response); } }); }); } if (__indexOf.call(methods, "delete") >= 0) { return app["delete"]("/" + root + "/" + name + "/:id", function(req, res) { return generated["delete"](req.params.id, function(err) { if (err) { return res.send(500, err); } else { return res.send(200); } }); }); } }; return generated; };