1
0
mirror of https://github.com/JuanCanham/HackMyResume.git synced 2025-05-03 04:47:07 +01:00

Improve VALIDATE error handling.

This commit is contained in:
hacksalot
2016-02-13 00:11:52 -05:00
parent c889664c31
commit dbef9f0a35
10 changed files with 62 additions and 38 deletions

View File

@ -222,6 +222,10 @@ assembleError = ( ex ) ->
msg = printf M2C( this.msgs.createError.msg ), ex.inner.path
etype = 'error'
when HMSTATUS.validateError
msg = printf M2C( @msgs.validateError.msg ), ex.inner.toString()
etype = 'error'
msg: msg # The error message to display
withStack: withStack # Whether to include the stack
quit: quit

View File

@ -44,7 +44,7 @@ events:
- "INVALID"
- "BROKEN"
- "MISSING"
- "UNKNOWN"
- "ERROR"
beforePeek:
msg:
- Peeking at **%s** in **%s**
@ -107,3 +107,5 @@ errors:
msg: Failed to create **'%s'**.
exiting:
msg: Exiting with status code **%s**.
validateError:
msg: "An error occurred during validation:\n%s"

View File

@ -148,7 +148,8 @@ module.exports = class OutputHandler
when 'invalid' then style = 'yellow'; adj = msgs[2]
when 'broken' then style = 'red'; adj = msgs[3]
when 'missing' then style = 'red'; adj = msgs[4]
evt.schema = evt.schema.toUpperCase()
when 'unknown' then style = 'red'; adj = msgs[5]
evt.schema = evt.schema.replace('jars','JSON Resume').toUpperCase()
L(M2C( msgs[0], 'white' ) + chalk[style].bold(adj), evt.file, evt.schema)
if evt.violations

View File

@ -32,3 +32,4 @@ module.exports =
invalidParamCount: 23
missingParam: 24
createError: 25
validateError: 26

View File

@ -21,6 +21,8 @@ safeLoadJSON = require '../utils/safe-json-loader'
###* An invokable resume validation command. ###
module.exports = class ValidateVerb extends Verb
constructor: -> super 'validate', _validate
@ -37,8 +39,6 @@ _validate = (sources, unused, opts) ->
fresh: require 'fresca'
jars: require '../core/resume.json'
# Validate input resumes. Return a { file: <f>, isValid: <v>} object for
# each resume valid, invalid, or broken.
results = _.map sources, (t) ->
r = _validateOne.call @, t, validator, schemas, opts
@err r.error.fluenterror, r.error if r.error
@ -69,31 +69,34 @@ _validateOne = (t, validator, schemas, opts) ->
try
# Read and parse the resume JSON
# Read and parse the resume JSON. Won't throw.
obj = safeLoadJSON t
if obj.ex
# If success, validate the resume against the schema
if !obj.ex
if obj.json.basics then ret.schema = 'jars' else ret.schema = 'fresh'
validate = validator schemas[ ret.schema ], # Note [1]
formats: { date: /^\d{4}(?:-(?:0[0-9]{1}|1[0-2]{1})(?:-[0-9]{2})?)?$/ }
ret.isValid = validate obj.json
ret.status = if ret.isValid then 'valid' else 'invalid'
ret.violations = validate.errors if !ret.isValid
# If failure, package JSON read/parse errors
else
if obj.ex.operation == 'parse'
errCode = HMSTATUS.parseError
ret.status = 'broken'
else
errCode = HMSTATUS.readError
ret.status = 'missing'
ret.error = fluenterror: errCode, inner: obj.ex.inner, quiet: errCode == HMSTATUS.readError
else
# Set up a FRESH or JSON Resume validator
if obj.json.basics then ret.schema = 'jars' else ret.schema = 'fresh'
validate = validator schemas[ ret.schema ], # Note [1]
formats: { date: /^\d{4}(?:-(?:0[0-9]{1}|1[0-2]{1})(?:-[0-9]{2})?)?$/ }
# Validate the resume against the schema
ret.isValid = validate obj.json
ret.status = if ret.isValid then 'valid' else 'invalid'
ret.violations = validate.errors if !ret.isValid
ret.error =
fluenterror: errCode,
inner: obj.ex.inner,
quiet: errCode == HMSTATUS.readError
catch
ret.error = _error
# Package any unexpected exceptions
ret.error = fluenterror: HMSTATUS.validateError, inner: _error
ret.schema = ret.schema.replace 'jars', 'JSON Resume'
@stat HMEVENT.afterValidate, ret
ret