mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-22 00:10:15 +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:
|
case HMSTATUS.createError:
|
||||||
msg = printf(M2C(this.msgs.createError.msg), ex.inner.path);
|
msg = printf(M2C(this.msgs.createError.msg), ex.inner.path);
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
|
break;
|
||||||
|
case HMSTATUS.validateError:
|
||||||
|
msg = printf(M2C(this.msgs.validateError.msg), ex.inner.toString());
|
||||||
|
etype = 'error';
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
msg: msg,
|
msg: msg,
|
||||||
|
4
dist/cli/msg.yml
vendored
4
dist/cli/msg.yml
vendored
@ -44,7 +44,7 @@ events:
|
|||||||
- "INVALID"
|
- "INVALID"
|
||||||
- "BROKEN"
|
- "BROKEN"
|
||||||
- "MISSING"
|
- "MISSING"
|
||||||
- "UNKNOWN"
|
- "ERROR"
|
||||||
beforePeek:
|
beforePeek:
|
||||||
msg:
|
msg:
|
||||||
- Peeking at **%s** in **%s**
|
- Peeking at **%s** in **%s**
|
||||||
@ -107,3 +107,5 @@ errors:
|
|||||||
msg: Failed to create **'%s'**.
|
msg: Failed to create **'%s'**.
|
||||||
exiting:
|
exiting:
|
||||||
msg: Exiting with status code **%s**.
|
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':
|
case 'missing':
|
||||||
style = 'red';
|
style = 'red';
|
||||||
adj = msgs[4];
|
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);
|
L(M2C(msgs[0], 'white') + chalk[style].bold(adj), evt.file, evt.schema);
|
||||||
if (evt.violations) {
|
if (evt.violations) {
|
||||||
_.each(evt.violations, function(err, idx) {
|
_.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,
|
themeLoad: 22,
|
||||||
invalidParamCount: 23,
|
invalidParamCount: 23,
|
||||||
missingParam: 24,
|
missingParam: 24,
|
||||||
createError: 25
|
createError: 25,
|
||||||
|
validateError: 26
|
||||||
};
|
};
|
||||||
|
|
||||||
}).call(this);
|
}).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 {
|
try {
|
||||||
obj = safeLoadJSON(t);
|
obj = safeLoadJSON(t);
|
||||||
if (obj.ex) {
|
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.json.basics) {
|
if (obj.json.basics) {
|
||||||
ret.schema = 'jars';
|
ret.schema = 'jars';
|
||||||
} else {
|
} else {
|
||||||
@ -123,11 +110,26 @@ Implementation of the 'validate' verb for HackMyResume.
|
|||||||
if (!ret.isValid) {
|
if (!ret.isValid) {
|
||||||
ret.violations = validate.errors;
|
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) {
|
} 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);
|
this.stat(HMEVENT.afterValidate, ret);
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
@ -222,6 +222,10 @@ assembleError = ( ex ) ->
|
|||||||
msg = printf M2C( this.msgs.createError.msg ), ex.inner.path
|
msg = printf M2C( this.msgs.createError.msg ), ex.inner.path
|
||||||
etype = 'error'
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.validateError
|
||||||
|
msg = printf M2C( @msgs.validateError.msg ), ex.inner.toString()
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
msg: msg # The error message to display
|
msg: msg # The error message to display
|
||||||
withStack: withStack # Whether to include the stack
|
withStack: withStack # Whether to include the stack
|
||||||
quit: quit
|
quit: quit
|
||||||
|
@ -44,7 +44,7 @@ events:
|
|||||||
- "INVALID"
|
- "INVALID"
|
||||||
- "BROKEN"
|
- "BROKEN"
|
||||||
- "MISSING"
|
- "MISSING"
|
||||||
- "UNKNOWN"
|
- "ERROR"
|
||||||
beforePeek:
|
beforePeek:
|
||||||
msg:
|
msg:
|
||||||
- Peeking at **%s** in **%s**
|
- Peeking at **%s** in **%s**
|
||||||
@ -107,3 +107,5 @@ errors:
|
|||||||
msg: Failed to create **'%s'**.
|
msg: Failed to create **'%s'**.
|
||||||
exiting:
|
exiting:
|
||||||
msg: Exiting with status code **%s**.
|
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 'invalid' then style = 'yellow'; adj = msgs[2]
|
||||||
when 'broken' then style = 'red'; adj = msgs[3]
|
when 'broken' then style = 'red'; adj = msgs[3]
|
||||||
when 'missing' then style = 'red'; adj = msgs[4]
|
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)
|
L(M2C( msgs[0], 'white' ) + chalk[style].bold(adj), evt.file, evt.schema)
|
||||||
|
|
||||||
if evt.violations
|
if evt.violations
|
||||||
|
@ -32,3 +32,4 @@ module.exports =
|
|||||||
invalidParamCount: 23
|
invalidParamCount: 23
|
||||||
missingParam: 24
|
missingParam: 24
|
||||||
createError: 25
|
createError: 25
|
||||||
|
validateError: 26
|
||||||
|
@ -21,6 +21,8 @@ safeLoadJSON = require '../utils/safe-json-loader'
|
|||||||
###* An invokable resume validation command. ###
|
###* An invokable resume validation command. ###
|
||||||
module.exports = class ValidateVerb extends Verb
|
module.exports = class ValidateVerb extends Verb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor: -> super 'validate', _validate
|
constructor: -> super 'validate', _validate
|
||||||
|
|
||||||
|
|
||||||
@ -37,8 +39,6 @@ _validate = (sources, unused, opts) ->
|
|||||||
fresh: require 'fresca'
|
fresh: require 'fresca'
|
||||||
jars: require '../core/resume.json'
|
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) ->
|
results = _.map sources, (t) ->
|
||||||
r = _validateOne.call @, t, validator, schemas, opts
|
r = _validateOne.call @, t, validator, schemas, opts
|
||||||
@err r.error.fluenterror, r.error if r.error
|
@err r.error.fluenterror, r.error if r.error
|
||||||
@ -69,31 +69,34 @@ _validateOne = (t, validator, schemas, opts) ->
|
|||||||
|
|
||||||
try
|
try
|
||||||
|
|
||||||
# Read and parse the resume JSON
|
# Read and parse the resume JSON. Won't throw.
|
||||||
obj = safeLoadJSON t
|
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'
|
if obj.ex.operation == 'parse'
|
||||||
errCode = HMSTATUS.parseError
|
errCode = HMSTATUS.parseError
|
||||||
ret.status = 'broken'
|
ret.status = 'broken'
|
||||||
else
|
else
|
||||||
errCode = HMSTATUS.readError
|
errCode = HMSTATUS.readError
|
||||||
ret.status = 'missing'
|
ret.status = 'missing'
|
||||||
ret.error = fluenterror: errCode, inner: obj.ex.inner, quiet: errCode == HMSTATUS.readError
|
ret.error =
|
||||||
|
fluenterror: errCode,
|
||||||
else
|
inner: obj.ex.inner,
|
||||||
# Set up a FRESH or JSON Resume validator
|
quiet: errCode == HMSTATUS.readError
|
||||||
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
|
|
||||||
|
|
||||||
catch
|
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
|
@stat HMEVENT.afterValidate, ret
|
||||||
ret
|
ret
|
||||||
|
Loading…
Reference in New Issue
Block a user