HackMyResume/src/inspectors/duration-inspector.js

55 lines
1.9 KiB
JavaScript

/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const FluentDate = require('../core/fluent-date');
const _ = require('underscore');
const lo = require('lodash');
module.exports = {
/**
Compute the total duration of the work history.
@returns The total duration of the sheet's work history, that is, the number
of years between the start date of the earliest job on the resume and the
*latest end date of all jobs in the work history*. This last condition is for
sheets that have overlapping jobs.
*/
run(rez, collKey, startKey, endKey, unit) {
unit = unit || 'years';
const hist = lo.get(rez, collKey);
if (!hist || !hist.length) { return 0; }
// BEGIN CODE DUPLICATION --> src/inspectors/gap-inspector.coffee (TODO)
// Convert the candidate's employment history to an array of dates,
// where each element in the array is a start date or an end date of a
// job -- it doesn't matter which.
let new_e = hist.map(function( job ) {
let obj = _.pick( job, [startKey, endKey] );
// Synthesize an end date if this is a "current" gig
if (!_.has(obj, endKey)) { obj[endKey] = 'current'; }
if (obj && (obj[startKey] || obj[endKey])) {
obj = _.pairs(obj);
obj[0][1] = FluentDate.fmt( obj[0][1] );
if (obj.length > 1) {
obj[1][1] = FluentDate.fmt( obj[1][1] );
}
}
return obj;
});
// Flatten the array, remove empties, and sort
new_e = _.filter(_.flatten( new_e, true ), v => v && v.length && v[0] && v[0].length);
if (!new_e || !new_e.length) { return 0; }
new_e = _.sortBy(new_e, elem => elem[1].unix());
// END CODE DUPLICATION
const firstDate = _.first( new_e )[1];
const lastDate = _.last( new_e )[1];
return lastDate.diff(firstDate, unit);
}
};