mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-05 01:56:21 +00:00
Generate ANALYZE console output from Handlebars template.
This commit is contained in:
parent
540ad48d61
commit
f18910f490
30
src/cli/analyze.hbs
Normal file
30
src/cli/analyze.hbs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
{{style "SECTIONS (" "bold"}}{{style totals.numSections "white" }}{{style ")" "bold"}}
|
||||||
|
|
||||||
|
employment: {{v totals.totals.employment "-" 2 "bold" }}
|
||||||
|
projects: {{v totals.totals.projects "-" 2 "bold" }}
|
||||||
|
education: {{v totals.totals.education "-" 2 "bold" }}
|
||||||
|
service: {{v totals.totals.service "-" 2 "bold" }}
|
||||||
|
skills: {{v totals.totals.skills "-" 2 "bold" }}
|
||||||
|
writing: {{v totals.totals.writing "-" 2 "bold" }}
|
||||||
|
speaking: {{v totals.totals.speaking "-" 2 "bold" }}
|
||||||
|
reading: {{v totals.totals.reading "-" 2 "bold" }}
|
||||||
|
social: {{v totals.totals.social "-" 2 "bold" }}
|
||||||
|
references: {{v totals.totals.references "-" 2 "bold" }}
|
||||||
|
testimonials: {{v totals.totals.testimonials "-" 2 "bold" }}
|
||||||
|
languages: {{v totals.totals.languages "-" 2 "bold" }}
|
||||||
|
interests: {{v totals.totals.interests "-" 2 "bold" }}
|
||||||
|
|
||||||
|
{{style "COVERAGE (" "bold"}}{{style coverage.pct "white"}}{{style ")" "bold"}}
|
||||||
|
|
||||||
|
Total Days: {{v coverage.duration.total "-" 5 "bold" }}
|
||||||
|
Employed: {{v coverage.duration.work "-" 5 "bold" }}
|
||||||
|
Gaps: {{v coverage.gaps.length "-" 5 "bold" }} [{{#if coverage.gaps.length }}{{#each coverage.gaps }}{{#unless @first}} {{/unless}}{{heat duration }}{{/each}}{{/if}}]
|
||||||
|
Overlaps: {{v coverage.overlaps.length "-" 5 "bold" }} [{{#if coverage.overlaps.length }}{{#each coverage.overlaps }}{{#unless @first}} {{/unless}}{{heat duration }}{{/each}}{{/if}}]
|
||||||
|
|
||||||
|
{{style "KEYWORDS (" "bold"}}{{style keywords.length "white" }}{{style ")" "bold"}}
|
||||||
|
|
||||||
|
{{#each keywords }}{{{pad name 18}}}: {{v count "-" 5 "bold"}} mention{{#isPlural count}}s{{/isPlural}}
|
||||||
|
{{/each}}
|
||||||
|
-------------------------------
|
||||||
|
{{v keywords.length "0" 9 "bold"}} {{style "KEYWORDS" "bold"}} {{v keywords.totalKeywords "0" 5 "bold"}} {{style "mentions" "bold"}}
|
@ -15,6 +15,9 @@ Output routines for HackMyResume.
|
|||||||
, _ = require('underscore')
|
, _ = require('underscore')
|
||||||
, Class = require('../utils/class.js')
|
, Class = require('../utils/class.js')
|
||||||
, PATH = require('path')
|
, PATH = require('path')
|
||||||
|
, LO = require('lodash')
|
||||||
|
, FS = require('fs')
|
||||||
|
, HANDLEBARS = require('handlebars')
|
||||||
, pad = require('string-padding');
|
, pad = require('string-padding');
|
||||||
|
|
||||||
|
|
||||||
@ -128,45 +131,18 @@ Output routines for HackMyResume.
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HME.afterAnalyze:
|
case HME.afterAnalyze:
|
||||||
// TODO: templatize all of this
|
|
||||||
var info = evt.info;
|
var info = evt.info;
|
||||||
var padding = 20;
|
var rawTpl = FS.readFileSync( PATH.join( __dirname, 'analyze.hbs' ), 'utf8');
|
||||||
this.log(chalk.cyan.bold('\nSECTIONS') + chalk.cyan(' (') +
|
HANDLEBARS.registerHelper( consoleFormatHelpers );
|
||||||
chalk.white.bold(_.keys(info.totals).length) + chalk.cyan('):\n'));
|
var template = HANDLEBARS.compile(rawTpl, { strict: false, assumeObjects: false });
|
||||||
|
|
||||||
_.each( info.totals, function(tot, key) {
|
|
||||||
this.log(chalk.cyan(pad(key + ': ',20)) +
|
|
||||||
chalk.cyan.bold(pad(tot.toString(),5)));
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.log();
|
|
||||||
this.log(chalk.cyan.bold('COVERAGE') + chalk.cyan(' (') + chalk.white.bold( info.coverage.pct ) + chalk.cyan('):\n'));
|
|
||||||
this.log(chalk.cyan(pad('Total Days: ', padding)) + chalk.cyan.bold( pad(info.coverage.duration.total.toString(),5) ));
|
|
||||||
this.log(chalk.cyan(pad('Employed: ', padding)) + chalk.cyan.bold( pad((info.coverage.duration.total - info.coverage.duration.gaps).toString(),5) ));
|
|
||||||
this.log(chalk.cyan(pad('Gaps: ', padding + 4)) + chalk.cyan.bold(info.coverage.gaps.length) + chalk.cyan(' [') + info.coverage.gaps.map(function(g) {
|
|
||||||
var clr = 'green';
|
|
||||||
if( g.duration > 35 ) clr = 'yellow';
|
|
||||||
if( g.duration > 90 ) clr = 'red';
|
|
||||||
return chalk[clr].bold( g.duration) ;
|
|
||||||
}).join(', ') + chalk.cyan(']') );
|
|
||||||
|
|
||||||
this.log(chalk.cyan(pad('Overlaps: ', padding + 4)) + chalk.cyan.bold(info.coverage.overlaps.length) + chalk.cyan(' [') + info.coverage.overlaps.map(function(ol) {
|
|
||||||
var clr = 'green';
|
|
||||||
if( ol.duration > 35 ) clr = 'yellow';
|
|
||||||
if( ol.duration > 90 ) clr = 'red';
|
|
||||||
return chalk[clr].bold( ol.duration) ;
|
|
||||||
}).join(', ') + chalk.cyan(']') );
|
|
||||||
|
|
||||||
var tot = 0;
|
var tot = 0;
|
||||||
this.log();
|
info.keywords.forEach(function(g) {
|
||||||
this.log( chalk.cyan.bold('KEYWORDS') + chalk.cyan(' (') + chalk.white.bold( info.keywords.length ) +
|
tot += g.count;
|
||||||
chalk.cyan('):\n\n') +
|
});
|
||||||
info.keywords.map(function(g) {
|
info.keywords.totalKeywords = tot;
|
||||||
tot += g.count;
|
var output = template( info );
|
||||||
return chalk.cyan( pad(g.name + ': ', padding) ) + chalk.cyan.bold( pad( g.count.toString(), 5 )) + chalk.cyan(' mentions');
|
|
||||||
}).join('\n'));
|
|
||||||
|
|
||||||
this.log(chalk.cyan( pad('TOTAL: ', padding) ) + chalk.white.bold( pad( tot.toString(), 5 )) + chalk.cyan(' mentions'));
|
this.log(chalk.cyan(output));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HME.beforeConvert:
|
case HME.beforeConvert:
|
||||||
@ -183,5 +159,50 @@ Output routines for HackMyResume.
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var consoleFormatHelpers = {
|
||||||
|
v: function( val, defaultVal, padding, style ) {
|
||||||
|
retVal = ( val === null || val === undefined ) ? defaultVal : val;
|
||||||
|
var spaces = 0;
|
||||||
|
if( String.is(padding) ) {
|
||||||
|
spaces = parseInt( padding, 10 );
|
||||||
|
if( isNaN(spaces) ) spaces = 0;
|
||||||
|
}
|
||||||
|
else if( _.isNumber(padding) ) {
|
||||||
|
spaces = padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( spaces !== 0 )
|
||||||
|
retVal = pad( retVal, Math.abs(spaces), null, spaces > 0 ? pad.LEFT : pad.RIGHT );
|
||||||
|
|
||||||
|
if( style && String.is( style )) {
|
||||||
|
retVal = LO.get( chalk, style )( retVal );
|
||||||
|
}
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
},
|
||||||
|
|
||||||
|
heat: function(val) {
|
||||||
|
if( val < 35 )
|
||||||
|
return chalk.green.bold(val);
|
||||||
|
else if( val < 95 )
|
||||||
|
return chalk.yellow.bold(val);
|
||||||
|
else
|
||||||
|
return chalk.red.bold(val);
|
||||||
|
},
|
||||||
|
|
||||||
|
style: function( val, style ) {
|
||||||
|
return LO.get( chalk, style )( val );
|
||||||
|
},
|
||||||
|
|
||||||
|
isPlural: function( val, options ) {
|
||||||
|
if( val > 1 )
|
||||||
|
return options.fn(this);
|
||||||
|
},
|
||||||
|
|
||||||
|
pad: function( val, spaces ) {
|
||||||
|
return pad(val, Math.abs(spaces), null, spaces > 0 ? pad.LEFT : pad.RIGHT );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
@ -30,25 +30,29 @@ Section analysis for HackMyResume.
|
|||||||
/**
|
/**
|
||||||
Run the Totals Inspector on a resume.
|
Run the Totals Inspector on a resume.
|
||||||
@method run
|
@method run
|
||||||
@return An array of objects containing summary information for each section
|
@return An object containing summary information for each section on the
|
||||||
on the resume.
|
resume.
|
||||||
*/
|
*/
|
||||||
run: function( rez ) {
|
run: function( rez ) {
|
||||||
|
|
||||||
var ret = { };
|
var sectionTotals = { };
|
||||||
_.each( rez, function(val, key){
|
_.each( rez, function(val, key){
|
||||||
if( _.isArray( val ) && !_.isString(val) ) {
|
if( _.isArray( val ) && !_.isString(val) ) {
|
||||||
ret[ key ] = val.length;
|
sectionTotals[ key ] = val.length;
|
||||||
}
|
}
|
||||||
else if( val.history && _.isArray( val.history ) ) {
|
else if( val.history && _.isArray( val.history ) ) {
|
||||||
ret[ key ] = val.history.length;
|
sectionTotals[ key ] = val.history.length;
|
||||||
}
|
}
|
||||||
else if( val.sets && _.isArray( val.sets ) ) {
|
else if( val.sets && _.isArray( val.sets ) ) {
|
||||||
ret[ key ] = val.sets.length;
|
sectionTotals[ key ] = val.sets.length;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return ret;
|
return {
|
||||||
|
totals: sectionTotals,
|
||||||
|
numSections: Object.keys( sectionTotals ).length
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user