You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by Jan Lehnardt <ja...@apache.org> on 2011/02/28 23:54:26 UTC
Re: svn commit: r993532 - in /couchdb/trunk: share/www/script/test/rewrite.js src/couchdb/couch_httpd_rewrite.erl
Hey Benoit,
how do you feel about changing <var> to {var}? It is a bit closer to URL Templating used by other systems. <var> reminds me too much of XML to make me happy :)
If I see it correctly, this code is only in 1.1.x and trunk, so there's still time to work on it.
Cheers
Jan
--
On 7 Sep 2010, at 23:07, benoitc@apache.org wrote:
> Author: benoitc
> Date: Tue Sep 7 21:07:17 2010
> New Revision: 993532
>
> URL: http://svn.apache.org/viewvc?rev=993532&view=rev
> Log:
> improve rewriter. No< it's possible to pass a variable in path as <var>
> so you can do /somepath/<var>something or /somepath/<var>.txt ...
>
> Modified:
> couchdb/trunk/share/www/script/test/rewrite.js
> couchdb/trunk/src/couchdb/couch_httpd_rewrite.erl
>
> Modified: couchdb/trunk/share/www/script/test/rewrite.js
> URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/rewrite.js?rev=993532&r1=993531&r2=993532&view=diff
> ==============================================================================
> --- couchdb/trunk/share/www/script/test/rewrite.js (original)
> +++ couchdb/trunk/share/www/script/test/rewrite.js Tue Sep 7 21:07:17 2010
> @@ -91,6 +91,27 @@ couchTests.rewrite = function(debug) {
> }
> },
> {
> + "from": "/type/<type>.json",
> + "to": "_show/type/:type",
> + "query": {
> + "format": "json"
> + }
> + },
> + {
> + "from": "/type/<type>.xml",
> + "to": "_show/type/:type",
> + "query": {
> + "format": "xml"
> + }
> + },
> + {
> + "from": "/type/<type>",
> + "to": "_show/type/:type",
> + "query": {
> + "format": "html"
> + }
> + },
> + {
> "from": "/welcome5/*",
> "to" : "_show/*",
> "query": {
> @@ -193,6 +214,9 @@ couchTests.rewrite = function(debug) {
> }),
> "welcome3": stringFun(function(doc,req) {
> return "Welcome " + req.query["name"];
> + }),
> + "type": stringFun(function(doc, req) {
> + return req.id + " as " + req.query.format;
> })
> },
> updates: {
> @@ -380,6 +404,15 @@ couchTests.rewrite = function(debug) {
> 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));
> +
> + req = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/type/test.json");
> + T(req.responseText == "test as json");
> +
> + req = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/type/test.xml");
> + T(req.responseText == "test as xml");
> +
> + req = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/type/test");
> + T(req.responseText == "test as html");
>
> // test path relative to server
> designDoc.rewrites.push({
>
> Modified: couchdb/trunk/src/couchdb/couch_httpd_rewrite.erl
> URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_rewrite.erl?rev=993532&r1=993531&r2=993532&view=diff
> ==============================================================================
> --- couchdb/trunk/src/couchdb/couch_httpd_rewrite.erl (original)
> +++ couchdb/trunk/src/couchdb/couch_httpd_rewrite.erl Tue Sep 7 21:07:17 2010
> @@ -106,6 +106,15 @@
> %% {"from": "/a", /a?foo=b /some/b foo =:= b
> %% "to": "/some/:foo",
> %% }}
> +%%
> +%% {"from": "/a/<foo>" /a/b /some/b foo =:= b
> +%% "to": "/a/b",
> +%% }}
> +%%
> +%% {"from": "/a/<foo>.blah" /a/b /some/b foo =:= b
> +%% "to": "/a/b",
> +%% }}
> +
>
>
>
> @@ -322,6 +331,14 @@ bind_path([?MATCH_ALL], [Match|_RestMatc
> {ok, Rest, [{?MATCH_ALL, Match}|Bindings]};
> bind_path(_, [], _) ->
> fail;
> +bind_path([{bind, {Token, MatchRe}}|RestToken],
> + [Match|RestMatch],Bindings) ->
> + case re:run(Match, MatchRe, [{capture, all, binary}]) of
> + {match, [_, Match1]} ->
> + bind_path(RestToken, RestMatch, [{{bind, Token}, Match1}|Bindings]);
> + _ ->
> + fail
> + end;
> bind_path([{bind, Token}|RestToken],[Match|RestMatch],Bindings) ->
> bind_path(RestToken, RestMatch, [{{bind, Token}, Match}|Bindings]);
> bind_path([Token|RestToken], [Token|RestMatch], Bindings) ->
> @@ -399,8 +416,18 @@ path_to_list([<<"..">>|R], Acc, DotDotCo
> path_to_list(R, [<<"..">>|Acc], DotDotCount+1);
> path_to_list([P|R], Acc, DotDotCount) ->
> P1 = case P of
> + <<"<", _Rest/binary>> ->
> + {ok, VarRe} = re:compile(<<"<([^>].*)>(.*)">>),
> + case re:run(P, VarRe, [{capture, all, binary}]) of
> + {match, [_, Var, Match]} ->
> + {ok, MatchRe} = re:compile(<<"(.*)", Match/binary>>),
> + {bind, {Var, MatchRe}};
> + _ -> P
> + end;
> <<":", Var/binary>> ->
> to_binding(Var);
> +
> +
> _ -> P
> end,
> path_to_list(R, [P1|Acc], DotDotCount).
>
>
Re: svn commit: r993532 - in /couchdb/trunk: share/www/script/test/rewrite.js
src/couchdb/couch_httpd_rewrite.erl
Posted by Benoit Chesneau <bc...@gmail.com>.
On Mon, Feb 28, 2011 at 11:54 PM, Jan Lehnardt <ja...@apache.org> wrote:
> Hey Benoit,
>
> how do you feel about changing <var> to {var}? It is a bit closer to URL Templating used by other systems. <var> reminds me too much of XML to make me happy :)
>
> If I see it correctly, this code is only in 1.1.x and trunk, so there's still time to work on it.
>
> Cheers
> Jan
> --
>
sound good for me :)
- benoit