In the tradition of libraries like Cuba and Rum, Syro lets you match segments of the path. Consider this example:
Suivant la tradition de bibliothèques comme Cuba et Rum, Syro vous permet de matcher des segments de chemin. Prenons cet exemple :
env = { "REQUEST_METHOD" => "GET", "PATH_INFO" => "/foo/bar/baz", }
In the example env
hash, foo
,
bar
and baz
are what we call segments.
Let's see how we can match those segments in our app:
Dans l'exemple du hash env
, foo
,
bar
et baz
sont ce qu'on appelle des
segments. Voyons comment on peut matcher ces segments dans notre
app :
require "syro" App = Syro.new do get do res.text "Welcome!" end on "foo" do on "bar" do on "baz" do get do res.text "Hello world!" end end end end end env = { "REQUEST_METHOD" => "GET", "PATH_INFO" => "/foo/bar/baz", } p App.call(env)
Run the code and you will get this output:
Exécutez le code et vous allez obtenir le résultat suivant :
[200, {"Content-Length"=>"12", "Content-Type"=>"text/plain"}, ["Hello world!"]]
Note that we use get
to indicate that we are targetting
the "GET"
request method, but also that there are
no segments left to be matched. For example, the first call to
get
does not trigger the execution of the block,
because at that point the path still contains the
"foo/bar/baz"
segments. Only once on
matches those segments we reach the end of the path, and the
nested get
matches.
Notez que nous utilisons get
pour indiquer que nous
ciblons la méthode de requête "GET"
, mais aussi qu'il
ne reste pas de segments à parcourir. Par exemple, ce premier
appel à get
ne déclenche pas l'exécution du bloc,
parce qu'à ce point-là le chemin contient encore les segments
"foo/bar/baz"
. Ce n'est que quand les appels à
on
parcourent ces segments qu'on atteint la fin du
chemin, et le get
imbriqué est vérifié.
Change the value of PATH_INFO
and run the program
again. Does it work as expected? Adapt the calls to on
to match the new value for PATH_INFO
.
Changez la valeur de PATH_INFO
et exécutez le programme
à nouveau. Est-ce que ça marche comme attendu ? Adaptez les appels
à on
pour les faire matcher avec la nouvelle valeur
de PATH_INFO
.