mirror of
https://github.com/aantron/dream.git
synced 2025-11-07 00:06:01 -05:00
Replace under and apply by scope
This commit is contained in:
parent
be0b179694
commit
5605742891
@ -7,7 +7,7 @@ let () =
|
||||
(fun request ->
|
||||
Printf.ksprintf Dream.respond "Prefix: %s" (Dream.target request));
|
||||
|
||||
Dream.under "/blah" [
|
||||
Dream.scope "/blah" [] [
|
||||
Dream.get "/echo/:word"
|
||||
(fun request ->
|
||||
request
|
||||
|
||||
@ -205,6 +205,7 @@ val reason : response -> string
|
||||
|
||||
val identity : middleware
|
||||
val start : middleware
|
||||
val pipeline : middleware list -> middleware
|
||||
val request_id : ?prefix:string -> middleware
|
||||
val logger : middleware
|
||||
val catch :
|
||||
@ -222,8 +223,9 @@ type route
|
||||
val get : string -> handler -> route
|
||||
val post : string -> handler -> route
|
||||
|
||||
val apply : middleware list -> route list -> route
|
||||
val under : string -> route list -> route
|
||||
(* val apply : middleware list -> route list -> route
|
||||
val under : string -> route list -> route *)
|
||||
val scope : string -> middleware list -> route list -> route
|
||||
|
||||
val router : route list -> middleware
|
||||
(* TODO LATER Define helpers for other methods. *)
|
||||
|
||||
@ -25,7 +25,7 @@ let rec validate = function
|
||||
| (Literal "")::_ -> false
|
||||
| _::more -> validate more
|
||||
|
||||
(* TODO Permit leading /. *)
|
||||
(* TODO Permit lack of leading /. *)
|
||||
(* TODO Permit double /. *)
|
||||
let parse string =
|
||||
|
||||
@ -64,6 +64,11 @@ let parse string =
|
||||
else
|
||||
tokens
|
||||
|
||||
let rec strip_empty_trailing_token = function
|
||||
| [] -> []
|
||||
| [Literal ""] -> []
|
||||
| token::tokens -> token::(strip_empty_trailing_token tokens)
|
||||
|
||||
|
||||
|
||||
type node =
|
||||
@ -93,11 +98,11 @@ let rec apply middlewares routes =
|
||||
in
|
||||
pattern, node)
|
||||
|
||||
(* TODO Need to handle the prefix extension and path chopping. *)
|
||||
(* TODO Need to handle variables in the prefix. *)
|
||||
(* TODO Strip trailing /. *)
|
||||
let under prefix routes =
|
||||
[parse prefix, Subsite (List.flatten routes)]
|
||||
[strip_empty_trailing_token (parse prefix), Subsite (List.flatten routes)]
|
||||
|
||||
let scope prefix middlewares routes =
|
||||
under prefix [apply middlewares routes]
|
||||
|
||||
|
||||
|
||||
|
||||
@ -14,8 +14,7 @@ val get : string -> Dream.handler -> route
|
||||
val post : string -> Dream.handler -> route
|
||||
|
||||
(* Route groups. *)
|
||||
val apply : Dream.middleware list -> route list -> route
|
||||
val under : string -> route list -> route
|
||||
val scope : string -> Dream.middleware list -> route list -> route
|
||||
|
||||
(* The middleware and the path parameter retriever. With respect to path
|
||||
parameters ("crumbs"), the middleware is the setter, and the retriever is,
|
||||
|
||||
@ -472,6 +472,13 @@ let identity handler request =
|
||||
let start handler request =
|
||||
handler request
|
||||
|
||||
let rec pipeline middlewares =
|
||||
let middlewares = List.rev middlewares in
|
||||
fun handler ->
|
||||
match middlewares with
|
||||
| [] -> handler
|
||||
| middleware::more -> pipeline more (middleware handler)
|
||||
|
||||
let sort_headers headers =
|
||||
List.stable_sort (fun (name, _) (name', _) -> compare name name') headers
|
||||
|
||||
|
||||
@ -233,11 +233,14 @@ let%expect_test _ =
|
||||
(* Router applies middlewares. *)
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc" @@ Dream.router [
|
||||
Dream.apply [
|
||||
|
||||
let pipeline = Dream.pipeline [
|
||||
(fun next_handler request -> print_endline "foo"; next_handler request);
|
||||
(fun next_handler request -> print_endline "bar"; next_handler request);
|
||||
] [
|
||||
] in
|
||||
|
||||
show "/abc" @@ Dream.router [
|
||||
Dream.scope "/" [pipeline] [
|
||||
Dream.get "/abc" (fun _ -> Dream.respond "baz");
|
||||
];
|
||||
];
|
||||
@ -249,7 +252,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/" @@ Dream.router [
|
||||
Dream.apply [
|
||||
Dream.scope "/" [
|
||||
(fun next_handler request -> print_endline "foo"; next_handler request);
|
||||
(fun next_handler request -> print_endline "bar"; next_handler request);
|
||||
] [
|
||||
@ -273,7 +276,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc/def" @@ Dream.router [
|
||||
Dream.under "/abc" [
|
||||
Dream.scope "/abc" [] [
|
||||
Dream.get "/def" (fun request ->
|
||||
Dream.respond (Dream.prefix request ^ " " ^ Dream.path request));
|
||||
];
|
||||
@ -284,7 +287,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/def/abc" @@ Dream.router [
|
||||
Dream.under "/abc" [
|
||||
Dream.scope "/abc" [] [
|
||||
Dream.get "/def" (fun request ->
|
||||
Dream.respond (Dream.prefix request ^ " " ^ Dream.path request));
|
||||
];
|
||||
@ -294,7 +297,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc/ghi" @@ Dream.router [
|
||||
Dream.under "/abc" [
|
||||
Dream.scope "/abc" [] [
|
||||
Dream.get "/def" (fun request ->
|
||||
Dream.respond (Dream.prefix request ^ " " ^ Dream.path request));
|
||||
];
|
||||
@ -307,7 +310,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc/def" @@ Dream.router [
|
||||
Dream.under "/:x" [
|
||||
Dream.scope "/:x" [] [
|
||||
Dream.get "/def" (fun request ->
|
||||
Dream.respond (Dream.crumb "x" request));
|
||||
];
|
||||
@ -318,7 +321,7 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc/def" @@ Dream.router [
|
||||
Dream.under "/:x" [
|
||||
Dream.scope "/:x" [] [
|
||||
Dream.get "/:x" (fun request ->
|
||||
Dream.respond (Dream.crumb "x" request));
|
||||
];
|
||||
@ -329,16 +332,14 @@ let%expect_test _ =
|
||||
|
||||
let%expect_test _ =
|
||||
show "/abc/def" @@ Dream.router [
|
||||
Dream.apply [
|
||||
Dream.scope "/abc" [
|
||||
(fun next_handler request -> print_endline "foo"; next_handler request);
|
||||
(fun next_handler request -> print_endline "bar"; next_handler request);
|
||||
] [
|
||||
Dream.under "/abc" [
|
||||
Dream.get "/def" (fun request ->
|
||||
Dream.respond (Dream.prefix request ^ " " ^ Dream.path request));
|
||||
];
|
||||
];
|
||||
];
|
||||
[%expect {|
|
||||
foo
|
||||
bar
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user