base-domain
Version:
simple module to help build Domain-Driven Design
188 lines (139 loc) • 3.28 kB
text/coffeescript
'use strict'
Collection = require './collection'
###*
dictionary-structured data model
BaseDict
Collection
base-domain
###
class BaseDict extends Collection
###*
get unique key from item
key
###
: (item) -> item.id
###*
the number of items
{Number} itemLength
###
Object.defineProperty @::, 'itemLength',
get: ->
return 0 if not
Object.keys().length
###*
items: dictionary of keys - models
{Object} items
###
###*
initItems
###
initItems: ->
= {}
###*
check if the model has submodel of the given key or not
has
{String|Number} key
{Boolean}
###
has: (key) ->
return false if not
[key]?
###*
check if the model contains the given submodel or not
contains
{BaseModel} item
{Boolean}
###
contains: (item) ->
return false if not
key = .key item
sameKeyItem =
sameKeyItem?.equals item
###*
turn on/off the value
toggle
{BaseModel} item
###
toggle: (item) ->
if not
return item
key = .key item
if key
item
else
item
###*
return submodel of the given key
get
{String|Number} key
{BaseModel}
###
get: (key) ->
return undefined if not
[key]
###*
add item to
addItem
{BaseModel} item
###
addItem: (item) ->
key = .key item
[key] = item
###*
remove submodel from items
both acceptable, keys and submodels
remove
{BaseModel|String|Number} item
###
remove: (args...) ->
return if not
ItemClass =
for arg in args
if arg instanceof ItemClass
key = .key(arg)
else
key = arg
item = [key]
delete [key]
if item and
idx = .indexOf(item.id)
.splice(idx, 1) if idx >= 0
return
###*
export models to Array
toArray
###
toArray: ->
return [] if not
(item for key, item of )
###*
get all keys
keys
{Array}
###
keys: ->
return [] if not
(key for key, item of )
###*
iterate key - item
keyValues
{Function} fn 1st argument: key, 2nd argument: value
###
keyValues: (fn, _this) ->
_this ?= @
return if typeof fn isnt 'function' or not
fn.call(_this, key, item) for key, item of
return
module.exports = BaseDict