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:
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -32,3 +32,4 @@ module.exports =
|
||||
invalidParamCount: 23
|
||||
missingParam: 24
|
||||
createError: 25
|
||||
validateError: 26
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user