94 lines
2.4 KiB
CoffeeScript
94 lines
2.4 KiB
CoffeeScript
#
|
|
# Crafting Guide - parser_data.coffee
|
|
#
|
|
# Copyright © 2014-2016 by Redwood Labs
|
|
# All rights reserved.
|
|
#
|
|
|
|
########################################################################################################################
|
|
|
|
module.exports = class ParserData
|
|
|
|
constructor: ->
|
|
@clear()
|
|
|
|
@_toAssemble = []
|
|
@_toBuild = []
|
|
@_toValidate = []
|
|
|
|
# Public Methods ###############################################################################
|
|
|
|
addError: (command, message)->
|
|
if not command? then throw new Error 'command is required'
|
|
message ?= 'is not valid'
|
|
@_errors.push command:command, message:message
|
|
|
|
create: (command, type, id=null)->
|
|
id ?= _.uniqueId "#{type}-"
|
|
|
|
typeData = @_findOrCreateType type
|
|
itemData = @_current = typeData['current'] = typeData[id] = id:id, command:command, type:type
|
|
|
|
@_toAssemble.push itemData
|
|
@_toBuild.push itemData
|
|
@_toValidate.push itemData
|
|
|
|
return itemData
|
|
|
|
clear: ->
|
|
@_current = null
|
|
@_data = {}
|
|
@_errors = []
|
|
|
|
get: (type, id)->
|
|
typeData = @_findOrCreateType type
|
|
itemData = typeData[id] or null
|
|
return itemData
|
|
|
|
getCurrent: (type)->
|
|
return @_current unless type?
|
|
|
|
typeData = @_findOrCreateType type
|
|
current = typeData['current'] or null
|
|
return current
|
|
|
|
popNextToAssemble: ->
|
|
return @_toAssemble.pop() or null
|
|
|
|
popNextToBuild: ->
|
|
return @_toBuild.pop() or null
|
|
|
|
popNextToValidate: ->
|
|
return @_toValidate.pop() or null
|
|
|
|
# Property Methods #############################################################################
|
|
|
|
getErrors: ->
|
|
return @_errors[..]
|
|
|
|
getIsAssembled: ->
|
|
return @_toAssemble.length > 0
|
|
|
|
getIsBuilt: ->
|
|
return @_toBuild.length > 0
|
|
|
|
getIsValidated: ->
|
|
return @_toValidate.length > 0
|
|
|
|
Object.defineProperties @prototype,
|
|
errors: { get:@::getErrors }
|
|
isAssembled: { get:@::getIsAssembled }
|
|
isBuilt: { get:@::getIsBuilt }
|
|
isValidated: { get:@::getIsValidated }
|
|
|
|
|
|
# Private Methods ##############################################################################
|
|
|
|
_findOrCreateType: (type)->
|
|
typeData = @_data[type]
|
|
if not typeData?
|
|
typeData = @_data[type] = {}
|
|
typeData.type = type
|
|
|
|
return typeData
|