2 function encodeOptions(options) {
4 if (typeof(options) == "object" && options !== null) {
5 for (var name in options) {
6 if (!options.hasOwnProperty(name)) {continue;}
7 var value = options[name];
8 if (name == "key" || name == "startkey" || name == "endkey") {
9 value = JSON.stringify(value);
11 buf.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));
17 return "?" + buf.join("&");
20 function concatArgs(array, args) {
21 for (var i=0; i < args.length; i++) {
27 function makePath(array) {
30 if (typeof array[array.length - 1] != "string") {
32 options = array.pop();
34 path = array.map(function(item) {return encodeURIComponent(item)}).join('/');
36 return path + encodeOptions(options);
42 exports.init = function(req) {
45 var p = req.path, parts = ['', p[0], p[1] , p[2]];
46 return makePath(concatArgs(parts, arguments));
49 var p = req.path, parts = ['', p[0], p[1] , p[2], '_show'];
50 return makePath(concatArgs(parts, arguments));
53 var p = req.path, parts = ['', p[0], p[1] , p[2], '_list'];
54 return makePath(concatArgs(parts, arguments));
57 var p = req.path, parts = ['', p[0], p[1] , p[2], '_update'];
58 return makePath(concatArgs(parts, arguments));
60 limit : function(limit) {
61 var query = req.query;
64 var view = req.path[req.path.length - 1];
65 var list = req.path[req.path.length - 2];
66 var link = this.list(list, view, query);
70 older : function(key) {
71 if (!typeof key == "undefined") return null;
72 var query = req.query;
75 var view = req.path[req.path.length - 1];
76 var list = req.path[req.path.length - 2];
77 return this.list(list, view, query);
79 absolute : function(path) {
80 return 'http://' + req.headers.Host + path;