Jump To …

error.coffee

validator = require "./validator"

class error extends Error
	constructor: () ->
		Error.call @
		Error.captureStackTrace && Error.captureStackTrace @, arguments.callee
		@ok = false
		@name = 'EveError'
		@_messages = []
		@_hasChildren = false
		@_children = {}

	toString: () -> @name + ': ' + @message
	alias: (name) -> @_alias = name
	push: ( msg ) ->
		@_messages.push msg
		@message = @concat @message, (if @_alias then @_alias + " " else "") + msg
		@ok = true

	on: ( key, er ) ->
		l = arguments.length
		return @_children[ key ] || null if l == 1
		if er instanceof error
			@_hasChildren = true
			@ok = er.ok if !@ok
			@_children[ key ] = er
			@message = @concat @message, er.message

	at: on

	messages: ( withoutName ) ->
		messages = []
		name = if withoutName then '' else @_alias || ''
		name = if name then name + " " else ""
		messages.push( name + msg ) for msg in @_messages
		if ( @_hasChildren )
			@merge messages, val.messages(withoutName) for key, val of @_children
		if messages.length then messages else null

	concat: (s1, s2) -> if s1 && s2 then s1 + "\n" + s2 else s1 || s2
	merge: (ar1, ar2) ->
		return if !ar2
		ar1.push val for val in ar2

module.exports = error