1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00

Merge branch 'master' of github.com:sinatra/sinatra

This commit is contained in:
Konstantin Haase 2011-07-12 10:41:49 +02:00
commit 5f82e38afd

View file

@ -2,11 +2,12 @@
<i>Attention : Ce document correspond à la traduction de la version anglaise et <i>Attention : Ce document correspond à la traduction de la version anglaise et
il n'est peut être plus à jour.</i> il n'est peut être plus à jour.</i>
Sinatra est un DSL pour créer rapidement des applications web en Ruby et sans Sinatra est un DSL pour créer rapidement et facilement des applications web en
effort : Ruby :
# mon_application.rb # mon_application.rb
require 'sinatra' require 'sinatra'
get '/' do get '/' do
'Bonjour le monde !' 'Bonjour le monde !'
end end
@ -18,14 +19,13 @@ Installez la gem et lancez avec :
Le résultat est visible sur : http://localhost:4567 Le résultat est visible sur : http://localhost:4567
Il est également recommandé d'exécuter <tt>gem install thin</tt>, que Sinatra Il est recommandé d'exécuter également <tt>gem install thin</tt>, pour que
utilisera si disponible. Sinatra utilise le server Thin quand il est disponible.
== Routes == Routes
Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern) Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern)
URL. URL. Chaque route est associée à un bloc :
Chaque route est associée à un bloc :
get '/' do get '/' do
.. montrer quelque chose .. .. montrer quelque chose ..
@ -51,8 +51,8 @@ Chaque route est associée à un bloc :
.. apaiser quelquechose .. .. apaiser quelquechose ..
end end
Les routes sont comparées dans l'ordre où elles ont été définies. La première Les routes sont évaluées dans l'ordre où elles ont été définies. La première
route qui correspond à la requête est invoquée. route qui correspond à la requête est appelée.
Les masques peuvent inclure des paramètres nommés, accessibles par Les masques peuvent inclure des paramètres nommés, accessibles par
l'intermédiaire du hash <tt>params</tt> : l'intermédiaire du hash <tt>params</tt> :
@ -63,33 +63,39 @@ l'intermédiaire du hash <tt>params</tt> :
"Bonjour #{params[:nom]} !" "Bonjour #{params[:nom]} !"
end end
Vous pouvez aussi les nommer directement dans les paramètres du bloc comme Vous pouvez aussi accéder aux paramètres nommés directement grâce aux
ceci : paramètres du bloc comme ceci :
get '/bonjour/:nom' do |n| get '/bonjour/:nom' do |n|
"Bonjour #{n} !" "Bonjour #{n} !"
end end
Une route peut contenir un splat (caractère joker), accessible par Une route peut contenir un splat (caractère joker), accessible par
l'intermédiaire de la liste <tt>params[:splat]</tt> : l'intermédiaire du tableau <tt>params[:splat]</tt> :
get '/dire/*/a/*' do get '/dire/*/a/*' do
# répondrait à /dire/bonjour/a/monde # répond à /dire/bonjour/a/monde
params[:splat] # => ["bonjour", "monde"] params[:splat] # => ["bonjour", "monde"]
end end
get '/telecharger/*.*' do get '/telecharger/*.*' do
# répondrait à /telecharger/chemin/vers/fichier.xml # répond à /telecharger/chemin/vers/fichier.xml
params[:splat] # => ["chemin/vers/fichier", "xml"] params[:splat] # => ["chemin/vers/fichier", "xml"]
end end
Une route peut s'exprimer avec une Expression Régulière : Ou par l'intermédiaire des paramètres du bloc :
get '/telecharger/*.*' do |chemin, ext|
[chemin, ext] # => ["path/to/file", "xml"]
end
Une route peut aussi être définie par une Expression Régulière :
get %r{/bonjour/([\w]+)} do get %r{/bonjour/([\w]+)} do
"Bonjour, #{params[:captures].first} !" "Bonjour, #{params[:captures].first} !"
end end
Là aussi on peut utiliser les paramètres de bloc : encore on peut utiliser les paramètres de bloc :
get %r{/bonjour/([\w]+)} do |c| get %r{/bonjour/([\w]+)} do |c|
"Bonjour, #{c} !" "Bonjour, #{c} !"
@ -136,24 +142,24 @@ Vous pouvez facilement définir vos propres conditions :
=== Valeurs de retour === Valeurs de retour
La valeur de retour d'un bloc définissant une route détermine le corps de la La valeur renvoyée par le bloc correspondant à une route constitue le corps de
réponse qui sera transmise au client HTTP ou du moins au prochain middleware la réponse qui sera transmise au client HTTP ou du moins au prochain middleware
dans la pile Rack. Le plus généralement, il s'agit d'une chaîne de caractères, dans la pile Rack. Le plus souvent, il s'agit d'une chaîne de caractères,
comme dans les exemples précédents. Cependant, d'autres valeurs sont comme dans les exemples précédents. Cependant, d'autres valeurs sont
acceptées. acceptées.
Vous pouvez renvoyer n'importe quel objet qui soit une réponse Rack valide, un Vous pouvez renvoyer n'importe quel objet qu'il s'agisse d'une réponse Rack
corps de réponse Rack ou un code retour HTTP : valide, d'un corps de réponse Rack ou d'un code statut HTTP :
* Un tableau de 3 éléments : <tt>[code retour (Fixnum), entêtes (Hash), corps * Un tableau de 3 éléments : <tt>[code statut (Fixnum), entêtes (Hash), corps
de réponse (répondant à #each)]</tt> de la réponse (répondant à #each)]</tt>
* Un tableau de 2 élements : <tt>[code retour (Fixnum), corps de réponse * Un tableau de 2 élements : <tt>[code statut (Fixnum), corps de la réponse
(répondant à #each)]</tt> (répondant à #each)]</tt>
* Un objet qui répond à <tt>#each</tt> et qui ne transmet que des chaînes de * Un objet qui répond à <tt>#each</tt> et qui ne transmet que des chaînes de
caractères au bloc fourni caractères au bloc fourni
* Un Fixnum représentant le code retour * Un Fixnum représentant le code statut
Ainsi, on peut facilement implémenter un streaming par exemple : Avec cela, on peut facilement implémenter un streaming par exemple :
class Stream class Stream
def each def each
@ -165,9 +171,9 @@ Ainsi, on peut facilement implémenter un streaming par exemple :
=== Masques de route spécifiques === Masques de route spécifiques
Comme montré plus haut, Sinatra embarque le support pour l'utilisation de Comme cela a été vu auparavant, Sinatra offre la possibilité d'utiliser des
masques utilisant des chaînes de caractères ou des expressions régulières masques sous forme de chaines de caractères ou des expressions régulières
pour définir les routes. Toutefois, cela ne s'arrête pas là. Vous pouvez pour définir les routes. Mais il est possible de faire bien plus. Vous pouvez
facilement définir vos propres masques : facilement définir vos propres masques :
class MasqueToutSauf class MasqueToutSauf
@ -191,7 +197,7 @@ facilement définir vos propres masques :
# ... # ...
end end
Notez que l'exemple ci-dessus est bien trop compliqué et le même résultat Notez que l'exemple ci-dessus est bien trop compliqué et que le même résultat
peut être obtenu avec : peut être obtenu avec :
get // do get // do
@ -718,7 +724,7 @@ Si vous souhaitez avoir plus de contrôle, vous pouvez également enregistrer un
set :sessions, :domain => 'foo.com' set :sessions, :domain => 'foo.com'
== Halt === Halt
Pour arrêter immédiatement la requête dans un filtre ou un gestionnaire de Pour arrêter immédiatement la requête dans un filtre ou un gestionnaire de
route : route :
@ -745,7 +751,7 @@ Bien sûr il est possible de combiner un template avec +halt+ :
halt erb(:erreur) halt erb(:erreur)
== Passer === Passer
Une route peut passer le relais aux autres routes qui correspondent également Une route peut passer le relais aux autres routes qui correspondent également
avec <tt>pass</tt> : avec <tt>pass</tt> :
@ -1016,7 +1022,7 @@ Si le gestionnaire Rack le supporte, d'autres moyens que le +streaming+ via le
processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera
automatiquement les requêtes de type +range+. automatiquement les requêtes de type +range+.
== Accéder à l'objet requête === Accéder à l'objet requête
L'objet correspondant à la requête envoyée peut être récupéré dans le contexte L'objet correspondant à la requête envoyée peut être récupéré dans le contexte
de la requête (filtres, routes, gestionnaires d'erreur) au moyen de la méthode de la requête (filtres, routes, gestionnaires d'erreur) au moyen de la méthode