base-domain
Version:
simple module to help build Domain-Driven Design
125 lines (87 loc) • 2.52 kB
text/coffeescript
BaseFactory = require './base-factory'
###*
factory of dict
DictFactory
BaseFactory
base-domain
###
class DictFactory extends BaseFactory
###*
create instance
###
: (dictModelName, itemFactory) ->
new DictFactory(dictModelName, itemFactory)
###*
###
constructor: (, ) ->
= -> .getFacade()
super
###*
get model class this factory handles
getModelClass
{Function}
###
getModelClass: ->
.getModel()
###*
creates an instance of BaseDict by value
createFromObject
{any} obj
{BaseDict}
###
createFromObject: (obj) ->
if not obj? or typeof obj isnt 'object'
return
if Array.isArray obj
return
DictModel =
{ ids, items } = obj
if items
delete obj.items
items = ( item for key, item of items)
dict = super(obj).setItems items
obj.items = items
else if DictModel.containsEntity()
delete obj.ids
dict = super(obj).setIds ids
obj.ids = ids
else
return super(obj)
return dict
###*
creates an instance of BaseDict from array
createFromArray
{Array} arr
{BaseDict}
###
createFromArray: (arr) ->
DictModel =
firstValue = arr[0]
if not firstValue?
return
if typeof firstValue is 'object'
items = ( obj for obj in arr)
return new DictModel().setItems items
if DictModel.containsEntity()
return new DictModel().setIds arr
throw new Error "cannot create #{@constructor.modelName} with arr\n [#{arr.toString()}]"
###*
creates an instance of BaseDict by value
createEmpty
{BaseDict}
###
createEmpty: ->
DictModel =
return new DictModel().setItems()
###*
create item model
createItemFromObject
{BaseModel}
###
createItemFromObject: (obj) ->
return .createFromObject(obj)
module.exports = DictFactory