timon

1.4.5 • Public • Published

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)

Readme

Keywords

Package Sidebar

Install

npm i timon

Weekly Downloads

0

Version

1.4.5

License

MIT

Last publish

Collaborators

  • bitbutcher
  • johnnydevmode