diff --git a/lib/cradle/database/views.js b/lib/cradle/database/views.js index 9d76e2f..5226406 100644 --- a/lib/cradle/database/views.js +++ b/lib/cradle/database/views.js @@ -20,7 +20,12 @@ Database.prototype.view = function (path, options, callback) { options = {}; } - path = path.split('/'); + path = function(path) { + path = path.split('/'); + path[0] !== '' || path.shift(); + path[2] !== '' || path.pop(); + return path; + }(path); path = ['_design', path[0], '_view', path[1]].map(querystring.escape).join('/'); return this._getOrPostView(path, options, callback); diff --git a/test/database-view-test.js b/test/database-view-test.js index 072851d..714959f 100644 --- a/test/database-view-test.js +++ b/test/database-view-test.js @@ -65,6 +65,24 @@ vows.describe('cradle/database/view').addBatch( }, ['mike', 'bill'], 3 + ), + 'with leading slashes': shouldQueryView( + function(db) { + db.view('/pigs/all', this.callback); + }, + ['bill','mike','alex'] + ), + 'with trailing slashes': shouldQueryView( + function(db) { + db.view('pigs/all/', this.callback); + }, + ['bill','mike','alex'] + ), + 'with leading and trailing slashes': shouldQueryView( + function(db) { + db.view('/pigs/all/', this.callback); + }, + ['bill','mike','alex'] ) }, // same as the above test, but with a temporary view