Rich document ids for CouchDB
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Go to file
Johannes J. Schmidt d0b80ee391 we do not need no arity 10 years ago
test we do not need no arity 10 years ago
.gitignore first commit 10 years ago
.travis.yml test on current versions 10 years ago
README.md we do not need no arity 10 years ago
index.js we do not need no arity 10 years ago
package.json we do not need no arity 10 years ago

README.md

docuri Build Status

Rich document ids for CouchDB:

type/id/subtype/index/version

For example: movie/blade-runner/gallery-image/12/medium

Docuris have many advantages:

  • You can access the doc type (eg. in changes feed)
  • They sort well in Futon
  • They tell a lot about the document
  • You can rely on a schema and construct ids of dependend documents (eg. a specific version of an image)
  • You can easily delete related documents (eg. by requesting a range from _all_docs)

...and I'm sure I forgot to mention the best.

Give Docuris a try!

Usage

parse(string)

Parse id string:

var docuri = require('docuri');
docuri.parse('mytype/myid/mysubtype/myindex/myversion');
// {
//   type: 'mytype',
//   id: 'myid',
//   subtype: 'mysubtype',
//   index: 'myindex',
//   version: 'myversion'
// }

stringify(object)

Build id string from object:

docuri.stringify({
  type: 'mytype',
  id: 'myid',
  subtype: 'mysubtype',
  index: 'myindex',
  version: 'myversion'
});
// 'mytype/myid/mysubtype/myindex/myversion'

merge(objectOrString)

Change id string components:

docuri.merge('mytype/myid/mysubtype/myindex/myversion', {
  type: 'my_new_type',
});
// 'my_new_type/myid/mysubtype/myindex/myversion'

parts(objectOrString)

Array of components. Trailing undefined components are stripped off:

docuri.parts('mytype/myid/');
// ['mytype', 'myid']
docuri.parts({ type: 'mytype', subtype: 'mysubtype' });
// ['mytype', undefined, 'mysubtype']

docuri.definition([array])

Access or use custom definition:

docuri.definition();
// ['type', 'id', 'subtype', 'index', 'version']
docuri
  .definition(['id', 'meta'])
  .parse('42/answer');
// {
//   id: '42',
//   meta: 'answer'
// }

Note: the (optional) argument to docuri.definition MUST be an array of strings containing at least one item.

Browser support

To use docid in your client-side application, browserify it like this:

browserify -s DocURI path/to/docuri/index.js > path/to/your/assets

Once added to your DOM, this will leave you with a global DocURI object for use in your e.g. Backbone Models/Collections.

Development

To run the unit tests:

npm test

License

Copyright (c) 2014 Johannes J. Schmidt, null2 GmbH
Licensed under the MIT license.