dolce

Collections with syntactic sugar

Dolce is a collection library used primarily for routing.

var dolce = require('dolce'),
col1 = dolce.collection(),
col2 = dolce.collection(),
col3 = dolce.collection(),
col4 = dolce.collection(),
col5 = dolce.collection();
 
//explicit chain 
col1.add('hello', 'HELLO');
col1.add('hello -> world', 'WORLD');
 
console.log(col1.get('world')); //[{ value: 'HELLO' }, { value: 'WORLD' }] 
 
//parameters 
col5.add('validate/:name');
col5.add('validate/:firstName -> add/user/:firstName/:lastName');
console.log(col5.get('add/user/craig/condon')); //[{ value: 'HELLO' }, { value: 'WORLD' }] 
 
//implicit chain 
col2.add('hello/*', 'HELLO')
col2.add('hello', 'WORLD');
 
console.log(col2.get('hello')); //[{ value: 'HELLO' }, { value: 'WORLD' } ] 
 
//greedy chain 
col3.add('hello/**', 'HELLO')
col3.add('hello/awesome/**', 'AWESOME');
col3.add('hello/awesome/world', 'WORLD');
 
console.log(col3.get('hello/awesome/world')); //[{ value: 'HELLO' }, { value: 'AWESOME' }, { value: 'WORLD' } ] 
 
//filtering chains 
col4.add('-method=UPDATE users/:userid','update user');
col4.add('-method=DELETE users/:userid', 'delete user');
col4.add('-method=GET users/:userid', 'get user');
 
console.log(col4.get('users/14732843', { tags: { method: 'GET' } })); //[{ tags: { method: 'GET' }, value: 'get user' }]; 

Adds data to the collection

Adds an object to the collection

 
collection.addObject({
    'key': 1,
    'key2': 2
})

Returns a collection based on the params given

  • channel - the path to the value, e.g., 'add/user', 'validate/some/stuff'
  • ops - the options for fetching data
    • tags - the tags to filter against

A returned value may look something like this:

 
{
  "paths": [
    {
      "value": "users",
      "param": false
    },
    {
      "value": "14732843",
      "param": false
    }
  ],
  "tags": {
    "method": "GET"
  },
  "chains": [
    [
      {
        "paths": [
          {
            "value": "users",
            "param": false
          },
          {
            "value": "userid",
            "param": true
          }
        ],
        "params": {
          "userid": "14732843"
        },
        "tags": {
          "method": "GET"
        },
        "value": "get user"
      }
    ]
  ]
}
 

TRUE if the given channel exists in the collection. API is the same as .get

 
collection.add('-anotherTag validate/**');
collection.add('-method=POST validate/**');
collection.get('-method=POST validate/login');
 
//goes through -method=POST validate/** before getting to login, NOT -anotherTag validate/**  
collection.get('validate/login'); 
 
 
collection.add('-method=POST validate/**');
collection.get('-method validate/login');
 
//does NOT go through validate/** because the method is not POST 
collection.get('validate/login'); 
 
 
 
//this doesn't work 
collection.add(':param/*');
 
//with this. 
collection.add('path');
 
//but with this this: 
collection.add('someParam');