Syro

2. Matching path segments

2. Correspondance des segments de chemin

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é.

Exercise

Exercice

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.


Prev | Index | Next

Précédent | Sommaire | Suivant