diff options
| author | Benoit Chesneau <benoitc@apache.org> | 2010-02-04 09:55:56 +0000 | 
|---|---|---|
| committer | Benoit Chesneau <benoitc@apache.org> | 2010-02-04 09:55:56 +0000 | 
| commit | 88c27f28fa212b1bb7e9fbd3da4fd70e34965cf3 (patch) | |
| tree | 395d03380ed0b7b5c239d2f84991909e26be2fbc | |
| parent | 17632461e3ea7007594783c39a25055fa0ccdffe (diff) | |
fix COUCHDB-638.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@906423 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | share/www/script/test/show_documents.js | 8 | ||||
| -rw-r--r-- | src/couchdb/couch_httpd_show.erl | 18 | 
2 files changed, 26 insertions, 0 deletions
diff --git a/share/www/script/test/show_documents.js b/share/www/script/test/show_documents.js index accb8522..bdb1b73e 100644 --- a/share/www/script/test/show_documents.js +++ b/share/www/script/test/show_documents.js @@ -121,6 +121,9 @@ couchTests.show_documents = function(debug) {          provides("foo", function() {            return "foofoo";          }); +      }), +      "withSlash": stringFun(function(doc, req) { +        return { json: doc }        })      }    }; @@ -343,4 +346,9 @@ couchTests.show_documents = function(debug) {    xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/json/foo");    TEquals(1, JSON.parse(xhr.responseText)._conflicts.length); +  var doc3 = {_id:"a/b/c", a:1}; +  db.save(doc3); +  xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/withSlash/a/b/c"); +  T(xhr.status == 200); +    }; diff --git a/src/couchdb/couch_httpd_show.erl b/src/couchdb/couch_httpd_show.erl index 467c0a42..467b502b 100644 --- a/src/couchdb/couch_httpd_show.erl +++ b/src/couchdb/couch_httpd_show.erl @@ -21,11 +21,15 @@      [send_json/2,send_json/3,send_json/4,send_method_not_allowed/2,      start_json_response/2,send_chunk/2,last_chunk/1,send_chunked_error/2,      start_chunked_response/3, send_error/4]). +     +  % /db/_design/foo/show/bar/docid  % show converts a json doc to a response of any content-type.   % it looks up the doc an then passes it to the query server.  % then it sends the response from the query server to the http client. + +  handle_doc_show_req(#httpd{          path_parts=[_, _, _, _, ShowName, DocId]      }=Req, Db, DDoc) -> @@ -36,6 +40,20 @@ handle_doc_show_req(#httpd{      handle_doc_show(Req, Db, DDoc, ShowName, Doc);  handle_doc_show_req(#httpd{ +        path_parts=[_, _, _, _, ShowName, DocId|Rest] +    }=Req, Db, DDoc) -> +     +    DocParts = [DocId|Rest], +    DocId1 = string:join([?b2l(P)|| P <- DocParts], "/"), +         +    % open the doc +    Doc = couch_httpd_db:couch_doc_open(Db, ?l2b(DocId1), nil, [conflicts]), +    % we don't handle revs here b/c they are an internal api +    % returns 404 if there is no doc with DocId +    handle_doc_show(Req, Db, DDoc, ShowName, Doc); + + +handle_doc_show_req(#httpd{          path_parts=[_, _, _, _, ShowName]      }=Req, Db, DDoc) ->      % with no docid the doc is nil  | 
