Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jo/docuri
Rich document ids for CouchDB
https://github.com/jo/docuri
Last synced: 13 days ago
JSON representation
Rich document ids for CouchDB
- Host: GitHub
- URL: https://github.com/jo/docuri
- Owner: jo
- License: other
- Created: 2014-04-16T08:26:00.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-05-06T15:41:04.000Z (over 7 years ago)
- Last Synced: 2024-10-14T20:51:37.507Z (25 days ago)
- Language: JavaScript
- Size: 43.9 KB
- Stars: 103
- Watchers: 6
- Forks: 10
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - jo/docuri - Rich document ids for CouchDB (others)
README
# DocURI [![Build Status](https://travis-ci.org/jo/docuri.svg?branch=master)](https://travis-ci.org/jo/docuri)
Rich document ids for CouchDB:```js
'movie/blade-runner/gallery-image/12/medium'
```### Advantages
* You can access the doc type everywhere (eg. in changes feed, response, view results...)
* They sort well in Futon and` _all_docs`
* DocURIs can 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)
* Easily delete related documents (eg. by requesting a range from `_all_docs`)
_Give DocURIs a try!_## Usage
Define methods for certain DocURI fragments and provide a routes hash that pairs routes to methods.
DocURI is inspired by [Backbone.Router](http://backbonejs.org/#Router).Routes can contain parameter parts, `:param`, which match a single DocURI component
between slashes; and splat parts `*splat`, which can match any number of DocURI
components. Part of a route can be made optional by surrounding it in
parentheses `(/:optional)`.For example, a route of `'movie/:movie_id/gallery-image'` will generate a function which parses
```js
'movie/blade-runner/gallery-image/12'
// =>
{
movie_id: 'blade-runner',
id: '12'
}
```
and vice versa.A route of `'movie/:movie_id/:type/*path'` will generate a function which parses
```js
'movie/blade-runner/gallery-image/12'
// =>
{
movie_id: 'blade-runner',
type: 'gallery-image',
path: ['12']
}
// and
'movie/blade-runner/gallery-image/12/medium'
// =>
{
movie_id: 'blade-runner',
type: 'gallery-image',
path: ['12', 'medium']
}
```The route `'movie/:movie_id/gallery-image/:id(/:version)'` will generate a
function which parses
```js
'movie/blade-runner/gallery-image/12'
// =>
{
movie_id: 'blade-runner',
id: '12'
}
// as well as
'movie/blade-runner/gallery-image/12/medium'
// =>
{
movie_id: 'blade-runner',
id: '12',
version: 'medium'
}
```### `docuri.route(route)`
Create a single route. The `route` argument must be a routing string.```js
// parses 'page/home' as { id: 'home' }:
var page = docuri.route('page/:id');
```### `route(strOrObj, [obj])`
The functions generated by DocURI can have a different behaviour, depending on
the type and number of the supplied arguments:* `route(str)`: parse DocURI string to object
* `route(obj)`: generate DocURI string from object
* `route(str, obj)`: change DocURI string parts with values provided by object returning a stringThe function returns `false` if a string can not be parsed, enabling type
checks.#### Example
```js
movie('movie/blade-runner');
// { id: 'blade-runner' }
movieAsset('movie/blade-runner');
// false
galleryImage({ movie_id: 'blade-runner', id: 12 });
// 'movie/blade-runner/gallery-image/12'
galleryImage('movie/blade-runner/gallery-image/12', { version: 'large' });
// 'movie/blade-runner/gallery-image/12/large'
```## Browser support
To use DocURI in your client-side application, browserify it like this:
```shell
browserify -s DocURI path/to/docuri/index.js > path/to/your/assets
```
Or grab it from [browserify-as-a-service: docuri@latest](http://www.modulefarm.com/standalone/docuri@latest).## Development
To run the unit tests:
```shell
npm test
```## License
Copyright (c) 2014 Johannes J. Schmidt, null2 GmbH
Licensed under the Apache 2.0 license.