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:
commit
5f82e38afd
1 changed files with 38 additions and 32 deletions
|
@ -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 :
|
Là 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
|
||||||
|
|
Loading…
Reference in a new issue