Add scripts to create myops-getqueryview:
[myops.git] / web / query / vendor / couchapp / lib / path.js
1 // from couch.js
2 function encodeOptions(options) {
3   var buf = [];
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);
10       }
11       buf.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));
12     }
13   }
14   if (!buf.length) {
15     return "";
16   }
17   return "?" + buf.join("&");
18 }
19
20 function concatArgs(array, args) {
21   for (var i=0; i < args.length; i++) {
22     array.push(args[i]);
23   };
24   return array;
25 };
26
27 function makePath(array) {
28   var options, path;
29   
30   if (typeof array[array.length - 1] != "string") {
31     // it's a params hash
32     options = array.pop();
33   }
34   path = array.map(function(item) {return encodeURIComponent(item)}).join('/');
35   if (options) {
36     return path + encodeOptions(options);
37   } else {
38     return path;    
39   }
40 };
41
42 exports.init = function(req) {
43   return {
44     asset : function() {
45       var p = req.path, parts = ['', p[0], p[1] , p[2]];
46       return makePath(concatArgs(parts, arguments));
47     },
48     show : function() {
49       var p = req.path, parts = ['', p[0], p[1] , p[2], '_show'];
50       return makePath(concatArgs(parts, arguments));
51     },
52     list : function() {
53       var p = req.path, parts = ['', p[0], p[1] , p[2], '_list'];
54       return makePath(concatArgs(parts, arguments));
55     },
56     update : function() {
57       var p = req.path, parts = ['', p[0], p[1] , p[2], '_update'];
58       return makePath(concatArgs(parts, arguments));
59     },
60     limit : function(limit) {
61       var query = req.query;
62       var l = query.limit;
63       query.limit = limit;
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);
67       query.limit = l;
68       return link;
69     },
70     older : function(key) {
71       if (!typeof key == "undefined") return null;
72       var query = req.query;
73       query.startkey = key;
74       query.skip=1;
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);
78     },
79     absolute : function(path) {
80       return 'http://' + req.headers.Host + path;
81     }
82   }
83 };