diff options
author | Benoit Chesneau <benoitc@apache.org> | 2010-03-28 11:17:32 +0000 |
---|---|---|
committer | Benoit Chesneau <benoitc@apache.org> | 2010-03-28 11:17:32 +0000 |
commit | 8fdcf154634d3b0efedd64049df8f4006a1415cc (patch) | |
tree | 3ed7f7e07eb16c38691950ad92ab854fb5809a92 | |
parent | 41680a4491aa018660a990997925b7a9ad3c82e4 (diff) |
allows more complex keys in the rewriter, so it could ease the
pagination (only array for now) :
{
"from": "simpleForm/complexView5/:a/:b",
"to": "_list/simpleForm/complexView3",
"query": {
"key": [":a", ":b"]
}
},
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@928374 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | share/www/script/test/rewrite.js | 18 | ||||
-rw-r--r-- | src/couchdb/couch_httpd_rewrite.erl | 18 |
2 files changed, 34 insertions, 2 deletions
diff --git a/share/www/script/test/rewrite.js b/share/www/script/test/rewrite.js index 034e1aee..848427be 100644 --- a/share/www/script/test/rewrite.js +++ b/share/www/script/test/rewrite.js @@ -132,6 +132,14 @@ couchTests.rewrite = function(debug) { } }, { + "from": "simpleForm/complexView5/:a/:b", + "to": "_list/simpleForm/complexView3", + "query": { + "key": [":a", ":b"] + } + }, + + { "from": "uuids", "to": "../../../_uuids" } @@ -211,6 +219,13 @@ couchTests.rewrite = function(debug) { emit(doc.a, doc.string); } }) + }, + complexView3: { + map: stringFun(function(doc) { + if (doc.type == "complex") { + emit(doc.b, doc.string); + } + }) } } } @@ -319,6 +334,9 @@ couchTests.rewrite = function(debug) { T(xhr.status == 200, "with query params"); T(/Value: doc 5/.test(xhr.responseText)); + xhr = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/simpleForm/complexView5/test/essai"); + T(xhr.status == 200, "with query params"); + T(/Value: doc 4/.test(xhr.responseText)); // test path relative to server diff --git a/src/couchdb/couch_httpd_rewrite.erl b/src/couchdb/couch_httpd_rewrite.erl index 73b15494..dce5994f 100644 --- a/src/couchdb/couch_httpd_rewrite.erl +++ b/src/couchdb/couch_httpd_rewrite.erl @@ -242,8 +242,18 @@ make_query_list([{Key, Value}|Rest], Bindings, Acc) -> replace_var(Key, Value, Bindings) -> case Value of <<":", Var/binary>> -> - Var1 = list_to_atom(binary_to_list(Var)), - proplists:get_value(Var1, Bindings, Value); + get_var(Var, Bindings, Value); + _ when is_list(Value) -> + Value1 = lists:foldr(fun(V, Acc) -> + V1 = case V of + <<":", VName/binary>> -> + get_var(VName, Bindings, V); + _ -> + V + end, + [V1|Acc] + end, [], Value), + to_json(Value1); _ when is_binary(Value) -> Value; _ -> @@ -257,6 +267,10 @@ replace_var(Key, Value, Bindings) -> end. +get_var(VarName, Props, Default) -> + VarName1 = list_to_atom(binary_to_list(VarName)), + proplists:get_value(VarName1, Props, Default). + %% doc: build new patch from bindings. bindings are query args %% (+ dynamic query rewritten if needed) and bindings found in %% bind_path step. |