timon
v1.4.5
Published
a lightweight model wrapper for meerkat
Downloads
26
Readme
Timon
A lightweight model wrapper for Meerkat
Getting Started
Install Timon:
npm install timon --save
Examples
Timon was written to improve the experience of using domain model abstractions within the context of an express app written in CoffeeScript. As such, the examples will demonstrate its usage in this context. However, Timon is not limited to use within express and its API should translate well to pure JavaScript.
Declare a new Model (models/account.coffee)
Model = require 'timon'
Model.extend module, 'account',
for_user: (user, callback) ->
return callback [] unless user.accounts?
@find(id: $in: user.accounts).all callback
Use the Model with a Meerkat connection
meerkat = require 'meerkat'
User = require '../models/user'
meerkat.connect uri, options, (connection) ->
User(meerkat: connection).find(name: 'Frank').all (users) ->
...
Use the Model within an Express Route (handlers/accounts.coffee)
Account = require '../models/account'
#...
(req, res, next) ->
Account(req).find(type: 'admin').all (accounts) ->
res.render 'admin/accounts',
title: 'Accounts'
accounts: accounts
Find document by id
Account(req).for_id '12344543', (account) ->
...
Create a new document
Account(req).create name: 'Super', type: 'admin', (account) ->
# account will have a generated id and created_at set
Populate referenced documents
{Group, User} = require '../models'
users = User(meerkat: connection).find().all (users) ->
Group(meerkat: connection).populate 'group', users..., ->
# All user documents will have the group reference property replaced with a full group document
Execute a paged query
query = role: 'admin'
User(meerkat: connection).paged page: 1, per: 20, query, (users, pagination) ->
# users will be the requested page
# pagination will contain the paging information (current page, total pages, total count,etc...)
Invoking Meerkat connection functions
Users = User(meerkat: connection)
Users.find_one id: req.params.id, (user) ->
Users.update id: user.id, {$set: {role: 'sales'}}, (update_count) ->
Users.remove id: user.id, (remove_count) ->
...
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.
Release History
(Nothing yet)