mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2025-05-10 07:47:07 +01:00
Refactor verb invocations to base.
This commit is contained in:
@ -19,12 +19,7 @@ chalk = require('chalk')
|
||||
|
||||
AnalyzeVerb = module.exports = Verb.extend
|
||||
|
||||
init: -> @._super 'analyze'
|
||||
|
||||
invoke: ->
|
||||
@.stat HMEVENT.begin, { cmd: 'analyze' }
|
||||
analyze.apply @, arguments
|
||||
@.stat HMEVENT.end
|
||||
init: -> @_super 'analyze', analyze
|
||||
|
||||
|
||||
|
||||
|
@ -42,14 +42,7 @@ loadTheme = null
|
||||
BuildVerb = module.exports = Verb.extend
|
||||
|
||||
###* Create a new build verb. ###
|
||||
init: () -> @._super 'build'
|
||||
|
||||
###* Invoke the Build command. ###
|
||||
invoke: ->
|
||||
@stat HMEVENT.begin, { cmd: 'build' }
|
||||
ret = build.apply @, arguments
|
||||
@stat HMEVENT.end
|
||||
return ret
|
||||
init: () -> @_super 'build', build
|
||||
|
||||
|
||||
|
||||
@ -58,13 +51,13 @@ Given a source resume in FRESH or JRS format, a destination resume path, and a
|
||||
theme file, generate 0..N resumes in the desired formats.
|
||||
@param src Path to the source JSON resume file: "rez/resume.json".
|
||||
@param dst An array of paths to the target resume file(s).
|
||||
@param theme Friendly name of the resume theme. Defaults to "modern".
|
||||
@param logger Optional logging override.
|
||||
@param opts Generation options.
|
||||
###
|
||||
build = ( src, dst, opts ) ->
|
||||
|
||||
if !src || !src.length
|
||||
@err HMSTATUS.resumeNotFound, { quit: true }
|
||||
@err HMSTATUS.resumeNotFound, quit: true
|
||||
return null
|
||||
|
||||
prep src, dst, opts
|
||||
|
||||
@ -74,10 +67,14 @@ build = ( src, dst, opts ) ->
|
||||
}, @);
|
||||
|
||||
# Explicit check for any resume loading errors...
|
||||
if !sheetObjects || _.some( sheetObjects, (so) -> return so.fluenterror )
|
||||
problemSheets = _.filter( sheetObjects, (so) -> return so.fluenterror )
|
||||
if( problemSheets && problemSheets.length )
|
||||
problemSheets[0].quit = true
|
||||
@err problemSheets[0].fluenterror, problemSheets[0]
|
||||
return null
|
||||
|
||||
sheets = sheetObjects.map((r) -> return r.json )
|
||||
# Get the collection of raw JSON sheets
|
||||
sheets = sheetObjects.map (r) -> r.json
|
||||
|
||||
# Load the theme...
|
||||
theme = null
|
||||
@ -85,12 +82,14 @@ build = ( src, dst, opts ) ->
|
||||
try
|
||||
tFolder = verifyTheme.call @, _opts.theme
|
||||
theme = _opts.themeObj = loadTheme tFolder
|
||||
addFreebieFormats theme
|
||||
catch ex
|
||||
newEx =
|
||||
fluenterror: HMSTATUS.themeLoad
|
||||
inner: ex
|
||||
attempted: _opts.theme
|
||||
this.err HMSTATUS.themeLoad, newEx
|
||||
quit: true
|
||||
@err HMSTATUS.themeLoad, newEx
|
||||
return null
|
||||
|
||||
@stat HMEVENT.afterTheme, { theme: theme }
|
||||
@ -98,7 +97,8 @@ build = ( src, dst, opts ) ->
|
||||
# Check for invalid outputs...
|
||||
inv = verifyOutputs.call @, dst, theme
|
||||
if inv && inv.length
|
||||
@err HMSTATUS.invalidFormat, { data: inv, theme: theme }
|
||||
@err HMSTATUS.invalidFormat, data: inv, theme: theme, quit: true
|
||||
return null
|
||||
|
||||
## Merge input resumes, yielding a single source resume.
|
||||
rez = null
|
||||
@ -107,7 +107,7 @@ build = ( src, dst, opts ) ->
|
||||
mixed = _.any sheets, (s) -> return if isFRESH then s.basics else !s.basics
|
||||
@stat HMEVENT.beforeMerge, { f: _.clone(sheetObjects), mixed: mixed }
|
||||
if mixed
|
||||
this.err HMSTATUS.mixedMerge
|
||||
@err HMSTATUS.mixedMerge
|
||||
|
||||
rez = _.reduceRight sheets, ( a, b, idx ) ->
|
||||
extend( true, b, a )
|
||||
@ -125,7 +125,6 @@ build = ( src, dst, opts ) ->
|
||||
@stat HMEVENT.afterInlineConvert, { file: sheetObjects[0].file, fmt: toFormat }
|
||||
|
||||
# Add freebie formats to the theme
|
||||
addFreebieFormats theme
|
||||
@stat HMEVENT.applyTheme, { r: rez, theme: theme }
|
||||
|
||||
# Load the resume into a FRESHResume or JRSResume object
|
||||
@ -235,11 +234,9 @@ single = ( targInfo, theme, finished ) ->
|
||||
|
||||
|
||||
|
||||
###*
|
||||
Ensure that user-specified outputs/targets are valid.
|
||||
###
|
||||
###* Ensure that user-specified outputs/targets are valid. ###
|
||||
verifyOutputs = ( targets, theme ) ->
|
||||
@.stat HMEVENT.verifyOutputs, { targets: targets, theme: theme }
|
||||
@stat HMEVENT.verifyOutputs, { targets: targets, theme: theme }
|
||||
_.reject targets.map( ( t ) ->
|
||||
pathInfo = parsePath t
|
||||
{
|
||||
@ -247,6 +244,8 @@ verifyOutputs = ( targets, theme ) ->
|
||||
}),
|
||||
(t) -> t.format == 'all' || theme.hasFormat( t.format )
|
||||
|
||||
|
||||
|
||||
###*
|
||||
Reinforce the chosen theme with "freebie" formats provided by HackMyResume.
|
||||
A "freebie" format is an output format such as JSON, YML, or PNG that can be
|
||||
|
@ -17,12 +17,7 @@ HMEVENT = require('../core/event-codes');
|
||||
|
||||
ConvertVerb = module.exports = Verb.extend
|
||||
|
||||
init: -> @._super 'convert'
|
||||
|
||||
invoke: ->
|
||||
@.stat HMEVENT.begin, { cmd: 'convert' }
|
||||
convert.apply @, arguments
|
||||
@.stat HMEVENT.end
|
||||
init: -> @_super 'convert', convert
|
||||
|
||||
|
||||
|
||||
|
@ -17,13 +17,8 @@ HMEVENT = require('../core/event-codes')
|
||||
|
||||
CreateVerb = module.exports = Verb.extend
|
||||
|
||||
init: -> @._super('new')
|
||||
init: -> @_super 'new', create
|
||||
|
||||
invoke: ->
|
||||
@.stat HMEVENT.begin, { cmd: 'create' }
|
||||
create.apply @, arguments
|
||||
@.stat HMEVENT.begin, { cmd: 'convert' }
|
||||
return
|
||||
|
||||
|
||||
###*
|
||||
|
@ -17,12 +17,7 @@ HMEVENT = require('../core/event-codes')
|
||||
|
||||
PeekVerb = module.exports = Verb.extend
|
||||
|
||||
init: -> @._super('peek')
|
||||
|
||||
invoke: ->
|
||||
@.stat HMEVENT.begin, { cmd: 'peek' }
|
||||
peek.apply @, arguments
|
||||
@.stat HMEVENT.end
|
||||
init: -> @_super 'peek', peek
|
||||
|
||||
|
||||
|
||||
|
@ -21,13 +21,7 @@ safeLoadJSON = require '../utils/safe-json-loader'
|
||||
###* An invokable resume validation command. ###
|
||||
ValidateVerb = module.exports = Verb.extend
|
||||
|
||||
init: -> @_super 'validate'
|
||||
|
||||
invoke: ->
|
||||
@stat HMEVENT.begin, { cmd: 'validate' }
|
||||
ret = validate.apply @, arguments
|
||||
@stat HMEVENT.end
|
||||
return ret
|
||||
init: -> @_super 'validate', validate
|
||||
|
||||
|
||||
|
||||
|
@ -6,10 +6,10 @@ Definition of the Verb class.
|
||||
|
||||
|
||||
|
||||
|
||||
# Use J. Resig's nifty class implementation
|
||||
Class = require '../utils/class'
|
||||
EVENTS = require 'events'
|
||||
HMEVENT = require '../core/event-codes'
|
||||
|
||||
|
||||
|
||||
@ -22,24 +22,34 @@ Verb = module.exports = Class.extend
|
||||
|
||||
|
||||
###* Constructor. Automatically called at creation. ###
|
||||
init: ( moniker ) ->
|
||||
@.moniker = moniker
|
||||
@.emitter = new EVENTS.EventEmitter()
|
||||
init: ( moniker, workhorse ) ->
|
||||
@moniker = moniker
|
||||
@emitter = new EVENTS.EventEmitter()
|
||||
@workhorse = workhorse
|
||||
return
|
||||
|
||||
|
||||
|
||||
###* Invoke the command. ###
|
||||
invoke: ->
|
||||
@stat HMEVENT.begin, cmd: @moniker
|
||||
ret = @workhorse.apply @, arguments
|
||||
@stat HMEVENT.end
|
||||
ret
|
||||
|
||||
|
||||
|
||||
###* Forward subscriptions to the event emitter. ###
|
||||
on: ->
|
||||
this.emitter.on.apply @.emitter, arguments
|
||||
@emitter.on.apply @emitter, arguments
|
||||
|
||||
|
||||
|
||||
###* Fire an arbitrary event, scoped to "hmr:". ###
|
||||
fire: (evtName, payload) ->
|
||||
payload = payload || { }
|
||||
payload.cmd = this.moniker
|
||||
this.emitter.emit 'hmr:' + evtName, payload
|
||||
payload.cmd = @moniker
|
||||
@emitter.emit 'hmr:' + evtName, payload
|
||||
true
|
||||
|
||||
|
||||
@ -60,10 +70,11 @@ Verb = module.exports = Class.extend
|
||||
stat: ( subEvent, payload ) ->
|
||||
payload = payload || { }
|
||||
payload.sub = subEvent
|
||||
this.fire 'status', payload
|
||||
@fire 'status', payload
|
||||
true
|
||||
|
||||
|
||||
|
||||
###* Associate error info with the invocation. ###
|
||||
setError: ( code, obj ) ->
|
||||
@errorCode = code
|
||||
|
Reference in New Issue
Block a user