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

feat: convert: support multiple JRS versions

This commit is contained in:
hacksalot
2018-02-09 21:34:24 -05:00
parent 58fe46dc83
commit 7cfdb95a04
12 changed files with 109 additions and 22 deletions

View File

@ -257,6 +257,9 @@ assembleError = ( ex ) ->
msg = printf M2C( @msgs.themeHelperLoad.msg ), ex.glob
etype = 'error'
when HMSTATUS.invalidSchemaVersion
msg = printf M2C( @msgs.invalidSchemaVersion.msg ), ex.data
etype = 'error'
msg: msg # The error message to display
withStack: withStack # Whether to include the stack

View File

@ -84,6 +84,7 @@ main = module.exports = ( rawArgs, exitCallback ) ->
program
.command('convert')
.description('Convert a resume to/from FRESH or JSON RESUME format.')
.option('-f --format <fmt>', 'FRESH or JRS format and optional version', undefined)
.action(->
x = splitSrcDest.call( this );
execute.call( this, x.src, x.dst, this.opts(), logMsg)

View File

@ -137,3 +137,5 @@ errors:
An error occurred while attempting to load the '%s' theme helper. Is the
theme correctly installed?
dummy: dontcare
invalidSchemaVersion:
msg: "'%s' is not recognized as a valid schema version."

View File

@ -94,13 +94,26 @@ class FreshResume# extends AbstractResume
###*
Save the sheet to disk in a specific format, either FRESH or JSON Resume.
###
saveAs: ( filename, format ) ->
if format != 'JRS'
saveAs: ( filename, format, version ) ->
# If format isn't specified, default to FRESH
safeFormat = (format || 'FRESH').trim()
safeVersion = version || "0"
# Validate against the FRESH version regex
# freshVersionReg = require '../utils/fresh-version-regex'
# if (not freshVersionReg().test( safeFormat ))
# throw badVer: safeFormat
parts = safeFormat.split '@'
if parts[0] == 'FRESH'
@imp.file = filename || @imp.file
FS.writeFileSync @imp.file, @stringify(), 'utf8'
else
newRep = CONVERTER.toJRS this
else if parts[0] == 'JRS'
newRep = CONVERTER.toJRS @, null, if parts.length > 1 then parts[1] else "1"
FS.writeFileSync filename, JRSResume.stringify( newRep ), 'utf8'
else
throw badVer: safeFormat
@

View File

@ -37,3 +37,4 @@ module.exports =
optionsFileNotFound: 28
unknownSchema: 29
themeHelperLoad: 30
invalidSchemaVersion: 31

View File

@ -46,6 +46,20 @@ _convert = ( srcs, dst, opts ) ->
if srcs && dst && srcs.length && dst.length && srcs.length != dst.length
@err HMSTATUS.inputOutputParity, { quit: true }
# Validate the destination format (if specified)
targetVer = null
if opts.format
fmtUp = opts.format.trim().toUpperCase()
freshVerRegex = require '../utils/fresh-version-regex'
matches = fmtUp.match freshVerRegex()
# null
# [ 'JRS@1.0', 'JRS', '1.0', index: 0, input: 'FRESH' ]
# [ 'FRESH', 'FRESH', undefined, index: 0, input: 'FRESH' ]
if not matches
@err HMSTATUS.invalidSchemaVersion, data: opts.format.trim(), quit: true
targetSchema = matches[1]
targetVer = matches[2] || '1'
# If any errors have occurred this early, we're done.
if @hasError()
@reject @errorCode
@ -55,7 +69,7 @@ _convert = ( srcs, dst, opts ) ->
results = _.map srcs, ( src, idx ) ->
# Convert each resume in turn
r = _convertOne.call @, src, dst, idx
r = _convertOne.call @, src, dst, idx, targetSchema, targetVer
# Handle conversion errors
if r.fluenterror
@ -74,12 +88,12 @@ _convert = ( srcs, dst, opts ) ->
###* Private workhorse method. Convert a single resume. ###
_convertOne = (src, dst, idx) ->
_convertOne = (src, dst, idx, targetSchema, targetVer) ->
# Load the resume
rinfo = ResumeFactory.loadOne src,
format: null
objectify: true,
objectify: true
inner:
privatize: false
@ -94,6 +108,8 @@ _convertOne = (src, dst, idx) ->
#@err rinfo.fluenterror, rinfo
return rinfo
# Determine the resume's SOURCE format
# TODO: replace with detector component
rez = rinfo.rez
srcFmt = ''
if rez.meta && rez.meta.format #&& rez.meta.format.substr(0, 5).toUpperCase() == 'FRESH'
@ -104,8 +120,10 @@ _convertOne = (src, dst, idx) ->
rinfo.fluenterror = HMSTATUS.unknownSchema
return rinfo
targetFormat = if srcFmt == 'JRS' then 'FRESH' else 'JRS'
# Determine the TARGET format for the conversion
targetFormat = targetSchema or (if srcFmt == 'JRS' then 'FRESH' else 'JRS')
# Fire the beforeConvert event
this.stat HMEVENT.beforeConvert,
srcFile: rinfo.file
srcFmt: srcFmt
@ -113,5 +131,9 @@ _convertOne = (src, dst, idx) ->
dstFmt: targetFormat
# Save it to the destination format
rez.saveAs dst[idx], targetFormat
try
rez.saveAs dst[idx], targetFormat, targetVer
catch err
if err.badVer
return fluenterror: HMSTATUS.invalidSchemaVersion, quit: true, data: err.badVer
rez