pages
Version:
AngularJS / Node.js sidekick.
92 lines (53 loc) • 2.58 kB
text/coffeescript
express = require 'express'
async = require 'async'
readdirp = require 'readdirp'
uuid = require 'node-uuid'
connect = require 'connect'
utils = require './utils'
modulesAppPath = "#{process.cwd()}/server_modules"
modulesRunner =
files: []
fns: []
befores: []
afters: []
expressApp = undefined
serverStarting = (app, cb) ->
expressApp = app
findModules () -> determineModuleTypes (indexModExists, indexMod) -> requireModules indexModExists, indexMod, () -> cb()
serverStarted = () -> mod.after expressApp for mod in modulesRunner.afters
findModules = (cb) ->
utils.listFiles modulesAppPath, '.litcoffee', (files) ->
Array::push.apply modulesRunner.files, files
cb()
determineModuleTypes = (cb) ->
indexModExists = false
for mod in modulesRunner.files
if mod.indexOf('index.litcoffee') isnt -1 and mod.replace("#{process.cwd()}/server_modules/", '').indexOf('/') is -1
indexModExists = true
indexMod = require mod
modulesRunner.afters.push indexMod if typeof indexMod is 'object' and indexMod.after
else
if mod.replace("#{process.cwd()}/server_modules/", '').indexOf('/') is -1
requiredMod = require mod
modulesRunner.fns.push requiredMod if typeof requiredMod is 'function'
modulesRunner.befores.push requiredMod if typeof requiredMod is 'object' and requiredMod.before
modulesRunner.afters.push requiredMod if typeof requiredMod is 'object' and requiredMod.after
cb indexModExists, indexMod
Run `index` module first (if available), then run modules alphabetically. Assume `index` is not a _function_, and has _both_ `before` and `after` declared.
requireModules = (indexModExists, indexMod, cb) ->
runner = (done) -> runFunctionModules () -> runBeforeModules () -> done()
if indexModExists
indexMod.before expressApp, () -> runner cb
return
runner cb
`function` _Server Modules_.
executeFnModule = (mod, cb) -> mod expressApp, cb
runFunctionModules = (cb) -> async.every modulesRunner.fns, executeFnModule, () -> cb()
`before` _Server Modules_.
executeBeforeModule = (mod, cb) -> mod.before expressApp, cb
runBeforeModules = (cb) -> async.every modulesRunner.befores, executeBeforeModule, () -> cb()
## Public API ##
publicFns =
serverStarting: serverStarting
serverStarted: serverStarted
module.exports = publicFns