{"_id":"human-model","_rev":"41-2e6416c059bb80ffebdf51f93e9cf85e","name":"human-model","description":"<!-- starthide --> Part of the [Human Javascript toolkit](http://docs.humanjavascript.com) for building clientside applications. <!-- endhide -->","dist-tags":{"latest":"2.6.2"},"versions":{"0.3.0":{"name":"human-model","version":"0.3.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.4.4"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@0.3.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"4df3a7a5d8892edce51dec763999e3b62d8e30d0","tarball":"https://registry.npmjs.org/human-model/-/human-model-0.3.0.tgz","integrity":"sha512-TJkdCQNwLeknaLGf7myMIGtXIvPDKLRJfwRefBLzeds8Q3/bW/ELJlzCkcZnURepTd2KQgJYMOWVQDt8psVJfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYZIPFp+SKpslvazcK7c9I8bThAdN/wKLbQdHHNIYRJAiEA+jYYFSGVuj2cRErNQLBJLwo49O2I3ETQYGDQKzSEvIM="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.0.0":{"name":"human-model","version":"1.0.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.4.4"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.0.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"0f229c10776debbf3062cd62da89fbbb6c7f2f8f","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.0.0.tgz","integrity":"sha512-sh1B9BNrR94MLZCLf1SdVGtsWoSnwWhOWIyEoJ+5jwAYL7RZvAsx+ZDraO9u2HPgDpQ9NQ1Y3cEks5olNYnEkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbvPwuHikIzKMCrt5iq+23Hs+DNcRR40LoWZA2wJbc2AIgHn0dPFour9xvZzEu+X+s4KwkOcU0O7vnfrvGDkBz5x0="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.1.0":{"name":"human-model","version":"1.1.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.1.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"c9fbe6429ad3275c59fc2666ce3d1edc082c743d","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.1.0.tgz","integrity":"sha512-N7oUmNLyVGaA7D5b9aBs+L1wmZXipPcn9ih+aNcX8PanVHYWiSLBJGuDwEdjuVRlPCHE3iKgoJrrNEdl6VotVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdneQFBjkvMlJgXv0LQcwIp9ttitpez0fUDnxMs1ebcQIgVGaGPb4sQRn49I3MOOSkMlPzWwza5f3ZdpCTUYNptWY="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.1.1":{"name":"human-model","version":"1.1.1","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.1.1","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"cf220ffc0c24604d5831a3fe9f61ce89069773d2","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.1.1.tgz","integrity":"sha512-ueczbckV22tAt3fquq2b1fzG5eXs57a+uzfnlUqTM0sfgOQzI0qUfh4gFPzHbKAY3JepPu8sgZf/OXDe9Z2a7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWwa2H7pqWgl9Mq7uLpwPLePOM4vEjjLgeYv9WB+So4gIhAJoQt48HM2vfXzHVrN8ij5uou4+5mfjn26rwhLQWcwef"}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.1.2":{"name":"human-model","version":"1.1.2","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.1.2","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"97a2034f84af26cbec953125dbc096e18c76cf80","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.1.2.tgz","integrity":"sha512-qi53pAlSdkIpJKRloZizcPLw16yLJ8jbJ/9LjKW2L5t4R0AB1W8y5PypDy4w3Xv7mpRXkE03ny8yjPQNZkbZpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYbB2CHkaQZN3l0yvTS3CqM2OKxeeVbRjh6TngmyhErAiEA8rl7zIaZOV6SKFvG0QmyrCkraLPWQ1pHAYqfun8XLvc="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.1.3":{"name":"human-model","version":"1.1.3","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.1.3","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"2a231c4ddb95670a143fe52999d2e3dd130f3925","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.1.3.tgz","integrity":"sha512-3x1pI8eGiBVRhI3yj4+G2K7E5oy0/QILcfjUvBwCHIYQymHGd78By9ypJS5OrogecSS2gcy1pfezhmi5If704A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwuLvyal3EOclFhdfHevkIT2UaiVPYZSHL5b6WOhQayAIgU+EmBjQFAumsA1jURDvFyqrdGJPdnJQgrh9K49behoM="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.2.0":{"name":"human-model","version":"1.2.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.2.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"a57298dcf1682f820dc394615d662b02a9c80b8a","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.2.0.tgz","integrity":"sha512-+xZQH/IcY/eHksVgrW/RZUs3vPj/IQf+kVp/6XcnOKiWqUBeWJP6Vou7Btv4uKrnlqpGXjWWSORBdCF6G9KBCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuEgbkpWIFYmzjt02MPYtC8aV57QADOaFs+TBDPtzSVAiAfuRaVeSBQYZ8AMxOiHC9qpTw1qp1YNg4TZCGbGRDBPA=="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.3.0":{"name":"human-model","version":"1.3.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.3.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"4a32420d948f34554555289f724407138262496b","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.3.0.tgz","integrity":"sha512-38j2XwQ95gEdL3trrt45D4+7EP2lFMS3upIoDaSou7/rSLLROggRKCDMNKBfDqZsKS0pyeWdESI1jOaWIrYXpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXnmBl84H6hH684wU6fJLd+IDAINOPbhkK+FhxkxpTwAiAjLJTFMMTxblLZNs9V2GohBieuFe0L4PyrgVYFDfOoEQ=="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.3.1":{"name":"human-model","version":"1.3.1","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.3.1","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"ac64ad7174e091720f74eafa4de34f2455eb4ecd","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.3.1.tgz","integrity":"sha512-TfzN7LlG0yS6WsYWdH4ostjzuL69KH7v7WVRy7YHhmPicabeWhJL2WAzuo4w8VXoHVG4FO3UMTscwOXI38M5DA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/gl/ezEaA3pGGudrb80oqDl2Ol0DM04APjF0yIieUdQIgf9Z/I2i21rDhhEcMWb5pjH9B3r6Xzhu9QiIWecZR90Y="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"1.4.0":{"name":"human-model","version":"1.4.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@1.4.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"7e0292cdfde43c4265d5b30847e226854911a833","tarball":"https://registry.npmjs.org/human-model/-/human-model-1.4.0.tgz","integrity":"sha512-adAGHS5vJ9anM+9zC9DvGi77lJuyDYEOkuRq8N2gIIkeX69OpMbo3RJRB6HyybzzSWyxVDwBsXqN5tDplVXtKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+YddAL1i9JfJSGyCBbePhC7NHkIELBmYokXCm72QCwAiEA6pjuwPnI2c2c+m0yr6gV5o4V4zOJW4aYIvlkqopv5Oc="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.0.0":{"name":"human-model","version":"2.0.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@2.0.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"2f0b65d560e126e16033f4d4a470ac4d515a0847","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.0.0.tgz","integrity":"sha512-7C11IcNTnID7rljjBcIdbjGAK1s0EzOCsuzM4OWh6PfSMEC5I35AtmzrKWi0TVvo1/e4FJv1MVVLV4JH+e9iXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5zit4EGfbteVRKpzoZ77DhyiPFu/r4GrJ8yc5KiEuwAiBOLvKgfFF2xaFCshlrfYV8PbaUrm8PIeRL48W/X743HQ=="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.1.0":{"name":"human-model","version":"2.1.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@2.1.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"dc08b7af37b14fc851b117dd35e80c0b819ad221","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.1.0.tgz","integrity":"sha512-gp3mgJuzcvStYzVv/fkuT5nb1iAKFAWgUo1ErZme70qyfWF6t/oZ1+r0f8XBSh5TK85Q5YRr9lXhLUfc98E92Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaz+IeqWl0nWXe2/2HjFQkGdC2YAw1vRhrzQAtbjGp4AIgNO47jWuhurOHR8N+hL73yxPI6BDUnC3MnAN+p50q1DE="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.2.0":{"name":"human-model","version":"2.2.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@2.2.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"91fb5770a448b99a202953ae3c52a83581cc2d21","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.2.0.tgz","integrity":"sha512-eBwM9P7gq0598FZFjkhocrHRxL8rCVadG3H/YurfRMdjXkadu/X25yij64QJSqnMrL3SZ2X13p40yyhWXQp3Ng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqlbXtxr3y1QuTaeCKzMEZqVBk8SORkR0egcxChQhj9QIhAKmYIbZ0Hof7DuyK+UU+JV/CTH41SvA0BHdihsEwhOi5"}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.3.0":{"name":"human-model","version":"2.3.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","_id":"human-model@2.3.0","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","dist":{"shasum":"03a698826c647032ffa3a69f05d26178620d3b44","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.3.0.tgz","integrity":"sha512-h3gkG9zM6SPmjiw2Hbc/A5E0gLbckZDB5mVng5GBD2l0lMP8PKPwfIsP2g+uCUU/yRuSCZIQX/xNKUDym9tM7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxqT/4L4gkVNvaylFZksakWZwRUURBU6CJ14wCGkHYCAiA5VSU6+u3oTR1QEz6nK9651As5NNWg4wUkpgjzFDazuQ=="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.4.0":{"name":"human-model","version":"2.4.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"contributors":[{"name":"Beau Sorensen"},{"name":"Lance Stout","email":"lance@andyet.net"},{"name":"Philip Roberts","email":"phil@andyet.net"}],"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.4","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"_id":"human-model@2.4.0","dist":{"shasum":"f7ca8d42e313334eb216798c1693c024d0dfc2b7","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.4.0.tgz","integrity":"sha512-AjI8f26Gbo/GIuZJjpjL0EBkf+9YPA0IF/eKuoIamDYfESsrFdXAJS8v38mbEQ5pTmZkLcWLXetlOOrw306RmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICcbNv9eDUSdgqz9wlrNkpCMmvWqAWItz505c9Li7buyAiAtpf/38CLrpO/AmydtXQCJEqmMLKwSvY9bRdS1DS0JMA=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.5.0":{"name":"human-model","version":"2.5.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.8","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"_id":"human-model@2.5.0","dist":{"shasum":"4b81200912729c5f917ab73ad81a3786b83db2da","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.5.0.tgz","integrity":"sha512-kwHWrL/ymIFghMPxd5COMYrmSpyfodWe7zGE/Cmq9kW36PGtxnqb0wyvY2qRfLZOlxShZXZlnrWodNdyU/etjA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF08QMyNonxcSL4MV05/Shwjc4TtrQ0pdzFzNYqiNf2mAiAPe38wmj8neZK9sOJplskNrqNylYQkQEJRiCV902wrRQ=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.6.0":{"name":"human-model","version":"2.6.0","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.8","uglify-js":"2.4.0"},"scripts":{"build":"node build.js"},"main":"./human-model.js","browser":"./human-model.js","description":"Human Models are meant to work as a drop-in replacement for Backbone models. In fact, it's extensively tested against the unit tests from Backbone (open test/index.html to run).","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"_id":"human-model@2.6.0","dist":{"shasum":"4c8913fa687968feb34c2cdb7aab7b93841d90b5","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.6.0.tgz","integrity":"sha512-VGsGiLQ5uKISzUu1T5tVYNF6hhPEpqcJpFhJfiU8ocIllzahfQL5pLWoPNGBOQAadFfuClUXIkiU39LUjmGkvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYqjngaZdn0tkgLOlaUNgY7Y6RyiEiJAHokgW9PDaZmgIgKdE2uTPDVZp8Xiot3zydLjvNwfIwfsAEgvcz76uXLig="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.6.1":{"name":"human-model","version":"2.6.1","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.8","uglify-js":"2.4.0"},"scripts":{"build":"node build.js","test":"npm run build && open ./test/index.html"},"main":"./human-model.js","browser":"./human-model.js","description":"<!-- starthide --> Part of the [Human Javascript toolkit](http://docs.humanjavascript.com) for building clientside applications. <!-- endhide -->","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"homepage":"https://github.com/henrikjoreteg/human-model","_id":"human-model@2.6.1","dist":{"shasum":"573bc8a85fb57131b1da8f83e2cf823d87410aa5","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.6.1.tgz","integrity":"sha512-WXHN9i5Okeb58vecokOUqNfFL4SmUUY5GvwOeLRGbHxbIHxq+yDoGWAAFFQiyD5SmFQy7IioNyzp3hkYIN2hQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+ExoAz3zzC6ddhqOk2Ai4L2zqFG/PWUNQzsZyP4ghBQIgB1WmhuXVrZCzM+k6aILWAhR0twyWyGCy2YI997ml+Ro="}]},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}]},"2.6.2":{"name":"human-model","version":"2.6.2","author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"dependencies":{"backbone":"1.0.0","underscore":"1.5.1"},"devDependencies":{"precommit-hook":"0.3.8","uglify-js":"2.4.0"},"scripts":{"build":"node build.js","test":"npm run build && open ./test/index.html"},"main":"./human-model.js","browser":"./human-model.js","gitHead":"d5b47efef098ed3f0b67ff57c2255ec9a11dc179","description":"<!-- starthide --> Part of the [Human Javascript toolkit](http://docs.humanjavascript.com) for building clientside applications. <!-- endhide -->","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"homepage":"https://github.com/henrikjoreteg/human-model","_id":"human-model@2.6.2","_shasum":"4831e2bf4dccc88d32349dd4203811006e199aac","_from":".","_npmVersion":"1.4.23","_npmUser":{"name":"henrikjoreteg","email":"henrik@andyet.net"},"maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}],"dist":{"shasum":"4831e2bf4dccc88d32349dd4203811006e199aac","tarball":"https://registry.npmjs.org/human-model/-/human-model-2.6.2.tgz","integrity":"sha512-IOXt+kq7sdAPmbrSWYGUle04MoLvD7fIfA1SUb5rY8+LS1vZaLGsBzH9Mz3a7Eud+sR1uPa3dtg6ZiPWCU6Z4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKeo8f3TxZ+Mk1B0XO+X7likwo/yxJQ5fnJrzfEgAdpQIhAKVLSbU6jnNs8QgIld2FPGZdRPJzhtO2NHBiKfkJiR6e"}]}}},"readme":"# human-model\n\n<!-- starthide -->\nPart of the [Human Javascript toolkit](http://docs.humanjavascript.com) for building clientside applications.\n<!-- endhide -->\n\nHumanModel helps you create observable models for your apps. Most commonly in clientside frameworks, your models are what hold data fetched from your API. But really, it's all about having a way to separate concerns. Your models should be your authoritive \"source of truth\" when it comes to all state held in your application.\n\nBackbone provides observable models, but Human Model takes this a step further by forcing you to explicitly define what the model is going to store so that the model code can end up being self-documenting in that you can now simply look at the model code and see what they're expected to store.\n\nThis is hugely important for enabling teams to work on the same app together. There's also a few extra goodies, like direct accessors (not having to use `.set()` and `.get()`), and intelligently evented dervied properties.\n\n## Installing\n\nvia npm:\n\n```\nnpm install human-model\n```\n\nvia bower: \n\n```\nbower install human-model\n```\n\n## Module sytems/loaders/managers\n\nThanks to @svnlto, HumanModel uses UMD so it works as CommonJS (node + browserify), AMD, and as a standalone script tag.\n\n## Types of state\n\nTake for instance a `selected` property on a model. That's likely something you would use to represent current UI state for the current browser session but not something you'd want to save back to the API when calling a model's .save() method. So there really are two types of state. It's challenging to make that type of distinction with Backbone.\n\nHumanModel supports three types of state that will get stored on a model: \n\n - **properties**: State that comes from (and will be sent back to) our API and represents the data persisted on the server.\n - **session properties**: State that represents current browser session state. \n - **derived properties**: These are read-only psuedo properties that are usually derived from properties or session properties. These are generally created for convenince or as a means to let you cache a computed result (read more below).\n\nIn human model you have to classify all your properties as either `prop` or a `session`. That includes declaring your `id` property. How HumanModel handles properties that you have not pre-defined is determined by its `extraProperties` setting. But, by default properties that are `.set()` on a model that you have not defined are simply ignored.\n\n\n## Handling model relationships\n\nFrom our experience, derived properties work really well for handling relationships between models. Let's say you've got a model representing people and model representing a group of people. Often your API for fetching people would include something like a groupID as a property for each person you retrieve.\n\n\n## Why do this?\n\nBackbone models have a lot of flexibility in that you don't have to define what you're wanting to store ahead of time. \n\nThe only challenge with that is that for more complex applications is actually becomes quite difficult to remember what properties are available to you.\n\nUsing human models means they're much more self-documenting and help catch bugs. Someone new to the project can read the models and have a pretty good idea of how the app is put together.\n\nIt also uses's ES5's fancy `Object.defineProperty` to treat model attributes as if they were properties.\n\nThat means with Human Model you can set an attribute like this: `user.name = 'henrik'` and still get a `change:name` event fired. \n\nObviously, this restriction also means that this won't work in browsers that don't support that. You can check specific browser support here: http://kangax.github.io/es5-compat-table/\n\n## Key Differences from Backbone\n\nEverything Backbone does with Collections should Just Work™ with HumanModel as long as you specify a HumanModel constructor as a collection's `model` property.\n\n**important**: One key point to understand is that unlike backbone. You're actually passing an object definition that describes the Model, not just methods to attach to its prototype. For example, you'll notice we call `HumanModel.define()` instead of `Backbone.Model.extend()`. This is to make the distinction clear.\n\nBesides that and the obvious differences, any behavior that doesn't match Backbone should be considered a bug.\n\n\n## Explicit model definitions\n\nSchema definitions take an attribute called `props` to defined properties.\n\nProperty names can be defined two different ways, either an array with `[type, required, default]`,\nor an object: `{ type: 'string', required: true, default: '' , allowNull: false}`\n\ntypes can be: `string`, `number`, `boolean`, `array`, `object`, or `date`\nrequired: true, false (optional)\ndefault: any (optional)\nsetOnce: true, false (optional)\ntest: function (optional)\nallowNull: true, false (optional)\nvalues: `['some', 'valid', 'values']`(optional) \n\nNote that when defining with an array `type`, `required`, and `default`\nare the only property attributes you can set.\n\nIf `required` is true, the attribute will always have a value even if it is not explicitly set or is cleared.  If a default is given, that will be used.  If no default is given a default for its data type will be used (e.g. '' for string, {} for object)\n\nIf a `default` is given, the attribute will default to that value when the model is instantiated.\n\nIf `setOnce` is true, the attribute will throw an error if anything tries to set its value more than once.\n\nIf `values` is provided, you can only set that property to a value in the list. You can use this in combination with `type` to check both, or just use `values` and `default` by themselves. This is handy for `enum`-type stuff. For example:\n\n```js\nprops: {\n    alignment: {\n        values: ['top', 'middle', 'bottom'],\n        default: 'middle'\n    }\n}\n```\n\nIf given, `test` should be a function that expects the new value (and optionally the new type) of the attribute.  It should return an error message on failure, and false on success\n\n```js\nprops: {\n    firstName: ['string', true, 'Jim']\n    lastName: {\n        type: 'string', \n        required: false, \n        default: 'Bob' \n    }\n}\n```\n\n## A sample model with comments\n\n```js\nvar Person = HumanModel.define({\n    // every human model should have a type\n    type: 'member',\n    initialize: function () {\n        // main initialization function\n    },\n    // props are for properties that exist on the server\n    props: {\n        id: {\n            type: 'number',\n            setOnce: true\n        },\n        firstName: ['string', true],\n        lastName: ['string', true],\n        created: ['date'],\n        email: ['string', true],\n        username: ['string', true],\n        lastLogin: ['date'],\n        largePicUrl: ['string'],\n        department: {\n            type: 'number',\n            // you can optionally provide your own test function\n            test: function (val) {\n                if (val > 20) {\n                    return \"Invalid department\";\n                }\n            }\n        },\n        alignment: {\n            // you can also specify a list of valid values\n            values: ['top', 'middle', 'bottom'],\n            default: 'middle'\n        }\n    },\n    // derived properties and their dependencies. If any dependency changes\n    // that will also trigger a 'change' event on the derived property so\n    // we know to re-render the template\n    derived: {\n        // fullName is \n        fullName: {\n            // you can optionally define the properties this derived property\n            // depends on. That way if the underlying properties change you can\n            // listen for changes directly on the derived property.\n            deps: ['firstName', 'lastName'],\n            fn: function () {\n                return this.firstName + ' ' + this.lastName;\n            }\n        }\n    },\n    // Session properties are browser state for a model\n    // these trigger 'change' events when set, but are not\n    // included when serializing or saving to server.\n    session: {\n        selectedTasks: ['array', true, []],\n        lastPage: ['string', true, 'tasks'],\n        unread: ['boolean', true, false],\n        active: ['boolean', true, false]\n    },\n    // child collections that will be initted. They will\n    // be created at as a property of the same name as the\n    // key. The child collection will also be given a reference\n    // to its parent.\n    collections: {\n        messages: Messages\n    },\n    otherMethods: function (cb) {\n        // of course you can tack on whatever other methods you want\n    }\n});\n```\n\n## Going hardcore \"strict\" definition\n\n[Strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode) in JS is pretty great and is fairly well supported in modern browsers.\n\nIf you want to be *really* hardcore about not letting you set properties that aren't defined, you can specify `seal: true` when defining your model.\n\n```js\n// enable strict mode\n\"use strict\";\n\nvar MySuperStrictModel = HumanModel.define({\n    // set this to true\n    seal: true,\n    // also throw errors for properties not defined\n    // when set via `set`.\n    extraProperties: 'reject',\n    // normal properties\n    props: {\n        name: 'string'\n    }\n});\n\n// create an instance of this model\nvar model = new MySuperStrictModel();\n\n// setting defined properties works like usual\nmodel.name = 'something';\n\n// BUT, setting a property that doesn't exist\n// will throw an error because the object is sealed.\nmodel.something = 'something else'; // KABOOM!\n\n```\n\n## Setting model attributes\n\n```js\n// backbone:\nuser.set('firstName', 'billy bob');\n\n// human:\nuser.firstName = 'billy bob';\n\n// p.s. you can still do it the other way in human (so you can still pass options)\nuser.set('firstName', 'billy bob', {silent: true})\n```\n\n## Getting model attributes\n\n```js\n// backbone:\nuser.get('firstName');\n\n// human\nuser.firstName;\n```\n\n## Tests\n\nAn extensive suite of tests can be run by opening `test/index.html` in a browser. In order to ensure compatibility with backbone to the extent possible I started with all the tests from Backbone 1.0.0 and modified them to use HumanModel.\n\n## Caveats \n\n- Since backbone does an `instanceof` check when adding initted models to a collection, HumanModel monkey patches the `_prepareModel` collection method to check against HumanModel instead.\n- Still needs better docs. Probably a full docs site.\n\n## The Registry\n\nHumanModel also inits a global registry for storing all initted models. It's designed to be used for looking up models based on their type, id and optional namespace.\n\nIt's purpose is finding/updating models when we get updates pushed to us from the server. This is very important for buildling realtime apps.\n\nTODO: needs more docs on the registry.\n\n\n## Module: HumanModel\n\nThe module exports the following functions and properties.\n\n### .define(modelDefinition)\n\n* Returns: {Constructor} A custom constructor for generating instances of the model you defined.\n* `modelDefinition` {Object} An object containing your entire model definition\n  * `props` {Object} An object of named property definitions\n  * `session` {Object} An object of named session property definitions\n  * `derived` {Object} An object of named derived property definitions\n    * `derivedDefinition` {Object | Function} This can either be a single function or an object describing the derived property and its dependencies.\n      * `deps` {Array} An array containing strings of other property names or derived property names. When these change, the derived property is re-calculated and only if different than previous cached value, a `change` event is fired for the derived property.\n      * `fn` {Function} A function that returns the value of the derived property. This function's `this` will be the model instance.\n      * `cache` {Boolean} Default: `true` Whether or not to cache the result.\n  * `initialize` {Function} Default: `function () {}` An overridable function that will be called as a last step in the instantiation process for your model. It get called with as the constructor got. \n\n\n`define` is the main method you'll use to create model definitions. It returns a custom constructor that can be used to create instances of your custom model.\n\nAs an example imagine two modules `app.js` and `UserModel.js`.\n\nThe contents of `UserModel.js` defines a model:\n\n```js\nvar HumanModel = require('human-model');\n\n// define a model\nvar UserModel = HumanModel.define({\n    props: {\n        name: 'string'\n    }\n});\n\nvar user = new User({name: 'henrik'});\n\nconsole.log(user.name); // logs out 'henrik'\n```\n\n### .registry\n\nAn instance of the global model registry.\n\n### .Registry\n\nThe Registry constructor is exported in case you want to define your own registry.\n\n### .dataTypes\n\nThe dataTypes\n\n\n## Authors\n\nCreated by [@HenrikJoreteg](http://twitter.com/henrikjoreteg) with contributions from:\n\n- [@beausorensen](http://twitter.com/beausorensen)\n- [@LanceStout](https://twitter.com/lancestout)\n- [@philip_roberts](https://twitter.com/philip_roberts)\n- [@svenlito](https://twitter.com/svenlito)\n\n\n## Changelog\n\n - 2.6.0 - Cached, derived properties only fire change events now if new derived value is different from cache, instead of blindly firing change events if dependent properties changed.\n - 2.5.0 - UMD support by @swenlito\n - 2.4.0 - Added `toggle` method for boolean properties and properties with `values`\n - 2.3.0 - Added `values` to property definition\n - 2.2.0 - Added test parameter to property definitions\n - 2.1.0 - Added allowNull parameter to property definitions\n - 2.0.0 - Minor, but incompatible fix that remove `toServer` getter in lieu of adding `serialize` method that can be overridden.\n - 1.4.0 - Find/fix performance bottleneck. Significantly faster to instantiate larger numbers of models now.\n - 1.3.0 - Fix bug where session props were included in `.save()`\n - 1.2.0 - Make it possible to overwrite or extend data types.\n - 1.0.0 - Switching from `extend()` to `define()` pattern for building a model definition.\n\n## License\n\nMIT\n","maintainers":[{"name":"henrikjoreteg","email":"henrik@andyet.net"}],"time":{"modified":"2022-06-18T23:09:36.796Z","created":"2013-09-02T23:13:09.481Z","0.3.0":"2013-09-02T23:13:10.626Z","1.0.0":"2013-09-05T23:29:59.098Z","1.1.0":"2013-09-06T06:29:00.531Z","1.1.1":"2013-09-09T04:49:45.292Z","1.1.2":"2013-09-13T07:53:47.627Z","1.1.3":"2013-09-13T18:54:33.184Z","1.2.0":"2013-09-15T05:54:09.558Z","1.3.0":"2013-10-10T22:28:04.125Z","1.3.1":"2013-10-10T23:10:46.914Z","1.4.0":"2013-10-11T06:27:09.070Z","2.0.0":"2013-10-24T07:27:32.584Z","2.1.0":"2013-10-29T21:57:40.916Z","2.2.0":"2013-10-30T00:40:02.832Z","2.3.0":"2013-10-30T19:12:51.366Z","2.4.0":"2013-11-11T21:31:34.048Z","2.5.0":"2013-11-12T16:31:57.241Z","2.6.0":"2013-12-28T07:54:19.902Z","2.6.1":"2014-02-26T18:57:47.351Z","2.6.2":"2014-10-08T18:50:52.689Z"},"author":{"name":"Henrik Joreteg","email":"henrik@andyet.net"},"repository":{"type":"git","url":"https://github.com/henrikjoreteg/human-model.git"},"homepage":"https://github.com/henrikjoreteg/human-model","bugs":{"url":"https://github.com/henrikjoreteg/human-model/issues"},"readmeFilename":"README.md"}