API Docs for:
Show:

File: src/mylist/MyListMeta.coffee

###*
#
#
#
# Methods
#   - attr(attr: string)
#       指定したプロパティの値を取得します。
#   - isDefaultList(): boolean
#       このリストが"とりあえずマイリスト"か判定します。
#   - getInterface(): MyList
#       現在のインスタンスのマイリストと対応するMyListインスタンスを取得します。
#   - toJSON(): Object
#       インスタンスのプロパティを複製します。
#
# Events
#   (none)
#
# Properties
#   attrメソッドを介して取得します。(とりあえずマイリストの場合,idとname以外設定されません。)
#       Example. mylist.attr("id") // -> マイリストIDを取得
###
_ = require "lodash"
__ = require "lodash-deep"
MyList = require "./MyList"

###*
# マイリストのメタデータを表すクラスです。
# このモデルからマイリストを操作することはできません。
# @class MyListMeta
###
module.exports =
class MyListMeta
    @defaults :
        id          : -1
        name        : null
        description : null
        public      : null
        iconId      : -1
        defaultSort : -1
        sortOrder   : -1
        userId      : -1
        createTime  : null
        updateTime  : null

    ###*
    # @param {Object}   metaInfo    Result of mylistgroup/list API
    ###
    @instance : (metaInfo) ->
        meta = new MyListMeta
        meta._attr = MyListMeta.parse(metaInfo)

        Object.defineProperties meta,
            id :
                value : meta.get("id")

        meta

    ###*
    # @param {Object}   metaInfo    Result of mylistgroup/list API
    ###
    @parse : (metaInfo) ->
        if metaInfo is "home"
            attr = _.defaults
                id: "home"
                name: "とりあえずマイリスト"
                public : false
            , MyListMeta.defaults

            return attr

        attr = _.defaults
            id          : metaInfo.id | 0
            name        : metaInfo.name
            description : metaInfo.description
            public      : (metaInfo.public | 0) is 1
            iconId      : metaInfo.icon_id | 0
            defaultSort : metaInfo.default_sort | 0
            sortOrder   : metaInfo.sort_order | 0
            userId      : metaInfo.user_id | 0
            createTime  : new Date(metaInfo.create_time * 1000)
            updateTime  : new Date(metaInfo.update_time * 1000)
        , MyListMeta.defaults

        attr

    ###*
    # @private
    # @property {String|Number}     _id
    ###
    _id : null

    ###*
    # @private
    # @property {Number}    _attributes.id              マイリストID
    # @property {String}    _attributes.description     マイリストの説明
    # @property {Number}    _attributes.userId          ユーザー番号
    # @property {Number}    _attributes.defaultSort     標準のソート方法(?)
    # @property {Number}    _attributes.sortOrder       ソート方式(?)
    # @property {Number}    _attributes.iconId          マイリストのアイコンID
    # @property {String}    _attributes.name            リスト名
    # @property {Boolean}   _attributes.public          公開マイリストかどうか
    # @property {Date}      _attributes.createTime      マイリストの作成日
    # @property {Date}      _attributes.updateTime      マイリストの更新日
    ###
    _attr : null


    ###*
    # 指定したプロパティの値を取得します。
    # @param {string} attr プロパティ名
    ###
    get             : (attr) ->
        return __.deepGet(@_attr, attr)


    ###*
    # このマイリストが"とりあえずマイリスト"か検証します。
    # @return {boolean}
    #   "とりあえずマイリスト"ならtrueを返します。
    ###
    isDefaultList   : ->
        @attr("id") is "home"


    ###*
    # オブジェクトと対応するMyListインスタンスを取得します。
    # @return {Promise}
    ###
    getMyList  : ->
        return new MyList @get("id")


    ###*
    # インスタンスのプロパティを複製します。
    # @return {Object}
    ###
    toJSON          : ->
        return _.clone @_attr