Browse Source

Document some undefined behavior in cowboy_router

Loïc Hoguin 6 years ago
parent
commit
f0cae8dbcf
2 changed files with 10 additions and 0 deletions
  1. 8 0
      doc/src/guide/routing.asciidoc
  2. 2 0
      src/cowboy_router.erl

+ 8 - 0
doc/src/guide/routing.asciidoc

@@ -124,6 +124,14 @@ You can also have imbricated optional segments.
 [source,erlang]
 PathMatch = "/hats/[page/[:number]]".
 
+While Cowboy does not reject multiple brackets in a route,
+the behavior may be undefined if the route is under-specified.
+For example, this route requires constraints to determine what
+is a chapter and what is a page, since they are both optional:
+
+[source,erlang]
+PathMatch = "/book/[:chapter]/[:page]".
+
 You can retrieve the rest of the host or path using `[...]`.
 In the case of hosts it will match anything before, in the case
 of paths anything after the previously matched segments. It is

+ 2 - 0
src/cowboy_router.erl

@@ -428,6 +428,8 @@ compile_test_() ->
 					{[<<"horses">>], [], h, o},
 					{[<<"hats">>], [], h, o},
 					{[<<"hats">>, <<"page">>, number], [], h, o}]}]},
+		{[{'_', [{"/hats/:page/:number", h, o}]}], [{'_', [], [
+			{[<<"hats">>, page, number], [], h, o}]}]},
 		{[{'_', [{"/hats/[page/[:number]]", h, o}]}], [{'_', [], [
 			{[<<"hats">>], [], h, o},
 			{[<<"hats">>, <<"page">>], [], h, o},