UNPKG

swoosh

Version:

A quick declarative way to use a mongodb backend.

99 lines (81 loc) 2.25 kB
mongoose = require 'mongoose' module.exports = (name, attributes, methods, publicAttr, root) -> getPub = (entity) -> if publicAttr then generated.pub entity else entity generated = {} pub = false schema = new mongoose.Schema(attributes) generated.model = mongoose.model(name, schema) if publicAttr generated.pub = (entity) -> retval = {} for x in publicAttr retval[x] = entity[x] retval generated.get = (id, fn) -> cb = fn ? -> if id generated.model.findById id, (err, entity) -> if err then cb err else cb null, entity else generated.model.find {}, (err, entitys) -> if err then cb err else cb null, entitys generated.post = (data, fn) -> cb = fn ? -> posting = new generated.model(data) posting.save (err) -> if err cb err else cb null, posting generated.put = (id, data, fn) -> cb = fn ? -> generated.model.findById id, (err, entity) -> if err then cb err else for attr of data entity[attr] = data[attr] entity.save (err) -> if err then cb err else cb null, entity generated.delete = (id, fn) -> cb = fn ? -> if id generated.model.remove { _id: id }, (err) -> cb(err) else cb "No id specified" generated.route = (app) -> if "get" in methods app.get "/#{root}/#{name}/:id?", (req, res) -> generated.get req.params.id, (err, response) -> if err res.send 500, err else if req.params.id res.send getPub(response) else res.send ( for x in response getPub x) if "post" in methods app.post "/#{root}/#{name}", (req, res) -> generated.post req.body, (err, response) -> if err res.send 500, err else res.send getPub(response) if "put" in methods app.put "/#{root}/#{name}/:id", (req, res) -> generated.put req.params.id, req.body, (err, response) -> if err res.send 500, err else res.send response if "delete" in methods app.delete "/#{root}/#{name}/:id", (req, res) -> generated.delete req.params.id, (err) -> if err res.send 500, err else res.send 200 generated