tower-resource
v0.1.0
Published
Data models that can be stored in any database or remote service using adapters.
Readme
Tower Resource
Data models that can be stored in any database or remote service using adapters.
Installation
node:
$ npm install tower-resourcebrowser:
$ component install tower/resourceExamples
var resource = require('tower-resource');Attributes
resource('post')
.attr('title') // defaults to 'string'
.attr('body', 'text')
.attr('published', 'boolean', false);Validations
resource('user')
.attr('email')
.validate('presence')
.validate('isEmail')
.validate('emailProvider', { in: [ 'gmail.com' ] }) // some hypothetical one
.attr('username')
.validator(function(val){
return !!val.match(/[a-zA-Z]/);
});There are two DSL methods for validation.
validate: for using predefined validations (see tower-validator), purely to clean up the API.validator: for defining custom validator functions right inline. If you want to reuse your custom validator function across resources, just move the function into tower-validator.
Queries
resource('post')
.where('published').eq(true)
.all(function(err, posts){
});See tower-query for the entire syntax. The where method just delegates to a Query instance. You can also access the query object directly (it just adds .select(resourceName) for you):
resource('post').query().sort('title', -1).all();Actions
There are 4 main actions for resources (which are just delegated to query().action(name):
- create
- all
- update
- remove
resource('post').create();
resource('post').all();
resource('post').update({ published: true });
resource('post').remove();Under the hood, when you execute one of these actions, they get handled by a database-/service-specific adapter (mongodb, cassandra, facebook, etc.). Those adapters can perform optimizations such as streaming query results back.
License
MIT
