nodulator
Version:
Nodulator ============
169 lines (122 loc) • 3.34 kB
text/coffeescript
_ = require 'underscore'
fs = require 'fs'
path = require 'path'
http = require 'http'
jade = require 'jade'
express = require 'express'
passport = require 'passport'
bodyParser = require 'body-parser'
expressSession = require 'express-session'
RedisStore = require('connect-redis')(expressSession)
#FIXME: Hack to prevent EADDRINUSE from mocha
port = 3000
class Nodulator
app: null
express: null
server: null
resources: {}
directives: {}
routes: {}
config: null
table: null
authApp: false
defaultConfig:
dbType: 'SqlMem'
constructor: ->
Init: ->
= path.resolve '.'
= express
=
.use bodyParser.urlencoded
extended: true
.use bodyParser.json
extended: true
= http.createServer
= new RedisStore
host: 'localhost'
.use expressSession
key: 'Nodulator'
secret: 'Nodulator'
store:
resave: true
saveUninitialized: true
= passport
.use .initialize()
.listen port++
= require('./connectors/sql')
Resource: (name, routes, config, _parent) ->
name = name.toLowerCase()
if name is 'user'
throw new Error 'Resource name \'user\' is reserved'
if [name]?
return [name]
if routes? and not routes.prototype
config = routes
routes = null
if !(?) # config of Nodulator instance
if not routes? or routes.prototype not instanceof
routes =
if _parent?
[name] = resource = _parent
[name]._PrepareResource , config, , routes, name
else
table = null
if not config? or (config? and not config.abstract)
table =
[name] = resource =
require('./Resource')(table, config, , routes, name)
resource
Config: () ->
= if !(?)
for k, v of
[k] = v if not [k]?
= .table
Use: (module) ->
module @
ExtendDefaultConfig: (config) ->
= _().extend config
ExtendRunProcess: (process) ->
oldRun =
= =>
process()
oldRun.call @
bus: require './Bus'
Route: require './Route'
Reset: (done) ->
if not ?
done() if done?
return
= {}
= null
= null
._reset() if ?
done() if done?
ListEndpoints: (done) ->
endpoints = []
for endpoint in ._router.stack
if endpoint.route?
res = {}
res[endpoint.route.path] = key for key of endpoint.route.methods
endpoints.push res
done(endpoints) if done?
# Used when bootstrapped
Run: ->
if not ?
return
# FIXME: ugly fix for favicon
.get '/favicon.ico', (req, res) =>
res.status(200).end()
.get '*', (req, res) =>
u = user: {}
if
rend = 'auth'
if req.user?
u.user = req.user
rend = 'index'
else
rend = 'index'
res.render rend, u
module.exports = new Nodulator