Skip to content
Minimalistic extensible data models
JavaScript CSS HTML Makefile
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples/reactive
lib
test
.gitignore
Makefile
Readme.md
component.json
package.json

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"

.ATTR()

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

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

var post = new Post;
post.title('Ferrets')
post.body('Make really good pets')

.ATTR(value)

"Setter" 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"

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

Something went wrong with that request. Please try again.