diff options
| -rw-r--r-- | share/server/render.js | 20 | ||||
| -rw-r--r-- | share/www/script/test/show_documents.js | 7 | 
2 files changed, 25 insertions, 2 deletions
| diff --git a/share/server/render.js b/share/server/render.js index 82ceb3ab..f147af89 100644 --- a/share/server/render.js +++ b/share/server/render.js @@ -197,6 +197,21 @@ function resetProvides() {    responseContentType = null;    }; +// from http://javascript.crockford.com/remedial.html +function typeOf(value) { +    var s = typeof value; +    if (s === 'object') { +        if (value) { +            if (value instanceof Array) { +                s = 'array'; +            } +        } else { +            s = 'null'; +        } +    } +    return s; +}; +  function runShow(showFun, doc, req, funSrc) {    try {      resetProvides(); @@ -206,8 +221,9 @@ function runShow(showFun, doc, req, funSrc) {        resp = runProvides(req);        resp = applyContentType(maybeWrapResponse(resp), responseContentType);      } -     -    if (resp) { + +    var type = typeOf(resp); +    if (type == 'object' || type == 'string') {        respond(["resp", maybeWrapResponse(resp)]);      } else {        renderError("undefined response from show function"); diff --git a/share/www/script/test/show_documents.js b/share/www/script/test/show_documents.js index d0a2325a..ae4368a8 100644 --- a/share/www/script/test/show_documents.js +++ b/share/www/script/test/show_documents.js @@ -56,6 +56,9 @@ couchTests.show_documents = function(debug) {        "render-error" : stringFun(function(doc, req) {          return noSuchVariable;        }), +      "empty" : stringFun(function(doc, req) { +          return ""; +        }),        "xml-type" : stringFun(function(doc, req) {           return {             "headers" : { @@ -159,6 +162,10 @@ couchTests.show_documents = function(debug) {    xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/hello");    T(xhr.responseText == "Empty World"); +  // hello template world (no docid) +  xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/empty"); +  T(xhr.responseText == ""); +    // // hello template world (non-existing docid)    xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/hello/nonExistingDoc");    T(xhr.responseText == "New World"); | 
