Skip to content

tissak/model

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

License

MIT

About

Minimalistic extensible data models

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%