You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2010/06/24 11:24:28 UTC
svn commit: r957467 - in /couchdb/branches/0.11.x:
share/www/script/test/rewrite.js src/couchdb/couch_httpd_rewrite.erl
Author: benoitc
Date: Thu Jun 24 09:24:28 2010
New Revision: 957467
URL: http://svn.apache.org/viewvc?rev=957467&view=rev
Log:
fix #COUCHDB-787 . thanks!
Modified:
couchdb/branches/0.11.x/share/www/script/test/rewrite.js
couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl
Modified: couchdb/branches/0.11.x/share/www/script/test/rewrite.js
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/share/www/script/test/rewrite.js?rev=957467&r1=957466&r2=957467&view=diff
==============================================================================
--- couchdb/branches/0.11.x/share/www/script/test/rewrite.js (original)
+++ couchdb/branches/0.11.x/share/www/script/test/rewrite.js Thu Jun 24 09:24:28 2010
@@ -137,6 +137,13 @@ couchTests.rewrite = function(debug) {
"query": {
"key": [":a", ":b"]
}
+ },
+ {
+ "from": "simpleForm/complexView6",
+ "to": "_list/simpleForm/complexView3",
+ "query": {
+ "key": [":a", ":b"]
+ }
}
],
lists: {
@@ -331,6 +338,10 @@ couchTests.rewrite = function(debug) {
T(xhr.status == 200, "with query params");
T(/Value: doc 4/.test(xhr.responseText));
+ xhr = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/simpleForm/complexView6?a=test&b=essai");
+ T(xhr.status == 200, "with query params");
+ T(/Value: doc 4/.test(xhr.responseText));
+
// test path relative to server
designDoc.rewrites.push({
"from": "uuids",
Modified: couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl?rev=957467&r1=957466&r2=957467&view=diff
==============================================================================
--- couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl (original)
+++ couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl Thu Jun 24 09:24:28 2010
@@ -118,6 +118,7 @@ handle_rewrite_req(#httpd{
DesignId = <<"_design/", DesignName/binary>>,
Prefix = <<"/", DbName/binary, "/", DesignId/binary>>,
QueryList = couch_httpd:qs(Req),
+ QueryList1 = [{to_atom(K), V} || {K, V} <- QueryList],
#doc{body={Props}} = DDoc,
@@ -132,7 +133,7 @@ handle_rewrite_req(#httpd{
%% get raw path by matching url to a rule.
RawPath = case try_bind_path(DispatchList, Method, PathParts,
- QueryList) of
+ QueryList1) of
no_dispatch_path ->
throw(not_found);
{NewPathParts, Bindings} ->
@@ -146,7 +147,7 @@ handle_rewrite_req(#httpd{
[] -> [];
_ -> [$?, encode_query(Bindings)]
end),
-
+
% if path is relative detect it and rewrite path
case mochiweb_util:safe_relative_path(Path) of
undefined ->
@@ -199,7 +200,7 @@ try_bind_path([Dispatch|Rest], Method, P
% we parse query args from the rule and fill
% it eventually with bindings vars
QueryArgs1 = make_query_list(QueryArgs, Bindings1, []),
-
+
% remove params in QueryLists1 that are already in
% QueryArgs1
Bindings2 = lists:foldl(fun({K, V}, Acc) ->
@@ -247,8 +248,13 @@ replace_var(Key, Value, Bindings) ->
Value1 = lists:foldr(fun(V, Acc) ->
V1 = case V of
<<":", VName/binary>> ->
- get_var(VName, Bindings, V);
+ case get_var(VName, Bindings, V) of
+ V2 when is_list(V2) ->
+ iolist_to_binary(V2);
+ V2 -> V2
+ end;
_ ->
+
V
end,
[V1|Acc]