1
0
mirror of https://github.com/JuanCanham/HackMyResume.git synced 2024-11-05 09:56:22 +00:00
HackMyResume/dist/verbs/convert.js

156 lines
3.9 KiB
JavaScript
Raw Normal View History

2016-01-27 10:29:26 +00:00
/**
Implementation of the 'convert' verb for HackMyResume.
@module verbs/convert
@license MIT. See LICENSE.md for details.
*/
(function() {
var ConvertVerb, HMEVENT, HMSTATUS, ResumeFactory, Verb, _, _convert, _convertOne, chalk,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
2016-01-27 10:29:26 +00:00
ResumeFactory = require('../core/resume-factory');
chalk = require('chalk');
Verb = require('../verbs/verb');
HMSTATUS = require('../core/status-codes');
_ = require('underscore');
HMEVENT = require('../core/event-codes');
module.exports = ConvertVerb = (function(superClass) {
extend(ConvertVerb, superClass);
function ConvertVerb() {
ConvertVerb.__super__.constructor.call(this, 'convert', _convert);
2016-01-27 10:29:26 +00:00
}
return ConvertVerb;
})(Verb);
2016-01-27 10:29:26 +00:00
2016-02-02 02:14:36 +00:00
/** Private workhorse method. Convert 0..N resumes between FRESH and JRS
formats.
2016-01-27 10:29:26 +00:00
*/
2016-02-02 02:14:36 +00:00
_convert = function(srcs, dst, opts) {
2018-02-10 06:10:20 +00:00
var fmtUp, results, targetVer;
2016-01-27 10:29:26 +00:00
if (!srcs || !srcs.length) {
2016-02-02 02:14:36 +00:00
this.err(HMSTATUS.resumeNotFound, {
2016-01-27 10:29:26 +00:00
quit: true
2016-02-02 02:14:36 +00:00
});
return null;
2016-01-27 10:29:26 +00:00
}
if (!dst || !dst.length) {
if (srcs.length === 1) {
2016-02-02 02:14:36 +00:00
this.err(HMSTATUS.inputOutputParity, {
2016-01-27 10:29:26 +00:00
quit: true
2016-02-02 02:14:36 +00:00
});
2016-01-27 10:29:26 +00:00
} else if (srcs.length === 2) {
dst = dst || [];
dst.push(srcs.pop());
} else {
2016-02-02 02:14:36 +00:00
this.err(HMSTATUS.inputOutputParity, {
2016-01-27 10:29:26 +00:00
quit: true
2016-02-02 02:14:36 +00:00
});
2016-01-27 10:29:26 +00:00
}
}
if (srcs && dst && srcs.length && dst.length && srcs.length !== dst.length) {
2016-02-02 02:14:36 +00:00
this.err(HMSTATUS.inputOutputParity, {
quit: true
2016-01-27 10:29:26 +00:00
});
2016-02-02 02:14:36 +00:00
}
targetVer = null;
if (opts.format) {
fmtUp = opts.format.trim().toUpperCase();
2018-02-10 06:10:20 +00:00
if (!_.contains(['FRESH', 'FRESCA', 'JRS', 'JRS@1', 'JRS@edge'], fmtUp)) {
this.err(HMSTATUS.invalidSchemaVersion, {
data: opts.format.trim(),
quit: true
});
}
}
2018-01-30 07:34:58 +00:00
if (this.hasError()) {
this.reject(this.errorCode);
return null;
}
2016-02-02 02:14:36 +00:00
results = _.map(srcs, function(src, idx) {
var r;
2018-02-10 06:10:20 +00:00
r = _convertOne.call(this, src, dst, idx, fmtUp);
2016-02-02 02:14:36 +00:00
if (r.fluenterror) {
r.quit = opts.assert;
this.err(r.fluenterror, r);
}
return r;
2016-01-27 10:29:26 +00:00
}, this);
2016-02-02 02:14:36 +00:00
if (this.hasError() && !opts.assert) {
this.reject(results);
} else if (!this.hasError()) {
this.resolve(results);
}
return results;
};
/** Private workhorse method. Convert a single resume. */
2018-02-10 06:10:20 +00:00
_convertOne = function(src, dst, idx, targetSchema) {
var err, rez, rinfo, srcFmt, targetFormat;
2016-02-02 02:14:36 +00:00
rinfo = ResumeFactory.loadOne(src, {
format: null,
objectify: true,
inner: {
privatize: false
}
2016-02-02 02:14:36 +00:00
});
if (rinfo.fluenterror) {
2018-01-30 07:34:58 +00:00
this.stat(HMEVENT.beforeConvert, {
srcFile: src,
srcFmt: '???',
dstFile: dst[idx],
dstFmt: '???',
error: true
});
return rinfo;
}
rez = rinfo.rez;
srcFmt = '';
if (rez.meta && rez.meta.format) {
srcFmt = 'FRESH';
} else if (rez.basics) {
srcFmt = 'JRS';
} else {
rinfo.fluenterror = HMSTATUS.unknownSchema;
2016-02-02 02:14:36 +00:00
return rinfo;
}
targetFormat = targetSchema || (srcFmt === 'JRS' ? 'FRESH' : 'JRS');
2016-02-02 02:14:36 +00:00
this.stat(HMEVENT.beforeConvert, {
srcFile: rinfo.file,
srcFmt: srcFmt,
dstFile: dst[idx],
dstFmt: targetFormat
});
try {
2018-02-10 06:10:20 +00:00
rez.saveAs(dst[idx], targetFormat);
} catch (_error) {
err = _error;
if (err.badVer) {
return {
fluenterror: HMSTATUS.invalidSchemaVersion,
quit: true,
data: err.badVer
};
}
}
2018-01-30 07:34:58 +00:00
return rez;
2016-01-27 10:29:26 +00:00
};
}).call(this);
2016-02-02 02:14:36 +00:00
//# sourceMappingURL=convert.js.map