swoosh
Version:
A quick declarative way to use a mongodb backend.
176 lines (124 loc) • 5.01 kB
Markdown
# Swoosh #
Swoosh is a quick declarative way to speed up basic persistent-layer stuff.
## The yaml part ##
To use swoosh, one simple create a yaml file, for example named swoosh.yml
```yaml
# The database url.
database: mongodb://<user>:<pass>@host.com:port
# Here we define all objects.
collections:
# Defining the users object.
users:
# The objects field.
fields:
name: String
pass: String
# What kind of restful request should the object handle?
methods:
- get
- put
- post
# Optionally you can specify what fields you want to respond with
# This for example would make a get-request only deliver the name of the user.
public:
- name
```
## The node part ##
```javascript
path = require('path');
swoosh = require('swoosh');
swoosh(path.join(__dirname, "swoosh.yml"), function(err, collections){
if(err) console.log("Err :(", err);
else {
// automatic routing only works with express.
this.route(app);
/*
Swoosh it not only useable when you need to route, but provide
neat ways to send requests from node aswell.
For example to create a new user we simply write.
*/
collections["users"].post({
name: "Bob",
pass: "superSecret"
}, function(err, bob) {
console.log(bob.name);
});
}
});
```
This package is still in a very early stage, but if people find it interesting I would love to improve it further.
## API ##
### Yaml ###
#### database ####
Required if swoosh is to automatically connect to a database.
If you wish to connect to a database manually skip this field.
#### log ####
Logging is by default set to true, so this field must only be specified if you want
to stop loggging.
#### path ####
The path is the root from wich the persistent routes are available. This is by default set to persistent
which means that for example a get request to a users collection would have the url: "/persistent/users/"
#### collections ####
It's here you define all the collections, a collection in turn consists of a few fields
##### fields #####
This field contains all the fields of the collection,
for example: `name: String`, for further information on supported types,
please refere to http://mongoosejs.com/docs/schematypes.html
##### methods #####
This field describes what RESTful methods should be supported by the generated routes,
left empty the collection will only be accessable by the nodejs API.
##### public #####
The public field is a type of a filter that will be applied when respondining to requests.
For example if the public field was defined as such:
```yaml
public:
- name
```
a get request would only send the name field.
If no public field is defined all fields will be sent.
### Node ###
As previously described to access the api first run
```javascript
var path = require('path'),
swoosh = require('swoosh');
swoosh(path.join(__dirname, "swoosh.yml"), function(err, collections){
//Do something greate
});
```
#### Collection ####
The collections object provides a simple way to handle the specified collections from nodejs.
##### pub #####
` pub(entity) -> public entity `
This method is only available if you specified public fields for you collection.
It takes but one argument, a single entity from the collection and from it creates a public version
of the object.
##### get #####
` get(id, callback) where callback(err, response)`
This is the server-side equivelent of a get request and will
deliver a specific entity if a id is specified, if the id field is null
the whole collection is delivered.
##### post #####
` post(data, callback) where callback(err, response)`
The server-side equivelent of a post request, given the data for creation it
will create a new entity in the database and return it as response to the callback.
##### put #####
` put(id, data, callback) where callback(err, response)`
The server-side equivelent of a put request, provide a id and some data and this method will update
the specified entity in the database and the return the entity with the updates in place.
##### delete #####
` delete(id, callback) were callback(err)`
The server-side equivelent of a delete request, given a id this method will remove the matching entity from the database.
##### route #####
` route(app) where app is an express application`
The route function require an express application to operate and will register the routes for the collection.
#### Swoosh ####
This api is accessed from the swoosh function.
``` javascript
swoosh.route(app) // Like this
swoosh(.., function(err, collection) {
this.route(app) // Or this
});
```
##### route #####
` route(app) where app is an express application`
This function will generate all specified routes for all the collections.