Skip to content

Commit

Permalink
fix error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
rikukissa committed Jul 17, 2014
1 parent 52723fd commit 6f76821
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 36 deletions.
45 changes: 16 additions & 29 deletions src/index.coffee
Expand Up @@ -26,30 +26,17 @@ class Domo extends EventEmitter
warn: messaging.warn
say: messaging.say

join: (channel, cb) ->
@client.join channel, =>
cb.apply this, arguments if cb?

part: (channel, cb) ->
@client.part channel, =>
cb.apply this, arguments if cb?

load: (moduleName, cb) =>
try
module = require(moduleName)
catch err
msg = if err.code is 'MODULE_NOT_FOUND'
"Module #{moduleName} not found"
else
"Module #{moduleName} cannot be loaded"

@error msg
return cb?(msg)
@error err
return cb?(err)

if @modules.hasOwnProperty moduleName
msg = "Module #{moduleName} already loaded"
@error msg
return cb?(msg)
err = new Error "Module #{moduleName} already loaded"
@error err
return cb?(err)

module = module.call this, this if typeof module is 'function'

Expand Down Expand Up @@ -78,9 +65,9 @@ class Domo extends EventEmitter

stop: (mod, cb) =>
unless @modules.hasOwnProperty mod
msg = "Module #{mod} not loaded"
@error msg
return cb?(msg)
err = new Error "Module #{mod} not loaded"
@error err
return cb?(err)

delete require.cache[require.resolve(mod)]

Expand Down Expand Up @@ -109,8 +96,7 @@ class Domo extends EventEmitter
@notify "Connecting to server #{@config.address}."
@client = new irc.Client @config.address, @config.nick, @config

@client.addListener 'error', (msg) =>
@error msg
@client.addListener 'error', @error

@client.addListener 'registered', =>
@emit.apply this, ['registered'].concat arguments
Expand Down Expand Up @@ -169,18 +155,19 @@ class Domo extends EventEmitter

use: (mw) ->
return mw.init.call this if typeof mw is 'object'

@middlewares.push mw


authenticate: (res, next) ->
return @error "Tried to authenticate. No users configured" unless @config.users?
return @say res.nick, "You are already authed." if @authedClients.hasOwnProperty res.prefix
unless @config.users?
return @error new Error "Tried to authenticate. No users configured"

if @authedClients.hasOwnProperty res.prefix
return @say res.nick, "You are already authed."

user = res.user = _.findWhere(@config.users, {username: res.params.username, password: res.params.password})

unless user?
@error "User #{res.prefix} tried to authenticate with bad credentials"
@error new Error "User #{res.prefix} tried to authenticate with bad credentials"
return @say res.nick, "Authentication failed. Bad credentials."

@authedClients[res.prefix] = user
Expand All @@ -189,7 +176,7 @@ class Domo extends EventEmitter

requiresUser: (res, next) ->
unless res.user?
return @error "User #{res.prefix} tried to use '#{res.route}' route"
return @error new Error "User #{res.prefix} tried to use '#{res.route}' route"
next()

basicRoutes: require './lib/basic-routes'
Expand Down
11 changes: 9 additions & 2 deletions src/lib/basic-routes.coffee
Expand Up @@ -34,16 +34,23 @@ module.exports = ->
modules = res.splats[0].split(' ')
for module in modules
do (module) ->

@load module, (err) ->
return res.send err if err?
if err?
errorMsg = if err.code is 'MODULE_NOT_FOUND'
"Module #{moduleName} not found"
else
"Module #{moduleName} cannot be loaded"
return res.send errorMsg

res.send "Module '#{module}' loaded!"

@route '!stop :module', @requiresUser, (res) ->
modules = res.splats[0].split(' ')
for module in modules
do (module) ->
@stop module, (err) ->
return res.send err if err?
return res.send err.message if err?
res.send "Module '#{module}' stopped!"

@route '!reload', @requiresUser, (res) ->
Expand Down
4 changes: 2 additions & 2 deletions src/lib/messaging.coffee
@@ -1,8 +1,8 @@
colors = require 'colors'

module.exports =
error: (messages...) ->
console.log 'Error:'.red, messages.join('\n').red
error: (error) ->
console.log 'Error:'.red, error.message.red

notify: (messages...) ->
console.log 'Notify:'.green, messages.join('\n').green if @config.debug?
Expand Down
4 changes: 2 additions & 2 deletions test/messaging.coffee
Expand Up @@ -23,10 +23,10 @@ describe 'Domo messaging', ->

console.log = (prefix, message) ->
assert.equal prefix, 'Error:'.red
assert.equal message, 'foo\nbar\nbaz'.red
assert.equal message, 'foobar'.red
done()

domo.error('foo', 'bar', 'baz')
domo.error new Error 'foobar'

it 'should console.log warnings with color yellow', (done) ->
domo = new Domo()
Expand Down
2 changes: 1 addition & 1 deletion test/middlewareWrapper.coffee
Expand Up @@ -7,7 +7,7 @@ createRes = (msg) ->
args: ['#test', msg]
user: 'Test'
prefix: '!test@test.com'
message: message
message: msg

describe 'Middleware wrapper', ->

Expand Down

0 comments on commit 6f76821

Please sign in to comment.