Minimalistic extensible data models
JavaScript CSS HTML Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples/reactive update reactive example Jul 1, 2013
lib ops Jun 23, 2015
test 0.1.2 Jan 21, 2014
.gitignore update reactive example Jul 1, 2013
History.md Release 0.2.1 Mar 16, 2015
Makefile 0.1.2 Jan 21, 2014
Readme.md Restore a syntax error of Readme.md Jan 13, 2014
component.json Release 0.2.1 Mar 16, 2015
package.json 0.3.2 Jun 23, 2015

Readme.md

model

W.I.P minimalistic extensible model component.

API

model(name)

Create a new model with the given name.

var model = require('model');
var User = model('User');

.attr(name, [meta])

Define an attribute name with optional meta data object.

var model = require('model');

var Post = model('Post')
  .attr('id')
  .attr('title')
  .attr('body')
  .attr('created_at')
  .attr('updated_at')

With meta data used by plugins:

var model = require('model');

var Post = model('Post')
  .attr('id', { required: true, type: 'number' })
  .attr('title', { required: true, type: 'string' })
  .attr('body', { required: true, type: 'string' })
  .attr('created_at', { type: 'date' })
  .attr('updated_at', { type: 'date' })

.validate(fn)

TODO: validation callback docs

.use(fn)

TODO: plugin docs

.url([path])

Return base url, or url to path.

User.url()
// => "/users"

User.url('add')
// => "/users/add"

.route(path)

Set base path for urls. Note this is defaulted to '/' + modelName.toLowerCase() + 's'

User.route('/api/u')

User.url()
// => "/api/u"

User.url('add')
// => "/api/u/add"

.headers({header: value})

Sets custom headers for static and method requests on the model.

User.headers({
  'X-CSRF-Token': 'some token',
  'X-API-Token': 'api token' 
});

.ATTR()

"Getter" function generated when Model.attr(name) is called.

var Post = model('Post')
  .attr('title')
  .attr('body')

var post = new Post({ title: 'Cats' });

post.title()
// => "Cats"

.ATTR(value)

"Setter" function generated when Model.attr(name) is called.

var Post = model('Post')
  .attr('title')
  .attr('body')

var post = new Post;

post.title('Ferrets')
post.title()
// => "Ferrets"
  • Emits "change" event with (name, value, previousValue).
  • Emits "change ATTR" event with (value, previousValue).
post.on('change', function(name, val, prev){
  console.log('changed %s from %s to %s', name, prev, val)
})

post.on('change title', function(val, prev){
  console.log('changed title')
})

.isNew()

Returns true if the model is unsaved.

.toJSON()

Return a JSON representation of the model (its attributes).

.has(attr)

Check if attr is non-null.

.get(attr)

Get attr's value.

.set(attrs)

Set multiple attrs.

user.set({ name: 'Tobi', age: 2 })

.changed([attr])

Check if the model is "dirty" and return an object of changed attributes. Optionally check a specific attr and return a Boolean.

.error(attr, msg)

Define error msg for attr.

.isValid()

Run validations and check if the model is valid.

user.isValid()
// => false

user.errors
// => [{ attr: ..., message: ... }]

.url([path])

Return this model's base url or relative to path:

var user = new User({ id: 5 });
user.url('edit');
// => "/users/5/edit"

.save(fn)

Save or update and invoke the given callback fn(err).

var user = new User({ name: 'Tobi' })

user.save(function(err){

})

Emits "save" when complete.

.destroy([fn])

Destroy and invoke optional fn(err).

Emits "destroy" when successfully deleted.

Links

Testing

$ npm install
$ make test &
$ open http://localhost:3000

License

MIT