Last active
December 14, 2015 15:38
-
-
Save sheenobu/5109003 to your computer and use it in GitHub Desktop.
Dynamic and chainable read only models in coffee-script.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| extend = (object, properties) -> | |
| for key, val of properties | |
| object[key] = val | |
| object | |
| merge = (options, overrides) -> | |
| extend (extend {}, options), overrides | |
| class Model | |
| field: (name) -> | |
| @fields ?= [] | |
| @fields.push(name) | |
| @constructor::[name] = () -> | |
| if arguments.length == 0 | |
| @attributes[name] | |
| else | |
| a = {} | |
| a[name] = arguments[0] | |
| a = merge(@attributes,a) | |
| return new @constructor(a) | |
| class Task2 extends Model | |
| constructor: (@attributes) -> | |
| @field "desc" | |
| class Task3 extends Model | |
| constructor: (@attributes) -> | |
| @field "desc3" | |
| t = new Task2("desc":"ASDFG") | |
| t2 = t | |
| console.log(t.desc(), t.desc() == t2.desc()) | |
| console.log(t.desc(), t.desc() == "ASDFG") | |
| t3 = t.desc("ASDF") | |
| console.log(t2.desc(), t2.desc() == "ASDFG") | |
| console.log(t.desc(), t.desc() == "ASDFG") | |
| console.log(t3.desc(), t3.desc() == "ASDF") | |
| tx = new Task3("desc3":"X") | |
| console.log(t2.desc(), t2.desc() == "ASDFG") | |
| console.log(t.desc(), t.desc() == "ASDFG") | |
| console.log(t3.desc(), t3.desc() == "ASDF") | |
| console.log(tx.desc3(), tx.desc3() == "X") | |
| console.log(tx.desc, tx.desc == undefined) | |
| console.log(t2.desc3, t2.desc3 == undefined) | |
| console.log(t.desc3, t.desc3 == undefined) | |
| console.log(t3.desc3, t3.desc3 == undefined) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ASDFG true | |
| ASDFG true | |
| ASDFG true | |
| ASDFG true | |
| ASDF true | |
| ASDFG true | |
| ASDFG true | |
| ASDF true | |
| X true | |
| undefined true | |
| undefined true | |
| undefined true | |
| undefined true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment