Everyplay / serverbone

Backbone node.js additions to serve backbone collections/models over express
MIT License
5 stars 5 forks source link

Serverbone TravisCI Coverage Status

Introduction

Serverbone.js is a server-side Rest API framework that supports multiple data stores on Node.js. Especially, you can combine multiple data stores such as a document store (e.g. MongoDB using backbone-db-mongodb), and a key-value store for indexes (e.g. Redis using backbone-db-redis). The project is based on the following modules:

The goals of the framework are:

Examples

Components

Models

BaseModel

BaseModel extends backbone-blueprint's ValidatingModel providing e.g. Model lifecycle conventions, ACL related functionality & CRUD helpers.

FlatModel

Model for storing strings/numbers. Meant to be used together with ValueIndexMixin.

JSONModel

Model for storing raw JSON data in the id field. Meant to be used together /w JSONIndexMixin.

Collections

BaseCollection

Base Collection for most other Collections

IndexCollection

Deprecated

IndexMixin

Mixin for creating collections, that can have their indexes stored in other databases from the main db of the Collection.

JSONIndexMixin

Mixin for Collections that store JSON data in model's id field.

MultiIndexMixin

Mixin for reading values from multiple indexes, i.e. joins multiple Redis sets.

ValueIndexMixin

Mixin for Collections that store plain strings into Redis sets.

ACL

ACL permissions are defined in the Model's schema as role: [actions]. Permissions may be defined in Model level (which applies to all properties) or per property (which overrides Model level permissions). For example:

permissions: {
    admin: ['*'],
    owner: ['update', 'destroy'],
    '*': ['read', 'create']
}

This would give admin role permission to all verbs. owner can update & destroy Model. Finally world (indicated by *) can read models & create new Model instances. How roles are defined is up to the application to implement. You should override Model's getRoles for implementing custom functionality.

Resource

Provides mapping Model/Collection CRUD operation into HTTP verbs, thus adding routes into express application. By default the following routes are added:

GET /

Maps to Collection.fetch.

POST /

Maps to Collection.post (creates a new model).

GET /:id

Maps to Model.fetch (fetches model with given id).

PUT /:id

Maps to Model.update (updates model with given id).

DELETE /:id

Maps to Model.delete (delete model with given id).

Utils

async

Helpers for running async functions.

response_utils

Handles sending JSON/error responses.

How to develop

Testing

  make test

View code coverage reports

  make check-coverage
  open coverage/lcov-report/index.html