/** * Holds a plain key-value javascript object and monitorizes changes over it. */ module.exports = new Class({ Properties: { /** * The internal object with the params, this is the lot internal object * and should be used for read-only purposes. */ params: { type: Object }, /** * Shortcut for params property. */ $: { type: Object } }, /** * Gets a value from the lot. * * @param {string} field The field name * @return {*} The field value */ get(field) { return this.params[field]; }, /** * Sets a value on the lot. * * @param {string} field The field name * @param {*} value The new field value */ set(field, value) { this.assign({[field]: value}); }, unset(field) { this.assign({[field]: undefined}); }, /** * Returns an array with the lot keys. * * @return {Array} The lot keys */ keys() {}, /** * Emits the 'change' signal on the lot. * * @param {Object} changes The changed params and its values */ changed(changes) { this.emit('change', changes); }, /** * Copies all values from another lot. * * @param {Object} object The source object */ assign() {}, /** * Copies all values from another lot. * * @param {LotIface} lot The source lot */ assignLot(lot) { this.assign(lot.$); }, /** * Resets all values. */ reset() { this.params = {}; } });