nodulator
Version:
Nodulator ============
98 lines (71 loc) • 2.62 kB
text/coffeescript
_ = require 'underscore'
class Route
apiVersion: '/api/1/'
constructor: (, , ) ->
= .lname + 's'
()
Add: (type, url, middle..., done) ->
if not done?
done = url
url = '/'
done = type, url, done
if not @[type + url]?
@[type + url] = done
if middle.length
middle.push (req, res, next) => @[type + url](req, res, next)
.route( + + url)[type].apply .route( + + url), middle
else
.route( + + url)[type] (req, res, next) => @[type + url](req, res, next)
else
@[type + url] = done
_AddMiddleware: (type, url, done) ->
if !?
return done
for element, content of
if typeof content is 'function'
done = content done
else if typeof content is 'object' and not content.prototype
for method, wrapper of content
if method == type
done = wrapper done
else
method = method.split('-')
if method.length > 1
if method[0] == type and method[1] == url
done = wrapper done
else if method[0] == type
done = wrapper done
done
Config: ->
class DefaultRoute extends Route
Config: ->
'all', '/:id*', (req, res, next) =>
if not isFinite req.params.id
return next()
.Fetch req.params.id, (err, result) =>
return res.status(500).send(err) if err?
req[.lname] = result
next()
'get', (req, res) =>
.List (err, results) ->
return res.status(500).send(err) if err?
res.status(200).send _(results).invoke 'ToJSON'
'get', '/:id', (req, res) =>
res.status(200).send req[.lname].ToJSON()
'post', (req, res) =>
.Deserialize req.body, (err, result) ->
return res.status(500).send(err) if err?
result.Save (err) ->
return res.status(500).send(err) if err?
res.status(200).send result.ToJSON()
'put', '/:id', (req, res) =>
_(req[.lname]).extend req.body
req[.lname].Save (err) =>
return res.status(500).send(err) if err?
res.status(200).send req[.lname].ToJSON()
'delete', '/:id', (req, res) =>
req[.lname].Delete (err) ->
return res.status(500).send(err) if err?
res.status(200).end()
Route.DefaultRoute = DefaultRoute
module.exports = Route