mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-21 16:00:11 +00:00
Improve VALIDATE error handling.
This commit is contained in:
parent
c889664c31
commit
dbef9f0a35
4
dist/cli/error.js
vendored
4
dist/cli/error.js
vendored
@ -230,6 +230,10 @@ Error-handling routines for HackMyResume.
|
||||
case HMSTATUS.createError:
|
||||
msg = printf(M2C(this.msgs.createError.msg), ex.inner.path);
|
||||
etype = 'error';
|
||||
break;
|
||||
case HMSTATUS.validateError:
|
||||
msg = printf(M2C(this.msgs.validateError.msg), ex.inner.toString());
|
||||
etype = 'error';
|
||||
}
|
||||
return {
|
||||
msg: msg,
|
||||
|
4
dist/cli/msg.yml
vendored
4
dist/cli/msg.yml
vendored
@ -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"
|
||||
|
6
dist/cli/out.js
vendored
6
dist/cli/out.js
vendored
@ -151,8 +151,12 @@ Output routines for HackMyResume.
|
||||
case 'missing':
|
||||
style = 'red';
|
||||
adj = msgs[4];
|
||||
break;
|
||||
case 'unknown':
|
||||
style = 'red';
|
||||
adj = msgs[5];
|
||||
}
|
||||
evt.schema = evt.schema.toUpperCase();
|
||||
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) {
|
||||
_.each(evt.violations, function(err, idx) {
|
||||
|
3
dist/core/status-codes.js
vendored
3
dist/core/status-codes.js
vendored
@ -32,7 +32,8 @@ Status codes for HackMyResume.
|
||||
themeLoad: 22,
|
||||
invalidParamCount: 23,
|
||||
missingParam: 24,
|
||||
createError: 25
|
||||
createError: 25,
|
||||
validateError: 26
|
||||
};
|
||||
|
||||
}).call(this);
|
||||
|
34
dist/verbs/validate.js
vendored
34
dist/verbs/validate.js
vendored
@ -94,20 +94,7 @@ Implementation of the 'validate' verb for HackMyResume.
|
||||
};
|
||||
try {
|
||||
obj = safeLoadJSON(t);
|
||||
if (obj.ex) {
|
||||
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 {
|
||||
if (!obj.ex) {
|
||||
if (obj.json.basics) {
|
||||
ret.schema = 'jars';
|
||||
} else {
|
||||
@ -123,11 +110,26 @@ Implementation of the 'validate' verb for HackMyResume.
|
||||
if (!ret.isValid) {
|
||||
ret.violations = validate.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
|
||||
};
|
||||
}
|
||||
} catch (_error) {
|
||||
ret.error = _error;
|
||||
ret.error = {
|
||||
fluenterror: HMSTATUS.validateError,
|
||||
inner: _error
|
||||
};
|
||||
}
|
||||
ret.schema = ret.schema.replace('jars', 'JSON Resume');
|
||||
this.stat(HMEVENT.afterValidate, ret);
|
||||
return ret;
|
||||
};
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user