mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
commit
d03d1d994b
1 changed files with 110 additions and 2 deletions
112
README.fr.rdoc
112
README.fr.rdoc
|
@ -146,6 +146,25 @@ Vous pouvez facilement définir vos propres conditions :
|
|||
"Désolé, vous avez perdu."
|
||||
end
|
||||
|
||||
Utilisez un splat (caractère joker) dans le cas d'une condition qui prend
|
||||
plusieurs valeurs :
|
||||
|
||||
set(:auth) do |*roles| # <- ici on utilise un splat
|
||||
condition do
|
||||
unless logged_in? && roles.any? {|role| current_user.in_role? role }
|
||||
redirect "/login/", 303
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
get "/mon/compte/", :auth => [:user, :admin] do
|
||||
"Informations sur votre compte"
|
||||
end
|
||||
|
||||
get "/reserve/aux/admins/", :auth => :admin do
|
||||
"Seuls les administrateurs sont acceptés ici !"
|
||||
end
|
||||
|
||||
=== Valeurs de retour
|
||||
|
||||
La valeur renvoyée par le bloc correspondant à une route constitue le corps de
|
||||
|
@ -175,6 +194,10 @@ Avec cela, on peut facilement implémenter un streaming par exemple :
|
|||
|
||||
get('/') { Stream.new }
|
||||
|
||||
Vous pouvez aussi utiliser le helper +stream+ (présenté un peu plus loin) pour
|
||||
éviter la surcharge et intégrer le traitement relatif au streaming dans le bloc
|
||||
de code de la route.
|
||||
|
||||
=== Masques de route spécifiques
|
||||
|
||||
Comme cela a été vu auparavant, Sinatra offre la possibilité d'utiliser des
|
||||
|
@ -840,6 +863,56 @@ retour et les entêtes :
|
|||
Comme +body+, +headers+ et +status+ peuvent être utilisés sans arguments
|
||||
pour accéder à leurs valeurs.
|
||||
|
||||
=== Faire du streaming
|
||||
|
||||
Il y a des cas où vous voulez commencer à renvoyer des données pendant que
|
||||
vous êtes en train de générer le reste de la réponse. Dans les cas les plus
|
||||
extrèmes, vous souhaitez continuer à envoyer des données tant que le client
|
||||
n'abandonne pas la connection. Vous pouvez alors utiliser le helper +stream+
|
||||
pour éviter de créer votre propre système :
|
||||
|
||||
get '/' do
|
||||
stream do |out|
|
||||
out << "Ca va être hallu -\n"
|
||||
sleep 0.5
|
||||
out << " (attends la suite) \n"
|
||||
sleep 1
|
||||
out << "- cinant !\n"
|
||||
end
|
||||
end
|
||||
|
||||
Cela permet d'implémenter des API de streaming ou de
|
||||
{Server Sent Events}[http://dev.w3.org/html5/eventsource/] et peut servir de
|
||||
base pour des {WebSockets}[http://en.wikipedia.org/wiki/WebSocket]. Vous
|
||||
pouvez aussi l'employer pour augmenter le débit quand une partie du contenu
|
||||
provient d'une resource lente.
|
||||
|
||||
Le fonctionnement du streaming, notamment le nombre de requêtes simultanées,
|
||||
dépend énormément du serveur web utilisé. Certains ne prennent pas du tout en
|
||||
charge le streaming (WEBRick par exemple). Lorsque le serveur ne gère pas le
|
||||
streaming, la partie body de la réponse sera envoyée au client en une seule
|
||||
fois, après que l'exécution du bloc passé au helper +stream+ sera terminée.
|
||||
|
||||
En utilisant le helper +stream+ avec le paramètre +false+, il n'appelera pas
|
||||
la méthode +close+ du flux, vous laissant la possibilité de le fermer à tout
|
||||
moment au cours de l'exécution. Ceci ne fonctionne qu'avec les serveurs
|
||||
evented (ie non threadés) tels que Thin et Rainbows. Les autres serveurs
|
||||
fermeront malgré tout le flux.
|
||||
|
||||
set :server, :thin
|
||||
connections = []
|
||||
|
||||
get '/' do
|
||||
# conserve le flux ouvert
|
||||
stream(false) { |out| connections << out }
|
||||
end
|
||||
|
||||
post '/' do
|
||||
# écrit dans tous les flux ouverts
|
||||
connections.each { |out| out << params[:message] << "\n" }
|
||||
"message sent"
|
||||
end
|
||||
|
||||
=== Journalisation (Logging)
|
||||
|
||||
Dans le contexte de la requête, la méthode utilitaire +logger+ expose une
|
||||
|
@ -962,7 +1035,7 @@ Si vous utilisez la méthode +expires+ pour définir l'entête correspondant,
|
|||
expires 500, :public, :must_revalidate
|
||||
end
|
||||
|
||||
Pour utiliser correctement les caches, vous devriez utiliser +etag+ et
|
||||
Pour utiliser correctement les caches, vous devriez utiliser +etag+ ou
|
||||
+last_modified+. Il est recommandé d'utiliser ces méthodes *avant* de faire
|
||||
d'importantes modifications, car elles vont immédiatement déclencher la réponse
|
||||
si le client a déjà la version courante dans son cache :
|
||||
|
@ -981,7 +1054,7 @@ Il est également possible d'utiliser un
|
|||
|
||||
Ces méthodes ne sont pas chargées de mettre des données en cache, mais elles
|
||||
fournissent les informations nécessaires pour votre cache. Si vous êtes à la
|
||||
recherche de solutions rapides de cache, essayez
|
||||
recherche de solutions rapides pour un reverse-proxy de cache, essayez
|
||||
{rack-cache}[http://rtomayko.github.com/rack-cache/] :
|
||||
|
||||
require "rack/cache"
|
||||
|
@ -1106,6 +1179,38 @@ Vous pouvez également lui passer un nom de fichier :
|
|||
"enregistre-le !"
|
||||
end
|
||||
|
||||
=== Gérer Date et Time
|
||||
|
||||
Sinatra fourni un helper +time_for+ pour convertir une valeur donnée en
|
||||
objet +Time+. Il peut aussi faire la conversion à partir d'objets +DateTime+,
|
||||
+Date+ ou de classes similaires.
|
||||
|
||||
get '/' do
|
||||
pass if Time.now > time_for('Dec 23, 2012')
|
||||
"encore temps"
|
||||
end
|
||||
|
||||
Cette méthode est utilisée en interne par +expires+, +last_modified+ et
|
||||
consorts. Par conséquent, vous pouvez très facilement étendre le
|
||||
fonctionnement de ces méthodes en surchargeant le helper +time_for+ dans
|
||||
votre application :
|
||||
|
||||
helpers do
|
||||
def time_for(value)
|
||||
case value
|
||||
when :yesterday then Time.now - 24*60*60
|
||||
when :tomorrow then Time.now + 24*60*60
|
||||
else super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
get '/' do
|
||||
last_modified :yesterday
|
||||
expires :tomorrow
|
||||
"salut"
|
||||
end
|
||||
|
||||
=== Chercher les fichiers de templates
|
||||
|
||||
La méthode <tt>find_template</tt> est utilisée pour trouver les fichiers de
|
||||
|
@ -1291,6 +1396,9 @@ Vous pouvez accéder à ces paramètres via <tt>settings</tt> :
|
|||
Activé par défaut pour le style classique, désactivé pour
|
||||
le style modulaire.
|
||||
|
||||
[threaded] à définir à +true+ pour indiquer à Thin d'utiliser
|
||||
<tt>EventMachine.defer</tt> pour traiter la requête.
|
||||
|
||||
[views] dossier des vues.
|
||||
|
||||
== Gérer les erreurs
|
||||
|
|
Loading…
Reference in a new issue