1
0
mirror of https://github.com/JuanCanham/HackMyResume.git synced 2025-05-10 15:57:07 +01:00

Refactor command processing.

This commit is contained in:
hacksalot
2016-01-02 00:15:46 -05:00
parent 47553b6def
commit a95b52acd0
8 changed files with 74 additions and 60 deletions

View File

@ -22,14 +22,19 @@ Implementation of the 'analyze' verb for HackMyResume.
/**
Run the 'analyze' command.
*/
module.exports = function analyze( src, dst, opts, logger ) {
module.exports = function analyze( sources, dst, opts, logger ) {
var _log = logger || console.log;
if( !src || !src.length ) throw { fluenterror: 3 };
var sourceResumes = ResumeFactory.load( src, _log, null, true );
if( !sources || !sources.length ) throw { fluenterror: 3 };
var nlzrs = _loadInspectors();
sourceResumes.forEach( function(r) {
_analyze( r, nlzrs, opts, _log );
sources.forEach( function(src) {
var result = ResumeFactory.loadOne( src, {
log: _log, format: 'FRESH', objectify: true, throw: false
});
result.error || _analyze( result, nlzrs, opts, _log );
});
};
@ -39,7 +44,9 @@ Implementation of the 'analyze' verb for HackMyResume.
*/
function _analyze( resumeObject, nlzrs, opts, log ) {
var rez = resumeObject.rez;
var safeFormat = rez.meta.format.startsWith('FRESH') ? 'FRESH' : 'JRS';
var safeFormat =
(rez.meta && rez.meta.format && rez.meta.format.startsWith('FRESH')) ?
'FRESH' : 'JRS';
log(chalk.cyan('Analyzing ') + chalk.cyan.bold(safeFormat) +
chalk.cyan(' resume: ') + chalk.cyan.bold(resumeObject.file));
var info = _.mapObject( nlzrs, function(val, key) {

View File

@ -18,42 +18,42 @@ Implementation of the 'convert' verb for HackMyResume.
/**
Convert between FRESH and JRS formats.
*/
module.exports = function convert( sources, dst, opts, logger ) {
module.exports = function convert( srcs, dst, opts, logger ) {
// Housekeeping
var _log = logger || console.log;
if( !sources || !sources.length ) { throw { fluenterror: 6 }; }
if( !srcs || !srcs.length ) { throw { fluenterror: 6 }; }
if( !dst || !dst.length ) {
if( sources.length === 1 ) { throw { fluenterror: 5 }; }
else if( sources.length === 2 ) {
dst = [ sources[1] ]; sources = [ sources[0] ];
}
if( srcs.length === 1 ) { throw { fluenterror: 5 }; }
else if( srcs.length === 2 ) { dst = dst || []; dst.push( srcs.pop() ); }
else { throw { fluenterror: 5 }; }
}
if( sources && dst && sources.length && dst.length &&
sources.length !== dst.length ) { throw { fluenterror: 7 }; }
if( srcs && dst && srcs.length && dst.length &&
srcs.length !== dst.length ) { throw { fluenterror: 7 }; }
// Load source resumes
var sourceResumes = ResumeFactory.load( sources, {
log: _log, format: null, objectify: true, throw: true
});
srcs.forEach( function( src, idx ) {
// Apply the conversion to each
sourceResumes.forEach(function( src, idx ) {
// Load the resume
var rinfo = ResumeFactory.loadOne( src, {
log: _log, format: null, objectify: true, throw: true
});
var s = src.rez
var s = rinfo.rez
, srcFmt = ((s.basics && s.basics.imp) || s.imp).orgFormat === 'JRS' ?
'JRS' : 'FRESH';
var targetFormat = srcFmt === 'JRS' ? 'FRESH' : 'JRS';
'JRS' : 'FRESH'
, targetFormat = srcFmt === 'JRS' ? 'FRESH' : 'JRS';
// TODO: Core should not log
_log( chalk.green('Converting ') + chalk.green.bold(src.file) +
chalk.green(' (' + sourceFormat + ') to ') + chalk.green.bold(dst[0]) +
_log( chalk.green('Converting ') + chalk.green.bold(rinfo.file) +
chalk.green(' (' + srcFmt + ') to ') + chalk.green.bold(dst[0]) +
chalk.green(' (' + targetFormat + ').'));
// Save it to the destination format
s.saveAs( dst[idx], targetFormat );
});
};

View File

@ -45,14 +45,20 @@ Implementation of the 'generate' verb for HackMyResume.
*/
function build( src, dst, opts, logger, errHandler ) {
// Housekeeping...
// Housekeeping
//_opts = extend( true, _opts, opts );
_log = logger || console.log;
_err = errHandler || error;
//_opts = extend( true, _opts, opts );
_opts.theme = (opts.theme && opts.theme.toLowerCase().trim())|| 'modern';
_opts.prettify = opts.prettify === true ? _opts.prettify : false;
_opts.css = opts.css;
// If two or more files are passed to the GENERATE command and the TO
// keyword is omitted, the last file specifies the output file.
if( src.length > 1 && ( !dst || !dst.length ) ) {
dst.push( src.pop() );
}
// Load the theme...
var tFolder = verify_theme( _opts.theme );
var theme = load_theme( tFolder );
@ -60,18 +66,18 @@ Implementation of the 'generate' verb for HackMyResume.
// Load input resumes...
if( !src || !src.length ) { throw { fluenterror: 3 }; }
var sheets = ResumeFactory.load(src, {
log: _log, format: theme.render ? 'JRS' : 'FRESH', objectify: true, throw: true
});
log: _log, format: theme.render ? 'JRS' : 'FRESH',
objectify: true, throw: true
}).map(function(sh){ return sh.rez; });
// Merge input resumes...
var msg = '';
var rezRep = _.reduceRight( sheets, function( a, b, idx ) {
rez = _.reduceRight( sheets, function( a, b, idx ) {
msg += ((idx == sheets.length - 2) ?
chalk.gray('Merging ') + a.rez.imp.fileName : '') + chalk.gray(' onto ') + b.rez.fileName;
return extend( true, b.rez, a.rez );
chalk.cyan('Merging ') + chalk.cyan.bold(a.file) : '') +
chalk.cyan(' onto ') + chalk.cyan.bold(b.file);
return extend( true, b, a );
});
rez = rezRep.rez;
msg && _log(msg);
// Expand output resumes...
@ -277,8 +283,8 @@ Implementation of the 'generate' verb for HackMyResume.
// Output a message TODO: core should not log
var numFormats = Object.keys(theTheme.formats).length;
_log( chalk.gray('Applying ') + chalk.gray.bold(theTheme.name.toUpperCase()) +
chalk.gray(' theme (' + numFormats + ' formats)'));
_log( chalk.yellow('Applying ') + chalk.yellow.bold(theTheme.name.toUpperCase()) +
chalk.yellow(' theme (' + numFormats + ' formats)'));
return theTheme;
}

View File

@ -27,26 +27,27 @@ Implementation of the 'validate' verb for HackMyResume.
jars: require('../core/resume.json')
};
var resumes = ResumeFactory.load( sources, {
log: _log,
format: null,
objectify: false,
throw: false,
muffle: true
});
// Load input resumes...
sources.forEach(function( src ) {
resumes.forEach(function( src ) {
var result = ResumeFactory.loadOne( src, {
log: function(){},
format: null,
objectify: false,
throw: false
});
if( result.error ) {
if( src.error ) {
// TODO: Core should not log
_log( chalk.white('Validating ') + chalk.gray.bold(src) +
_log( chalk.white('Validating ') + chalk.gray.bold(src.file) +
chalk.white(' against ') + chalk.gray.bold('AUTO') +
chalk.white(' schema:') + chalk.red.bold(' BROKEN') );
var ex = result.error; // alias
var ex = src.error; // alias
if ( ex instanceof SyntaxError) {
var info = new SyntaxErrorEx( ex, result.raw );
_log( chalk.red.bold('--> ' + src.toUpperCase() + ' contains invalid JSON on line ' +
var info = new SyntaxErrorEx( ex, src.raw );
_log( chalk.red.bold('--> ' + src.file.toUpperCase() + ' contains invalid JSON on line ' +
info.line + ' column ' + info.col + '.' +
chalk.red(' Unable to validate.') ) );
_log( chalk.red.bold(' INTERNAL: ' + ex) );
@ -57,7 +58,7 @@ Implementation of the 'validate' verb for HackMyResume.
return;
}
var json = result.json;
var json = src.json;
var isValid = false;
var style = 'green';
var errors = [];
@ -81,7 +82,7 @@ Implementation of the 'validate' verb for HackMyResume.
return;
}
_log( chalk.white('Validating ') + chalk.white.bold(result.file) + chalk.white(' against ') +
_log( chalk.white('Validating ') + chalk.white.bold(src.file) + chalk.white(' against ') +
chalk.white.bold(fmt.replace('jars','JSON Resume').toUpperCase()) +
chalk.white(' schema: ') + chalk[style].bold(isValid ? 'VALID!' : 'INVALID') );