From a4f8bb65739b8a3b102c244a5ef7e5aa6a9f38e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 19 Mar 2011 18:53:59 +0100 Subject: Add support for the '*' path. Mostly used by the following request: OPTIONS * HTTP/1.1 --- src/cowboy_dispatcher.erl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/cowboy_dispatcher.erl') diff --git a/src/cowboy_dispatcher.erl b/src/cowboy_dispatcher.erl index 755a398..d66caf0 100644 --- a/src/cowboy_dispatcher.erl +++ b/src/cowboy_dispatcher.erl @@ -25,6 +25,8 @@ split_host(Host) -> string:tokens(Host, "."). -spec split_path(Path::string()) -> {Tokens::path_tokens(), Qs::string()}. +split_path('*') -> + {'*', []}; split_path(Path) -> case string:chr(Path, $?) of 0 -> @@ -57,6 +59,8 @@ match_path(_Path, [], _HostBinds) -> {error, notfound, path}; match_path(_Path, [{'_', Handler, Opts}|_Tail], HostBinds) -> {ok, Handler, Opts, HostBinds}; +match_path('*', [{'*', Handler, Opts}|_Tail], HostBinds) -> + {ok, Handler, Opts, HostBinds}; match_path(Path, [{PathMatch, Handler, Opts}|Tail], HostBinds) -> case try_match(path, Path, PathMatch) of false -> @@ -120,7 +124,6 @@ split_path_test_() -> Tests = [ {"?", [], []}, {"???", [], "??"}, - {"*", ["*"], []}, {"/", [], []}, {"/users", ["users"], []}, {"/users?", ["users"], []}, @@ -128,7 +131,8 @@ split_path_test_() -> {"/users/42/friends?a=b&c=d&e=notsure?whatever", ["users", "42", "friends"], "a=b&c=d&e=notsure?whatever"} ], - [{P, fun() -> {R, Qs} = split_path(P) end} || {P, R, Qs} <- Tests]. + [{"atom '*'", fun() -> {'*', []} = split_path('*') end}] + ++ [{P, fun() -> {R, Qs} = split_path(P) end} || {P, R, Qs} <- Tests]. match_test_() -> Dispatch = [ -- cgit v1.2.3