Syro

6. Inspecting the path

6. Examiner le chemin

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.

Exercise

Exercice

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 ?


Prev | Index | Next

Précédent | Sommaire | Suivant