UNPKG

base-domain

Version:

simple module to help build Domain-Driven Design

153 lines (107 loc) 2.19 kB
'use strict' Collection = require './collection' ###* list class of DDD pattern. @class BaseList @extends Collection @module base-domain ### class BaseList extends Collection ###* the number of items @property itemLength @type number @public ### Object.defineProperty @::, 'itemLength', get: -> return 0 if not @loaded() @items.length ###* items: array of models @property {Array} items ### ###* @constructor @params {any} props @params {RootInterface} root ### constructor: (props = {}, root) -> super(props, root) ###* @method initItems @protected ### initItems: -> @items = [] ###* @method addItems @param {Array(BaseModel|Object)} items @protected ### addItems: (items) -> super if @sort @items.sort(@sort) if @isItemEntity @ids = (item.id for item in @items) ###* add item to @items @method addItem @protected @param {BaseModel} item ### addItem: (item) -> @items.push item ###* remove item by index @method remove @param {Number} index ### remove: (index) -> return if not @loaded() @items.splice(index, 1) @ids.splice(index, 1) if @isItemEntity ###* sort items in constructor @method sort @protected @abstract @param modelA @param modelB @return {Number} ### #sort: (modelA, modelB) -> ###* first item @method first @public ### first: -> return undefined if not @loaded() @items[0] ###* last item @method last @public ### last: -> return undefined if not @loaded() @items[@length - 1] ###* get item by index @method getByIndex @public ### getByIndex: (idx) -> return undefined if not @loaded() @items[idx] ###* export models to Array @method toArray @public ### toArray: -> return [] if not @loaded() @items.slice() module.exports = BaseList