UNPKG

passivemodel

Version:

Model that can be used on both Client & Server

42 lines (31 loc) 970 B
_ = require 'underscore' # Model. module.exports = class Model constructor: (attributes) -> @set @defaults if @defaults @set attributes if attributes @errors = new Model.Errors() eq: (other) -> _.isEqual @, other set: (attributes = {}, options = {}) -> @[k] = v for own k, v of attributes @ clear: -> delete @[k] for own k, v of @ valid: -> @errors.size() == 0 invalid: -> !@valid() # Errors. definePropertyWithoutEnumeration = (obj, name, value) -> Object.defineProperty obj, name, enumerable: false writable: true configurable: true value: value class Model.Errors definePropertyWithoutEnumeration Model.Errors.prototype, 'clear', -> delete @[k] for own k, v of @ definePropertyWithoutEnumeration Model.Errors.prototype, 'add', (args...) -> if args.length == 1 @add attr, message for attr, message of args[0] else [attr, message] = args @[attr] ?= [] @[attr].push message