Skip to content

Commit

Permalink
adds initializers
Browse files Browse the repository at this point in the history
  • Loading branch information
minibikini committed Feb 17, 2014
1 parent db444ed commit 1ddabdb
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 16 deletions.
88 changes: 74 additions & 14 deletions lib/AppSpine.coffee
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
colors = require('colors')
EventEmitter2 = require('eventemitter2').EventEmitter2
tracer = require('tracer')
tracer = require 'tracer'
typeOf = require 'typeof'
async = require 'async'

loggerColorFilters =
# log : colors.black,
trace : colors.magenta,
debug : colors.blue,
info : colors.green,
warn : colors.yellow,
error : [ colors.red, colors.bold ]
loggerColorFilters = require './loggerColorFilters'

module.exports = class AppSpine extends EventEmitter2
logger: null
Expand All @@ -17,6 +12,7 @@ module.exports = class AppSpine extends EventEmitter2
@config.emitter ?= {}
super @config.emitter
@setupLogger()
@init() if @config.initializers?

getEnvironment: ->
@config.env or process.env.NODE_ENV or 'development'
Expand All @@ -42,17 +38,81 @@ module.exports = class AppSpine extends EventEmitter2
isProd: ->
@isProduction()

configure: (env, fn) ->
fn() if @getEnvironment() is env
configure: (env..., fn) ->
fn() if @getEnvironment() in env

require: (path) ->
require(path)(@)

setupLogger: ->
@config.logger ?= {}
@config.logger.format ?= "[{{title}}] {{timestamp}} ({{file}}:{{line}}): {{message}}"
@config.logger.filters ?= loggerColorFilters
@config.logger.format ?= require './loggerFormat'
@config.logger.filters ?= require './loggerColorFilters'
@config.logger.dateformat ?= "HH:MM:ss"
@config.logger.level ?= if @isDev() then 'log' else 'warn'

@logger = tracer.colorConsole @config.logger
@logger = tracer.colorConsole @config.logger

init: (initializers, cb) ->
start = Date.now()

switch arguments.length
when 0
initializers = @config.initializers
cb = ->
when 1
if typeOf(arguments[0]) is 'function' and @config.initializers?
initializers = @config.initializers
cb = arguments[0]
else if typeOf(arguments[0]) is 'object'
initializers = arguments[0]
cb = ->

@_initializers = initializers

wrap = (name, fn) =>
(done) =>
initStart = Date.now()
fn (err) =>
return done(err) if err?
@logger.info "#{name} is ready (#{Date.now() - initStart} ms)"
done()

tasks = {}

for name, initializer of initializers
tasks[name] = switch typeOf initializer
when 'function' then wrap name, initializer
when 'object'
fn = wrap name, initializer.init

if initializer.depend?
initializer.depend.concat [fn]
else
fn


async.auto tasks, (err) =>
return @logger.error err if err?
@logger.info "Application is ready (#{Date.now() - start} ms)"
@emit 'ready'
cb()

close: (cb = ->) ->
return unless @_initializers?
tasks = []

addTask = (name, initializer) =>
tasks.push (done) =>
start = Date.now()
initializer.close (err) =>
@logger.trace "#{name} has been closed (#{Date.now() - start} ms)"
done err

for name, initializer of @_initializers when initializer.close?
addTask name, initializer

async.parallel tasks, (err) =>
cb(err)
@logger.error err if err?

9 changes: 9 additions & 0 deletions lib/loggerColorFilters.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
colors = require 'colors'

module.exports =
# log : colors.black,
trace : colors.magenta,
debug : colors.blue,
info : colors.green,
warn : colors.yellow,
error : [ colors.red, colors.bold ]
7 changes: 7 additions & 0 deletions lib/loggerFormat.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
full = "[{{title}}] {{timestamp}} ({{file}}:{{line}}) {{message}}"
short = "[{{title}}] {{timestamp}} {{message}}"

module.exports = [
full,
info: short
]
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "appspine",
"version": "0.0.3",
"version": "0.0.4",
"description": "node.js application namespace base class",
"keywords": [
"application",
Expand Down Expand Up @@ -28,6 +28,8 @@
"coffee-script": "~1.7.1",
"eventemitter2": "~0.4.13",
"tracer": "~0.6.2",
"colors": "~0.6.2"
"colors": "~0.6.2",
"async": "~0.2.10",
"typeof": "~1.0.0"
}
}

0 comments on commit 1ddabdb

Please sign in to comment.