We mentioned early on that Syro can match and capture path segments,
but how exactly? In this chapter we will examine the path
object to see how it keeps track of the current and previous
paths.
Nous avons déjà mentionné que Syro peut capturer des segments du
chemin, mais comment au juste ? Dans ce chapitre nous allons
examiner l'objet path
pour voir comment il garde le
registre des chemins actuels et précédents.
The following example builds the response gradually. That is, it
uses res.text
more than once, and the response
contains an array of the successive calls.
L'exemple suivant construit la réponse de manière graduelle. C'est
à dire, on utilise res.text
plus d'une fois et la
réponse contient un tableau des appels successifs.
require "syro" App = Syro.new do res.text sprintf("%s|%s", path.prev, path.curr) on "foo" do res.text sprintf("%s|%s", path.prev, path.curr) on "bar" do res.text sprintf("%s|%s", path.prev, path.curr) end end end env = { "REQUEST_METHOD" => "GET", "PATH_INFO" => "/foo/bar", } p App.call(env)
Output:
Résultat :
[200, {"Content-Length"=>"27", "Content-Type"=>"text/plain"}, ["|/foo/bar", "/foo|/bar", "/foo/bar|"]]
While building the response, we put a pipe at the position where
path.prev
and path.curr
would be joined.
As the path segments were matched, parts of path.curr
were moved to path.prev
. Each call to on
uses the current version of the path (path.curr
) and
ignores the rest. That is what allows Syro to match successive
segments with nested blocks.
Quand on construisait la réponse, on a mis une barre verticale à
l'endroit où se rejoignent path.prev
et
path.curr
. Au fur et à mesure que des segments de
chemin sont matchés, des parties de path.curr
sont
déplacées à path.prev
. Chaque appel à on
utilise la version actuelle du chemin (path.curr
)
et ignore le reste. C'est cela qui permet à Syro de matcher
successivement des segments avec des blocs imbriqués.
Replace some matcher with a capture by using a symbol. How does it behave?
Remplacez un matcher par une capture en utilisant un symbole. Quel a été le comportement ?