Skip to content
Newer
Older
100644 2015 lines (1442 sloc) 62.1 KB
a8b5086 @michelc Added optional parameter info to the README.fr
michelc authored
1 = Sinatra
fac10a7 @rkh fix markup in French readme
rkh authored
2
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
3 <i>Attention : Ce document correspond à la traduction de la version anglaise et
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
4 il n'est peut être plus à jour.</i>
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
5
d29df75 @michelc Proofreading the section about Routes
michelc authored
6 Sinatra est un DSL pour créer rapidement et facilement des applications web en
7 Ruby :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
8
9 # mon_application.rb
10 require 'sinatra'
d29df75 @michelc Proofreading the section about Routes
michelc authored
11
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
12 get '/' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
13 'Bonjour le monde !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
14 end
15
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
16 Installez la gem et lancez avec :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
17
3a25d98 @rkh Adjust examples in French and Spanish READMEs.
rkh authored
18 gem install sinatra
19 ruby -rubygems mon_application.rb
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
20
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
21 Le résultat est visible sur : http://localhost:4567
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
22
d29df75 @michelc Proofreading the section about Routes
michelc authored
23 Il est recommandé d'exécuter également <tt>gem install thin</tt>, pour que
24 Sinatra utilise le server Thin quand il est disponible.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
25
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
26 == Routes
27
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
28 Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern)
d29df75 @michelc Proofreading the section about Routes
michelc authored
29 URL. Chaque route est associée à un bloc :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
30
31 get '/' do
32 .. montrer quelque chose ..
33 end
34
35 post '/' do
36 .. créer quelque chose ..
37 end
38
39 put '/' do
644c26e @sylvaindesve French README update.
sylvaindesve authored
40 .. remplacer quelque chose ..
41 end
42
43 patch '/' do
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
44 .. changer quelque chose ..
45 end
46
47 delete '/' do
48 .. effacer quelque chose ..
49 end
50
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
51 options '/' do
52 .. apaiser quelquechose ..
53 end
54
d29df75 @michelc Proofreading the section about Routes
michelc authored
55 Les routes sont évaluées dans l'ordre où elles ont été définies. La première
56 route qui correspond à la requête est appelée.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
57
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
58 Les masques peuvent inclure des paramètres nommés, accessibles par
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
59 l'intermédiaire du hash <tt>params</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
60
61 get '/bonjour/:nom' do
62 # répond aux requêtes "GET /bonjour/foo" et "GET /bonjour/bar"
63 # params[:nom] est 'foo' ou 'bar'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
64 "Bonjour #{params[:nom]} !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
65 end
66
d29df75 @michelc Proofreading the section about Routes
michelc authored
67 Vous pouvez aussi accéder aux paramètres nommés directement grâce aux
68 paramètres du bloc comme ceci :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
69
70 get '/bonjour/:nom' do |n|
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
71 "Bonjour #{n} !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
72 end
73
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
74 Une route peut contenir un splat (caractère joker), accessible par
d29df75 @michelc Proofreading the section about Routes
michelc authored
75 l'intermédiaire du tableau <tt>params[:splat]</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
76
77 get '/dire/*/a/*' do
d29df75 @michelc Proofreading the section about Routes
michelc authored
78 # répond à /dire/bonjour/a/monde
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
79 params[:splat] # => ["bonjour", "monde"]
80 end
81
82 get '/telecharger/*.*' do
d29df75 @michelc Proofreading the section about Routes
michelc authored
83 # répond à /telecharger/chemin/vers/fichier.xml
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
84 params[:splat] # => ["chemin/vers/fichier", "xml"]
85 end
86
d29df75 @michelc Proofreading the section about Routes
michelc authored
87 Ou par l'intermédiaire des paramètres du bloc :
88
89 get '/telecharger/*.*' do |chemin, ext|
90 [chemin, ext] # => ["path/to/file", "xml"]
91 end
92
93 Une route peut aussi être définie par une Expression Régulière :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
94
95 get %r{/bonjour/([\w]+)} do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
96 "Bonjour, #{params[:captures].first} !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
97 end
98
d29df75 @michelc Proofreading the section about Routes
michelc authored
99 Là encore on peut utiliser les paramètres de bloc :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
100
101 get %r{/bonjour/([\w]+)} do |c|
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
102 "Bonjour, #{c} !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
103 end
104
a8b5086 @michelc Added optional parameter info to the README.fr
michelc authored
105 Les routes peuvent aussi comporter des paramètres optionnels :
106
107 get '/posts.?:format?' do
108 # répond à "GET /posts" et aussi à "GET /posts.json", "GET /posts.xml" etc...
109 end
110
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
111 === Conditions
112
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
113 Les routes peuvent définir toutes sortes de conditions, comme par exemple le
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
114 "user agent" :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
115
116 get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
117 "Vous utilisez Songbird version #{params[:agent][0]}"
118 end
119
120 get '/foo' do
121 # Correspond à tous les autres navigateurs
122 end
123
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
124 Les autres conditions disponibles sont +host_name+ et +provides+ :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
125
126 get '/', :host_name => /^admin\./ do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
127 "Zone Administrateur, Accès refusé !"
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
128 end
129
130 get '/', :provides => 'html' do
131 haml :index
132 end
133
134 get '/', :provides => ['rss', 'atom', 'xml'] do
135 builder :feed
136 end
137
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
138 Vous pouvez facilement définir vos propres conditions :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
139
140 set(:probability) { |value| condition { rand <= value } }
141
142 get '/gagner_une_voiture', :probability => 0.1 do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
143 "Vous avez gagné !"
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
144 end
145
146 get '/gagner_une_voiture' do
147 "Désolé, vous avez perdu."
148 end
149
9ca62c3 @michelc Added example for condition with array argument
michelc authored
150 Utilisez un splat (caractère joker) dans le cas d'une condition qui prend
151 plusieurs valeurs :
152
153 set(:auth) do |*roles| # <- ici on utilise un splat
154 condition do
155 unless logged_in? && roles.any? {|role| current_user.in_role? role }
156 redirect "/login/", 303
157 end
158 end
159 end
160
161 get "/mon/compte/", :auth => [:user, :admin] do
162 "Informations sur votre compte"
163 end
164
165 get "/reserve/aux/admins/", :auth => :admin do
166 "Seuls les administrateurs sont acceptés ici !"
167 end
168
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
169 === Valeurs de retour
170
d29df75 @michelc Proofreading the section about Routes
michelc authored
171 La valeur renvoyée par le bloc correspondant à une route constitue le corps de
172 la réponse qui sera transmise au client HTTP ou du moins au prochain middleware
173 dans la pile Rack. Le plus souvent, il s'agit d'une chaîne de caractères,
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
174 comme dans les exemples précédents. Cependant, d'autres valeurs sont
175 acceptées.
176
d29df75 @michelc Proofreading the section about Routes
michelc authored
177 Vous pouvez renvoyer n'importe quel objet qu'il s'agisse d'une réponse Rack
178 valide, d'un corps de réponse Rack ou d'un code statut HTTP :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
179
d29df75 @michelc Proofreading the section about Routes
michelc authored
180 * Un tableau de 3 éléments : <tt>[code statut (Fixnum), entêtes (Hash), corps
181 de la réponse (répondant à #each)]</tt>
182 * Un tableau de 2 élements : <tt>[code statut (Fixnum), corps de la réponse
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
183 (répondant à #each)]</tt>
184 * Un objet qui répond à <tt>#each</tt> et qui ne transmet que des chaînes de
185 caractères au bloc fourni
d29df75 @michelc Proofreading the section about Routes
michelc authored
186 * Un Fixnum représentant le code statut
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
187
d29df75 @michelc Proofreading the section about Routes
michelc authored
188 Avec cela, on peut facilement implémenter un streaming par exemple :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
189
190 class Stream
191 def each
192 100.times { |i| yield "#{i}\n" }
193 end
194 end
195
196 get('/') { Stream.new }
197
733d54a @michelc Add section about #stream helper
michelc authored
198 Vous pouvez aussi utiliser le helper +stream+ (présenté un peu plus loin) pour
199 éviter la surcharge et intégrer le traitement relatif au streaming dans le bloc
200 de code de la route.
201
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
202 === Masques de route spécifiques
203
d29df75 @michelc Proofreading the section about Routes
michelc authored
204 Comme cela a été vu auparavant, Sinatra offre la possibilité d'utiliser des
205 masques sous forme de chaines de caractères ou des expressions régulières
206 pour définir les routes. Mais il est possible de faire bien plus. Vous pouvez
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
207 facilement définir vos propres masques :
208
209 class MasqueToutSauf
210 Masque = Struct.new(:captures)
211
212 def initialize(except)
213 @except = except
86eaf06 @sylvaindesve Sync French readme.
sylvaindesve authored
214 @captures = Masque.new([])
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
215 end
216
217 def match(str)
218 @caputres unless @except === str
219 end
220 end
221
222 def tout_sauf(masque)
223 MasqueToutSauf.new(masque)
224 end
225
226 get tout_sauf("/index") do
227 # ...
228 end
229
d29df75 @michelc Proofreading the section about Routes
michelc authored
230 Notez que l'exemple ci-dessus est bien trop compliqué et que le même résultat
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
231 peut être obtenu avec :
232
233 get // do
234 pass if request.path_info == "/index"
235 # ...
236 end
237
238 Ou bien en utilisant la forme négative :
239
240 get %r{^(?!/index$)} do
241 # ...
242 end
243
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
244 == Fichiers statiques
245
0d37fe0 @michelc Proofreading the (short) section about static files
michelc authored
246 Les fichiers du dossier <tt>./public</tt> sont servis de façon statique. Vous
247 avez la possibilité d'utiliser un autre répertoire en définissant le paramètre
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
248 <tt>:public_folder</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
249
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
250 set :public_folder, File.dirname(__FILE__) + '/statique'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
251
0d37fe0 @michelc Proofreading the (short) section about static files
michelc authored
252 Notez que le nom du dossier public n'apparait pas dans l'URL. Le fichier
253 <tt>./public/css/style.css</tt> sera appelé via l'URL :
254 <tt>http://exemple.com/css/style.css</tt>.
255
256 Utilisez le paramètre <tt>:static_cache_control</tt> pour ajouter l'information
257 d'en-tête <tt>Cache-Control</tt> (voir plus loin).
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
258
259 == Vues / Templates
260
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
261 Chaqie langage de template est disponible via sa propre méthode de rendu,
262 lesquelles renvoient tout simplement une chaîne de caractères.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
263
264 get '/' do
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
265 erb :index
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
266 end
267
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
268 Ceci effectue le rendu de la vue <tt>views/index.erb</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
269
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
270 Plutôt que d'utiliser le nom d'un template, vous pouvez directement passer
271 le contenu du template :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
272
273 get '/' do
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
274 code = "<%= Time.now %>"
275 erb code
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
276 end
277
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
278 Les méthodes de templates acceptent un second paramètre, un hash d'options :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
279
280 get '/' do
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
281 erb :index, :layout => :post
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
282 end
283
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
284 Ceci effectuera le rendu de la vue <tt>views/index.erb</tt> en l'intégrant
285 au +layout+ <tt>views/post.erb</tt> (les vues Erb sont intégrées par défaut
286 au +layout+ <tt>views/layout.erb</tt> quand ce fichier existe).
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
287
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
288 Toute option que Sinatra ne comprend pas sera passée au moteur de rendu :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
289
290 get '/' do
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
291 haml :index, :format => :html5
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
292 end
293
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
294 Vous pouvez également définir des options par langage de template de façon
295 générale :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
296
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
297 set :haml, :format => html5
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
298
299 get '/' do
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
300 haml :index
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
301 end
302
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
303 Les options passées à la méthode de rendu prennent le pas sur les options
304 définies au moyen de +set+.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
305
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
306 Options disponibles :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
307
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
308 [locals]
309 Liste de variables locales passées au document. Pratique pour les vues
310 partielles.
311 Exemple : <tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
312
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
313 [default_encoding]
314 Encodage de caractères à utiliser en cas d'incertitude. Par défaut, c'est
315 <tt>settings.default_encoding</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
316
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
317 [views]
318 Dossier de vues dans lequel chercher les templates. Par défaut
319 <tt>settings.views</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
320
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
321 [layout]
322 S'il faut ou non utiliser un +layout+ (+true+ or +false+). Indique le
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
323 template à utiliser lorsque c'est un symbole. Exemple : <tt>erb :index,
324 :layout => !request.xhr?</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
325
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
326 [content_type]
327 Content-Type que le template produit, dépend par défaut du langage de
328 template.
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some tim…
rkh authored
329
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
330 [scope]
331 Contexte sous lequel effectuer le rendu du template. Par défaut il s'agit
332 de l'instance de l'application. Si vous changez cela, les variables
333 d'instance et les méthodes utilitaires ne seront pas disponibles.
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some tim…
rkh authored
334
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
335 [layout_engine]
336 Moteur de rendu à utiliser pour le +layout+. Utile pour les langages ne
337 supportant pas les +layouts+. Il s'agit par défaut du moteur utilisé pour
338 le rendu du template. Exemple : <tt>set :rdoc, :layout_engine => :erb</tt>
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some tim…
rkh authored
339
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
340 Les templates sont supposés se trouver directement dans le dossier
341 <tt>./views</tt>. Pour utiliser un dossier de vues différent :
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some tim…
rkh authored
342
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
343 set :views, settings.root + '/templates'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
344
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
345 Il est important de se souvenir que les templates sont toujours référencés
346 sous forme de symboles, même lorsqu'ils sont dans un sous-répertoire (dans
347 ce cas, utilisez <tt>:'sous_repertoire/template'</tt>). Il faut utiliser
348 un symbole car les méthodes de rendu évaluent le contenu des chaînes de
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
349 caractères au lieu de les considérer comme un chemin vers un fichier.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
350
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
351 === Langages de template disponibles
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
352
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
353 Certains langages ont plusieurs implémentations. Pour préciser l'implémentation
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
354 à utiliser (et garantir l'aspect thread-safe), vous devez simplement l'avoir
355 chargée au préalable :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
356
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
357 require 'rdiscount' # ou require 'bluecloth'
358 get('/') { markdown :index }
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
359
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
360 === Templates Haml
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
361
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
362 Dépendances:: {haml}[http://haml-lang.com/]
363 Extensions de fichier:: <tt>.haml</tt>
364 Exemple:: <tt>haml :index, :format => :html5</tt>
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
365
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
366 === Templates Erb
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
367
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
368 Dépendances:: {erubis}[http://www.kuwata-lab.com/erubis/] ou
369 erb (inclus avec Ruby)
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
370 Extensions de fichier:: <tt>.erb</tt>, <tt>.rhtml</tt> ou <tt>.erubis</tt>
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
371 (Erubis seulement)
372 Exemple:: <tt>erb :index</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
373
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
374 === Templates Builder
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
375
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
376 Dépendances:: {builder}[http://builder.rubyforge.org/]
377 Extensions de fichier:: <tt>.builder</tt>
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
378 Exemple:: <tt>builder { |xml| xml.em "salut" }</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
379
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
380 Ce moteur accepte également un bloc pour des templates en ligne (voir exemple).
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
381
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
382 === Templates Nokogiri
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
383
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
384 Dépendances:: {nokogiri}[http://nokogiri.org/]
385 Extensions de fichier:: <tt>.nokogiri</tt>
fb46ad0 @michelc Fix copy/paste error with nokogiri in french readme
michelc authored
386 Exemple:: <tt>nokogiri { |xml| xml.em "salut" }</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
387
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
388 Ce moteur accepte également un bloc pour des templates en ligne (voir exemple).
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
389
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
390 === Templates Sass
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
391
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
392 Dépendances:: {sass}[http://sass-lang.com/]
393 Extensions de fichier:: <tt>.sass</tt>
394 Exemple:: <tt>sass :stylesheet, :style => :expanded</tt>
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
395
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
396 === Templates SCSS
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
397
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
398 Dépendances:: {sass}[http://sass-lang.com/]
399 Extensions de fichier:: <tt>.scss</tt>
400 Exemple:: <tt>scss :stylesheet, :style => :expanded</tt>
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
401
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
402 === Templates Less
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
403
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
404 Dépendances:: {less}[http://www.lesscss.org/]
405 Extensions de fichier:: <tt>.less</tt>
406 Exemple:: <tt>less :stylesheet</tt>
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
407
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
408 === Templates Liquid
409
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
410 Dépendances:: {liquid}[http://www.liquidmarkup.org/]
411 Extensions de fichier:: <tt>.liquid</tt>
412 Exemple:: <tt>liquid :index, :locals => { :key => 'value' }</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
413
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
414 Comme vous ne pouvez appeler de méthodes Ruby (autres que +yield+) dans un
415 template Liquid, vous aurez sûrement à lui passer des variables locales.
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
416
417 === Templates Markdown
418
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
419 Dépendances:: {rdiscount}[https://github.com/rtomayko/rdiscount],
420 {redcarpet}[https://github.com/tanoku/redcarpet],
421 {bluecloth}[http://deveiate.org/projects/BlueCloth],
422 {kramdown}[http://kramdown.rubyforge.org/] *ou*
423 {maruku}[http://maruku.rubyforge.org/]
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
424 Extensions de fichier:: <tt>.markdown</tt>, <tt>.mkd</tt> et <tt>.md</tt>
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
425 Exemple:: <tt>markdown :index, :layout_engine => :erb</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
426
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
427 Il n'est pas possible d'appeler des méthodes depuis markdown, ni de lui
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
428 passer des variables locales. Par conséquent, il sera souvent utilisé en
429 combinaison avec un autre moteur de rendu :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
430
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
431 erb :overview, :locals => { :text => markdown(:introduction) }
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
432
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
433 Notez que vous pouvez également appeler la méthode +markdown+ au sein d'autres
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
434 templates :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
435
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
436 %h1 Hello From Haml !
437 %p= markdown(:greetings)
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
438
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
439 Comme vous ne pouvez pas appeler de Ruby au sein de Markdown, vous ne pouvez
440 pas utiliser de +layouts+ écrits en Markdown. Toutefois, il est possible
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
441 d'utiliser un moteur de rendu différent pour le template et pour le +layout+
442 en utilisant l'option <tt>:layout_engine</tt>.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
443
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
444 === Templates Textile
445
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
446 Dépendances:: {RedCloth}[http://redcloth.org/]
447 Extensions de fichier:: <tt>.textile</tt>
448 Exemple:: <tt>textile :index, :layout_engine => :erb</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
449
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
450 Il n'est pas possible d'appeler des méthodes depuis textile, ni de lui
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
451 passer des variables locales. Par conséquent, il sera souvent utilisé en
452 combinaison avec un autre moteur de rendu :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
453
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
454 erb :overview, :locals => { :text => textile(:introduction) }
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
455
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
456 Notez que vous pouvez également appeler la méthode +textile+ au sein d'autres
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
457 templates :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
458
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
459 %h1 Hello From Haml !
460 %p= textile(:greetings)
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
461
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
462 Comme vous ne pouvez pas appeler de Ruby au sein de Textile, vous ne pouvez
463 pas utiliser de +layouts+ écrits en Textile. Toutefois, il est possible
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
464 d'utiliser un moteur de rendu différent pour le template et pour le +layout+
465 en utilisant l'option <tt>:layout_engine</tt>.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
466
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
467 === Templates RDoc
468
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
469 Dépendances:: {rdoc}[http://rdoc.rubyforge.org/]
470 Extensions de fichier:: <tt>.rdoc</tt>
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
471 Exemple:: <tt>rdoc :README, :layout_engine => :erb</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
472
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
473 Il n'est pas possible d'appeler des méthodes depuis rdoc, ni de lui
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
474 passer des variables locales. Par conséquent, il sera souvent utilisé en
475 combinaison avec un autre moteur de rendu :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
476
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
477 erb :overview, :locals => { :text => rdoc(:introduction) }
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
478
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
479 Notez que vous pouvez également appeler la méthode +rdoc+ au sein d'autres
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
480 templates :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
481
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
482 %h1 Hello From Haml !
483 %p= rdoc(:greetings)
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
484
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
485 Comme vous ne pouvez pas appeler de Ruby au sein de RDoc, vous ne pouvez
486 pas utiliser de +layouts+ écrits en RDoc. Toutefois, il est possible
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
487 d'utiliser un moteur de rendu différent pour le template et pour le +layout+
488 en utilisant l'option <tt>:layout_engine</tt>.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
489
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
490 === Templates Radius
491
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
492 Dépendances:: {radius}[http://radius.rubyforge.org/]
493 Extensions de fichier:: <tt>.radius</tt>
494 Exemple:: <tt>radius :index, :locals => { :key => 'value' }</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
495
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
496 Comme vous ne pouvez pas appeler de méthodes Ruby depuis un template Radius,
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
497 vous aurez sûrement à lui passer des variables locales.
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
498
499 === Templates Markaby
500
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
501 Dépendances:: {markaby}[http://markaby.github.com/]
502 Extensions de fichier:: <tt>.mab</tt>
503 Exemple:: <tt>markaby { h1 "Bienvenue !" }</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
504
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
505 Ce moteur accepte également un bloc pour des templates en ligne (voir exemple).
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
506
ca7fbe5 @rkh Add documentation for Slim templates.
rkh authored
507 === Templates Slim
508
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
509 Dépendances:: {slim}[http://slim-lang.com/]
510 Extensions de fichier:: <tt>.slim</tt>
511 Exemple:: <tt>slim :index</tt>
ca7fbe5 @rkh Add documentation for Slim templates.
rkh authored
512
9ce9e54 @rkh add support for creole templates
rkh authored
513 === Templates Creole
514
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
515 Dépendances:: {creole}[https://github.com/minad/creole]
516 Extensions de fichier:: <tt>.creole</tt>
517 Exemple:: <tt>creole :wiki, :layout_engine => :erb</tt>
9ce9e54 @rkh add support for creole templates
rkh authored
518
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
519 Il n'est pas possible d'appeler des méthodes depuis creole, ni de lui
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
520 passer des variables locales. Par conséquent, il sera souvent utilisé en
521 combinaison avec un autre moteur de rendu :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
522
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
523 erb :overview, :locals => { :text => creole(:introduction) }
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
524
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
525 Notez que vous pouvez également appeler la méthode +creole+ au sein d'autres
526 templates :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
527
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
528 %h1 Hello From Haml !
529 %p= creole(:greetings)
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
530
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
531 Comme vous ne pouvez pas appeler de Ruby au sein de Creole, vous ne pouvez
532 pas utiliser de +layouts+ écrits en Creole. Toutefois, il est possible
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
533 d'utiliser un moteur de rendu différent pour le template et pour le +layout+
534 en utilisant l'option <tt>:layout_engine</tt>.
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
535
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
536 === Templates CoffeeScript
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
537
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
538 Dépendances:: {coffee-script}[https://github.com/josh/ruby-coffee-script]
539 et un {moyen d'exécuter javascript}[https://github.com/sstephenson/execjs/blob/master/README.md#readme]
540 Extensions de fichier:: <tt>.coffee</tt>
541 Exemple:: <tt>coffee :index</tt>
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
542
fe58004 @michelc sync readmefr with Yajl templates
michelc authored
543 === Templates Yajl
544
545 Dépendances:: {yajl-ruby}[https://github.com/brianmario/yajl-ruby]
546 Extensions de fichier:: <tt>.yajl</tt>
547 Exemple:: <tt>yajl :index, :locals => { :key => 'qux' }, :callback => 'present', :variable => 'resource'</tt>
548
549 Le source du template est évalué en tant que chaine Ruby, puis la variable json
550 obtenue est convertie avec #to_json.
551
552 json = { :foo => 'bar' }
553 json[:baz] = key
554
555 Les options <tt>:callback</tt> et <tt>:variable</tt> peuvent être utilisées
556 pour décorer l'objet retourné.
557
558 var resource = {"foo":"bar","baz":"qux"}; present(resource);
559
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
560 === Templates embarqués
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
561
562 get '/' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
563 haml '%div.title Bonjour le monde'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
564 end
565
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
566 Générera le code du template spécifié dans la chaîne de caractères.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
567
568 === Accéder aux variables dans un Template
569
570 Un template est évalué dans le même contexte que l'endroit d'où il a été
571 appelé (gestionnaire de route). Les variables d'instance déclarées dans le
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
572 gestionnaire de route sont directement accessibles dans le template :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
573
574 get '/:id' do
575 @foo = Foo.find(params[:id])
576 haml '%h1= @foo.nom'
577 end
578
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
579 Alternativement, on peut passer un hash contenant des variables locales :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
580
581 get '/:id' do
582 foo = Foo.find(params[:id])
583 haml '%h1= foo.nom', :locals => { :foo => foo }
584 end
585
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
586 Ceci est généralement utilisé lorsque l'on veut utiliser un template comme
587 partiel (depuis un autre template) et qu'il est donc nécessaire d'adapter les
588 noms de variables.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
589
590 === Templates dans le fichier source
591
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
592 Des templates peuvent être définis dans le fichier source comme ceci :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
593
594 require 'sinatra'
595
596 get '/' do
597 haml :index
598 end
599
600 __END__
601
602 @@ layout
603 %html
604 = yield
605
606 @@ index
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
607 %div.title Bonjour le monde !
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
608
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
609 NOTE : Les templates du fichier source qui contient <tt>require 'sinatra'</tt>
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
610 sont automatiquement chargés. Si vous avez des templates dans d'autres
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
611 fichiers source, il faut explicitement les déclarer avec
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
612 <tt>enable :inline_templates</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
613
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
614 === Templates nommés
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
615
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
616 Les templates peuvent aussi être définis grâce à la méthode de haut niveau
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
617 <tt>template</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
618
619 template :layout do
620 "%html\n =yield\n"
621 end
622
623 template :index do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
624 '%div.title Bonjour le monde !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
625 end
626
627 get '/' do
628 haml :index
629 end
630
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
631 Si un template nommé "layout" existe, il sera utilisé à chaque fois qu'un
632 template sera affiché. Vous pouvez désactivez les layouts au cas par cas en
633 passant <tt>:layout => false</tt> ou bien les désactiver par défaut au moyen
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
634 de <tt>set :haml, :layout => false</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
635
636 get '/' do
637 haml :index, :layout => !request.xhr?
638 end
639
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
640 === Associer des extensions de fichier
641
642 Pour associer une extension de fichier avec un moteur de rendu, utilisez
643 <tt>Tilt.register</tt>. Par exemple, si vous désirez utiliser l'extension
644 de fichier +tt+ pour les templates Textile, vous pouvez faire comme suit :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
645
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
646 Tilt.register :tt, Tilt[:textile]
647
648 === Ajouter son propre moteur de rendu
649
650 En premier lieu, déclarez votre moteur de rendu avec Tilt, ensuite créez
651 votre méthode de rendu :
652
653 Tilt.register :monmoteur, MonMerveilleurMoteurDeRendu
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
654
655 helpers do
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
656 def monmoteur(*args) render(:monmoteur, *args) end
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
657 end
658
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
659 get '/' do
660 monmoteur :index
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
661 end
662
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
663 Utilisera <tt>./views/index.monmoteur</tt>. Voir
664 https://github.com/rtomayko/tilt pour en savoir plus sur Tilt.
665
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
666 == Filtres
667
d0aa1a5 @michelc Proofreading filter section on French Readme.
michelc authored
668 Les filtres before sont exécutés avant chaque requête, dans le même contexte
669 que les routes, et permettent de modifier la requête et sa réponse. Les
670 variables d'instance déclarées dans les filtres sont accessibles au niveau
671 des routes et des templates :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
672
673 before do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
674 @note = 'Coucou !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
675 request.path_info = '/foo/bar/baz'
676 end
677
678 get '/foo/*' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
679 @note #=> 'Coucou !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
680 params[:splat] #=> 'bar/baz'
681 end
682
d0aa1a5 @michelc Proofreading filter section on French Readme.
michelc authored
683 Les filtres after sont exécutés après chaque requête à l'intérieur du même
684 contexte et permettent de modifier la requête et sa réponse. Les variables
685 d'instance déclarées dans les filtres before ou les routes sont accessibles
686 au niveau des filtres after :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
687
688 after do
689 puts response.status
690 end
691
d0aa1a5 @michelc Proofreading filter section on French Readme.
michelc authored
692 Note : Le corps de la réponse n'est pas disponible au niveau du filtre after
693 car il ne sera généré que plus tard (sauf dans le cas où vous utilisez la
694 méthode +body+ au lieu de simplement renvoyer une chaine depuis vos routes).
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
695
d0aa1a5 @michelc Proofreading filter section on French Readme.
michelc authored
696 Les filtres peuvent être associés à un masque, ce qui permet de limiter leur
697 exécution aux cas où la requête correspond à ce masque :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
698
699 before '/secret/*' do
700 authentification!
701 end
702
703 after '/faire/:travail' do |travail|
704 session[:dernier_travail] = travail
705 end
706
d0aa1a5 @michelc Proofreading filter section on French Readme.
michelc authored
707 Tout comme les routes, les filtres acceptent également des conditions :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
708
709 before :agent => /Songbird/ do
710 # ...
711 end
712
713 after '/blog/*', :host_name => 'example.com' do
714 # ...
715 end
716
717 == Helpers
718
719 Utilisez la méthode de haut niveau <tt>helpers</tt> pour définir des routines
720 qui seront accessibles dans vos gestionnaires de route et dans vos templates :
721
722 helpers do
723 def bar(nom)
724 "#{nom}bar"
725 end
726 end
727
728 get '/:nom' do
729 bar(params[:nom])
730 end
731
732 === Utiliser les sessions
733
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
734 Une session est utilisée pour conserver un état entre les requêtes. Une fois
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
735 activées, vous avez un +hash+ de session par session utilisateur :
736
737 enable :sessions
738
739 get '/' do
740 "valeur = " << session[:valeur].inspect
741 end
742
743 get '/:value' do
744 session[:valeur] = params[:valeur]
745 end
746
747 Notez que <tt>enable :sessions</tt> enregistre en fait toutes les données dans
748 un +cookie+. Ce n'est pas toujours ce que vous voulez (enregistrer beaucoup de
749 données va augmenter le traffic par exemple). Vous pouvez utiliser n'importe
750 quel +middleware+ Rack de session afin d'éviter cela. N'utiliser *pas*
751 <tt>enable :sessions</tt> dans ce cas mais charger le +middleware+ de votre
752 choix comme vous le feriez pour n'importe quel autre +middleware+ :
753
754 use Rack::Session::Pool, :expire_after => 2592000
755
756 get '/' do
757 "valeur = " << session[:valeur].inspect
758 end
759
760 get '/:value' do
761 session[:valeur] = params[:valeur]
762 end
763
644c26e @sylvaindesve French README update.
sylvaindesve authored
764 Pour renforcer la sécurité, les données de session dans le cookie sont signées
765 avec une clé secrète de session. Une clé secrète est générée pour vous au
766 hasard par Sinatra. Toutefois, comme cette clé change à chaque démarrage de
767 votre application, vous pouvez définir cette clé vous-même afin que toutes
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
768 les instances de votre application la partage :
644c26e @sylvaindesve French README update.
sylvaindesve authored
769
770 set :session_secret, 'super secret'
771
772 Si vous souhaitez avoir plus de contrôle, vous pouvez également enregistrer un
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
773 +hash+ avec des options lors de la configuration de +sessions+ :
644c26e @sylvaindesve French README update.
sylvaindesve authored
774
775 set :sessions, :domain => 'foo.com'
776
f221fd3 @michelc Synchronized levels of some titles
michelc authored
777 === Halt
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
778
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
779 Pour arrêter immédiatement la requête dans un filtre ou un gestionnaire de
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
780 route :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
781
782 halt
783
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
784 Vous pouvez aussi passer le code retour ...
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
785
786 halt 410
787
788 Ou le texte ...
789
790 halt 'Ceci est le texte'
791
792 Ou les deux ...
793
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
794 halt 401, 'Partez !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
795
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
796 Ainsi que les entêtes ...
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
797
798 halt 402, {'Content-Type' => 'text/plain'}, 'revanche'
799
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
800 Bien sûr il est possible de combiner un template avec +halt+ :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
801
802 halt erb(:erreur)
803
f221fd3 @michelc Synchronized levels of some titles
michelc authored
804 === Passer
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
805
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
806 Une route peut passer le relais aux autres routes qui correspondent également
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
807 avec <tt>pass</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
808
809 get '/devine/:qui' do
810 pass unless params[:qui] == 'Frank'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
811 "Tu m'as eu !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
812 end
813
814 get '/devine/*' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
815 'Manqué !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
816 end
817
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
818 On sort donc immédiatement de ce gestionnaire et on continue à chercher,
819 dans les masques suivants, le prochain qui correspond à la requête.
820 Si aucun des masques suivants ne correspond, un code 404 est retourné.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
821
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
822 === Déclencher une autre route
823
824 Parfois, +pass+ n'est pas ce que vous recherchez, au lieu de cela vous
825 souhaitez obtenir le résultat d'une autre route. Pour cela, utilisez
826 simplement +call+ :
827
828 get '/foo' do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
829 status, headers, body = call env.merge("PATH_INFO" => '/bar')
039675f @rkh test and fix #call example
rkh authored
830 [status, headers, body.map(&:upcase)]
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
831 end
832
833 get '/bar' do
834 "bar"
835 end
836
837 Notez que dans l'exemple ci-dessus, vous faciliterez les tests et améliorerez
838 la performance en déplaçant simplement <tt>"bar"</tt> dans un +helper+
839 utilisé à la fois par <tt>/foo</tt> et <tt>/bar</tt>.
840
841 Si vous souhiatez que la requête soit envoyée à la même instance de
842 l'application plutôt qu'à une copie, utilisez <tt>call!</tt> au lieu de
843 <tt>call</tt>.
844
845 Lisez la spécification Rack si vous souhaitez en savoir plus sur
846 <tt>call</tt>.
847
848 === Définir le corps, le code retour et les entêtes
849
850 Il est possible et recommandé de définir le code retour et le corps de la
851 réponse au moyen de la valeur de retour d'un bloc définissant une route.
852 Quoiqu'il en soit, dans certains cas vous pourriez avoir besoin de définir
853 le coprs de la réponse à un moment arbitraire de l'exécution. Vous pouvez le
854 faire au moyen de la méthode +body+. Si vous faites ainsi, vous pouvez alors
855 utiliser cette même méthode pour accéder au corps de la réponse :
856
857 get '/foo' do
858 body "bar"
859 end
860
861 after do
862 puts body
863 end
864
865 Il est également possible de passer un bloc à +body+, qui sera exécuté par le
866 gestionnaire Rack (ceci peut être utilisé pour implémenter un +streaming+,
867 voir "Valeurs de retour").
868
869 Pareillement au corps de la réponse, vous pouvez également définir le code
870 retour et les entêtes :
871
872 get '/foo' do
873 status 418
874 headers \
9f69232 @rkh fix teapot example
rkh authored
875 "Allow" => "BREW, POST, GET, PROPFIND, WHEN",
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
876 "Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
877 body "Je suis une théière !"
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
878 end
879
880 Comme +body+, +headers+ et +status+ peuvent être utilisés sans arguments
881 pour accéder à leurs valeurs.
882
733d54a @michelc Add section about #stream helper
michelc authored
883 === Faire du streaming
884
885 Il y a des cas où vous voulez commencer à renvoyer des données pendant que
886 vous êtes en train de générer le reste de la réponse. Dans les cas les plus
887 extrèmes, vous souhaitez continuer à envoyer des données tant que le client
888 n'abandonne pas la connection. Vous pouvez alors utiliser le helper +stream+
889 pour éviter de créer votre propre système :
890
891 get '/' do
892 stream do |out|
893 out << "Ca va être hallu -\n"
894 sleep 0.5
895 out << " (attends la suite) \n"
896 sleep 1
897 out << "- cinant !\n"
898 end
899 end
900
901 Cela permet d'implémenter des API de streaming ou de
902 {Server Sent Events}[http://dev.w3.org/html5/eventsource/] et peut servir de
903 base pour des {WebSockets}[http://en.wikipedia.org/wiki/WebSocket]. Vous
904 pouvez aussi l'employer pour augmenter le débit quand une partie du contenu
905 provient d'une resource lente.
906
907 Le fonctionnement du streaming, notamment le nombre de requêtes simultanées,
908 dépend énormément du serveur web utilisé. Certains ne prennent pas du tout en
909 charge le streaming (WEBRick par exemple). Lorsque le serveur ne gère pas le
910 streaming, la partie body de la réponse sera envoyée au client en une seule
911 fois, après que l'exécution du bloc passé au helper +stream+ sera terminée.
912
53d8013 @rkh adjust streaming docs in frensh readme
rkh authored
913 En utilisant le helper +stream+ avec le paramètre +keep_open+, il n'appelera
914 pas la méthode +close+ du flux, vous laissant la possibilité de le fermer à
915 tout moment au cours de l'exécution. Ceci ne fonctionne qu'avec les serveurs
733d54a @michelc Add section about #stream helper
michelc authored
916 evented (ie non threadés) tels que Thin et Rainbows. Les autres serveurs
00db6c8 @michelc Consistent colon in French Readme.
michelc authored
917 fermeront malgré tout le flux :
733d54a @michelc Add section about #stream helper
michelc authored
918
919 set :server, :thin
920 connections = []
921
922 get '/' do
923 # conserve le flux ouvert
53d8013 @rkh adjust streaming docs in frensh readme
rkh authored
924 stream(:keep_open) { |out| connections << out }
733d54a @michelc Add section about #stream helper
michelc authored
925 end
926
927 post '/' do
928 # écrit dans tous les flux ouverts
929 connections.each { |out| out << params[:message] << "\n" }
930 "message sent"
931 end
932
644c26e @sylvaindesve French README update.
sylvaindesve authored
933 === Journalisation (Logging)
934
935 Dans le contexte de la requête, la méthode utilitaire +logger+ expose une
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
936 instance de +logger+ :
644c26e @sylvaindesve French README update.
sylvaindesve authored
937
938 get '/' do
939 logger.info "chargement des données"
940 # ...
941 end
942
943 Ce +logger+ va automatiquement prendre en compte les paramètres de
944 configuration pour la journalisation de votre gestionnaire Rack. Si la
945 journalisation est désactivée, cette méthode renverra un objet factice et
946 vous n'avez pas à vous en inquiéter dans vos routes en le filtrant.
947
948 Notez que la journalisation est seulement activée par défaut pour
949 <tt>Sinatra::Application</tt>, donc si vous héritez de <tt>Sinatra::Base</tt>,
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
950 vous aurez à l'activer vous-même :
644c26e @sylvaindesve French README update.
sylvaindesve authored
951
952 class MonApp < Sinatra::Base
953 configure(:production, :development) do
954 enable :logging
955 end
956 end
957
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
958 === Types Mime
959
960 Quand vous utilisez <tt>send_file</tt> ou des fichiers statiques, vous
961 pouvez rencontrer des types mime que Sinatra ne connaît pas. Utilisez
962 +mime_type+ pour les déclarer par extension de fichier :
963
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
964 configure do
965 mime_type :foo, 'text/foo'
966 end
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
967
968 Vous pouvez également les utiliser avec la méthode +content_type+ :
969
970 get '/' do
971 content_type :foo
972 "foo foo foo"
973 end
974
975 === Former des URLs
976
977 Pour former des URLs, vous devriez utiliser la méthode +url+, par exemple en
978 Haml :
979
980 %a{:href => url('/foo')} foo
981
982 Cela prend en compte les proxy inverse et les routeurs Rack, s'ils existent.
983
984 Cette méthode est également disponible sous l'alias +to+ (voir ci-dessous
985 pour un exemple).
986
987 === Redirection du navigateur
988
989 Vous pouvez déclencher une redirection du navigateur avec la méthode
990 +redirect+ :
991
992 get '/foo' do
993 redirect to('/bar')
994 end
995
996 Tout paramètre additionnel est géré comme des arguments pour la méthode
997 +halt+ :
998
999 redirect to('/bar'), 303
1000 redirect 'http://google.com', 'mauvais endroit mon pote'
1001
1002 Vous pouvez aussi rediriger vers la page dont l'utilisateur venait au moyen de
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1003 <tt>redirect back</tt> :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1004
1005 get '/foo' do
1006 "<a href='/bar'>faire quelque chose</a>"
1007 end
1008
1009 get '/bar' do
1010 faire_quelque_chose
1011 redirect back
1012 end
1013
1014 Pour passer des arguments à une redirection, ajoutez-les soit à la requête :
1015
1016 redirect to('/bar?sum=42')
1017
1018 Ou bien utilisez une session :
1019
e6ab1e8 @Igneous fix readme: enable :session => enable :sessions
Igneous authored
1020 enable :sessions
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1021
1022 get '/foo' do
1023 session[:secret] = 'foo'
1024 redirect to('/bar')
1025 end
1026
1027 get '/bar' do
1028 session[:secret]
1029 end
1030
1031 === Contrôle du cache
1032
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1033 Définir correctement vos entêtes à la base pour un bon cache HTTP.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1034
1035 Vous pouvez facilement définir l'entête Cache-Control de la manière suivante :
1036
1037 get '/' do
1038 cache_control :public
1039 "met le en cache !"
1040 end
1041
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1042 Conseil de pro : définir le cache dans un filtre +before+ :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1043
1044 before do
1045 cache_control :public, :must_revalidate, :max_age => 60
1046 end
1047
1048 Si vous utilisez la méthode +expires+ pour définir l'entête correspondant,
1049 <tt>Cache-Control</tt> sera alors défini automatiquement :
1050
1051 before do
1052 expires 500, :public, :must_revalidate
1053 end
1054
40c0003 @michelc Slight changes to wording regarding caching.
michelc authored
1055 Pour utiliser correctement les caches, vous devriez utiliser +etag+ ou
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1056 +last_modified+. Il est recommandé d'utiliser ces méthodes *avant* de faire
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1057 d'importantes modifications, car elles vont immédiatement déclencher la réponse
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1058 si le client a déjà la version courante dans son cache :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1059
1060 get '/article/:id' do
1061 @article = Article.find params[:id]
1062 last_modified @article.updated_at
1063 etag @article.sha1
1064 erb :article
1065 end
1066
1067 Il est également possible d'utiliser un
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1068 {weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation] :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1069
1070 etag @article.sha1, :weak
1071
1072 Ces méthodes ne sont pas chargées de mettre des données en cache, mais elles
1073 fournissent les informations nécessaires pour votre cache. Si vous êtes à la
40c0003 @michelc Slight changes to wording regarding caching.
michelc authored
1074 recherche de solutions rapides pour un reverse-proxy de cache, essayez
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1075 {rack-cache}[http://rtomayko.github.com/rack-cache/] :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1076
1077 require "rack/cache"
1078 require "sinatra"
1079
1080 use Rack::Cache
1081
1082 get '/' do
1083 cache_control :public, :max_age => 36000
1084 sleep 5
1085 "hello"
1086 end
1087
976b3ff @michelc Update french readme for :static_cache_control setting
michelc authored
1088 Utilisez le paramètre <tt>:static_cache_control</tt> pour ajouter l'information
1089 d'en-tête <tt>Cache-Control</tt> (voir plus loin).
1090
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1091 === Envoyer des fichiers
1092
1093 Pour envoyer des fichiers, vous pouvez utiliser la méthode
1094 <tt>send_file</tt> :
1095
1096 get '/' do
1097 send_file 'foo.png'
1098 end
1099
1100 Quelques options sont également acceptées :
1101
1102 send_file 'foo.png', :type => :jpg
1103
1104 Les options sont :
1105
1106 [filename]
1107 le nom du fichier dans la réponse, par défaut le nom du fichier envoyé.
1108
1109 [last_modified]
1110 valeur pour l'entête Last-Modified, par défaut la date de modification du
1111 fichier
1112
1113 [type]
1114 type de contenu à utiliser, deviné à partir de l'extension de fichier si
1115 absent
1116
1117 [disposition]
1118 utilisé pour Content-Disposition, les valuers possibles étant : +nil+ (par
1119 défaut), <tt>:attachment</tt> et <tt>:inline</tt>
1120
1121 [length]
1122 entête Content-Length, par défaut la taille du fichier
1123
1124 Si le gestionnaire Rack le supporte, d'autres moyens que le +streaming+ via le
1125 processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera
1126 automatiquement les requêtes de type +range+.
1127
f221fd3 @michelc Synchronized levels of some titles
michelc authored
1128 === Accéder à l'objet requête
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1129
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1130 L'objet correspondant à la requête envoyée peut être récupéré dans le contexte
1131 de la requête (filtres, routes, gestionnaires d'erreur) au moyen de la méthode
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1132 +request+ :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1133
1134 # application tournant à l'adresse http://exemple.com/exemple
1135 get '/foo' do
644c26e @sylvaindesve French README update.
sylvaindesve authored
1136 t = %w[text/css text/html application/javascript]
1137 request.accept # ['text/html', '*/*']
1138 request.accept? 'text/xml' # true
1139 request.preferred_type(t) # 'text/html'
1140 request.body # corps de la requête envoyée par le client
1141 # (voir ci-dessous)
1142 request.scheme # "http"
1143 request.script_name # "/exemple"
1144 request.path_info # "/foo"
1145 request.port # 80
1146 request.request_method # "GET"
1147 request.query_string # ""
1148 request.content_length # taille de request.body
1149 request.media_type # type de média pour request.body
1150 request.host # "exemple.com"
1151 request.get? # true (méthodes similaires pour les autres
1152 # verbes HTTP)
1153 request.form_data? # false
1154 request["UN_ENTETE"] # valeur de l'entête UN_ENTETE
1155 request.referer # référant du client ou '/'
1156 request.user_agent # user agent (utilisé par la condition :agent)
1157 request.cookies # tableau contenant les cookies du navigateur
1158 request.xhr? # requête AJAX ?
1159 request.url # "http://exemple.com/exemple/foo"
1160 request.path # "/exemple/foo"
1161 request.ip # adresse IP du client
1162 request.secure? # false
1163 request.forwarded? # vrai (si on est derrière un proxy inverse)
1164 request.env # tableau brut de l'environnement fourni par
1165 # Rack
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1166 end
1167
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1168 Certaines options, telles que <tt>script_name</tt> ou <tt>path_info</tt>
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1169 peuvent également être modifiées :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1170
1171 before { request.path_info = "/" }
1172
1173 get "/" do
1174 "toutes les requêtes arrivent ici"
1175 end
1176
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1177 <tt>request.body</tt> est un objet IO ou StringIO :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1178
1179 post "/api" do
1180 request.body.rewind # au cas où il a déjà été lu
1181 donnees = JSON.parse request.body.read
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1182 "Bonjour #{donnees['nom']} !"
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1183 end
1184
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1185 === Fichiers joints
1186
1187 Vous pouvez utiliser la méthode +attachment+ pour indiquer au navigateur que
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1188 la réponse devrait être stockée sur le disque plutôt qu'affichée :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1189
1190 get '/' do
1191 attachment
1192 "enregistre-le !"
1193 end
1194
1195 Vous pouvez également lui passer un nom de fichier :
1196
1197 get '/' do
1198 attachment "info.txt"
1199 "enregistre-le !"
1200 end
1201
5a23b36 @michelc Make time_for part of the API.
michelc authored
1202 === Gérer Date et Time
1203
1204 Sinatra fourni un helper +time_for+ pour convertir une valeur donnée en
1205 objet +Time+. Il peut aussi faire la conversion à partir d'objets +DateTime+,
00db6c8 @michelc Consistent colon in French Readme.
michelc authored
1206 +Date+ ou de classes similaires :
5a23b36 @michelc Make time_for part of the API.
michelc authored
1207
1208 get '/' do
1209 pass if Time.now > time_for('Dec 23, 2012')
1210 "encore temps"
1211 end
1212
1213 Cette méthode est utilisée en interne par +expires+, +last_modified+ et
1214 consorts. Par conséquent, vous pouvez très facilement étendre le
1215 fonctionnement de ces méthodes en surchargeant le helper +time_for+ dans
1216 votre application :
1217
1218 helpers do
1219 def time_for(value)
1220 case value
1221 when :yesterday then Time.now - 24*60*60
1222 when :tomorrow then Time.now + 24*60*60
1223 else super
1224 end
1225 end
1226 end
1227
1228 get '/' do
1229 last_modified :yesterday
1230 expires :tomorrow
1231 "salut"
1232 end
1233
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1234 === Chercher les fichiers de templates
1235
1236 La méthode <tt>find_template</tt> est utilisée pour trouver les fichiers de
1237 templates à générer :
1238
1239 find_template settings.views, 'foo', Tilt[:haml] do |file|
1240 puts "pourrait être #{file}"
1241 end
1242
1243 Ce n'est pas très utilise. En revanche, il est utile de pouvoir surcharger
1244 cette méthode afin de définir son propre mécanisme de recherche. Par exemple,
1245 vous pouvez utiliser plus d'un répertoire de vues :
1246
1247 set :views, ['views', 'templates']
1248
1249 helpers do
1250 def find_template(views, name, engine, &block)
1251 Array(views).each { |v| super(v, name, engine, &block) }
1252 end
1253 end
1254
1255 Un autre exemple est d'utiliser des répertoires différents pour des moteurs
1256 de rendu différents :
1257
1258 set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'
1259
1260 helpers do
1261 def find_template(views, name, engine, &block)
1262 _, folder = views.detect { |k,v| engine == Tilt[k] }
1263 folder ||= views[:default]
1264 super(folder, name, engine, &block)
1265 end
1266 end
1267
1268 Vous pouvez également écrire cela dans une extension et la partager avec
1269 d'autres !
1270
1271 Notez que <tt>find_template</tt> ne vérifie pas que le fichier existe mais
1272 va plutôt exécuter le bloc pour tous les chemins possibles. Cela n'induit pas
1273 un problème de performance dans le sens où +render+ va utiliser +break+ dès
1274 qu'un fichier est trouvé. De plus, l'emplacement des templates (et leur
1275 contenu) est mis en cache si vous n'êtes pas en mode développement. Vous
1276 devriez garder cela en tête si vous écrivez une méthode vraiment dingue.
1277
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1278 == Configuration
1279
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1280 Lancé une seule fois au démarrage de tous les environnements :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1281
1282 configure do
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1283 # définir un paramètre
1284 set :option, 'value'
1285
1286 # définir plusieurs paramètre
1287 set :a => 1, :b => 2
1288
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1289 # identique à "set :option, true"
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1290 enable :option
1291
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1292 # identique à "set :option, false""
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1293 disable :option
1294
1295 # vous pouvez également avoir des paramètres dynamiques avec des blocs
1296 set(:css_dir) { File.join(views, 'css') }
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1297 end
1298
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1299 Lancé si l'environnement (variable d'environnement RACK_ENV) est défini comme
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1300 <tt>:production</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1301
1302 configure :production do
1303 ...
1304 end
1305
1306 Lancé si l'environnement est <tt>:production</tt> ou
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1307 <tt>:test</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1308
1309 configure :production, :test do
1310 ...
1311 end
1312
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1313 Vous pouvez accéder à ces paramètres via <tt>settings</tt> :
1314
1315 configure do
1316 set :foo, 'bar'
1317 end
1318
1319 get '/' do
1320 settings.foo? # => true
1321 settings.foo # => 'bar'
1322 ...
1323 end
1324
1325 === Paramètres disponibles
1326
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1327 [absolute_redirects] Si désactivé, Sinatra permettra les redirections
1328 relatives. Toutefois, Sinatra ne sera plus conforme à la
1329 RFC 2616 (HTTP 1.1), qui n'autorise que les redirections
1330 absolues.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1331
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1332 Activez si votre application tourne derrière un proxy
1333 inverse qui n'a pas été correctement configuré. Notez
1334 que la méthode +url+ continuera de produire des URLs
1335 absolues, sauf si vous lui passez +false+ comme second
1336 argument.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1337
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1338 Désactivé par défaut.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1339
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1340 [add_charsets] types mime pour lesquels la méthode
1341 <tt>content_type</tt> va automatiquement ajouter
1342 l'information du +charset+.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1343
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1344 Vous devriez lui ajouter des valeurs plutôt que de
1345 l'écraser :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1346
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1347 settings.add_charsets << "application/foobar"
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1348
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1349 [app_file] fichier de l'application principale, utilisé pour
1350 détecterla racine du projet, le dossier public et le
1351 dossier de vues ainsi que pour les templates en ligne.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1352
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1353 [bind] adresse IP sur laquelle se brancher
1354 (par défaut : 0.0.0.0).
1355 Utiliser seulement pour le serveur intégré.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1356
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1357 [default_encoding] encodage à utiliser si inconnu (par défaut
1358 <tt>"utf-8"</tt>).
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1359
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1360 [dump_errors] afficher les erreurs dans le +log+.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1361
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1362 [environment] environnement courant, par défaut
1363 <tt>ENV['RACK_ENV']</tt>, ou
1364 <tt>"development"</tt> si absent.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1365
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1366 [logging] utiliser le +logger+.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1367
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1368 [lock] Place un +lock+ autour de chaque requête, n'exécutant
1369 donc qu'une seule requête par processus Ruby.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1370
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1371 Activé si votre application n'est pas +thread-safe+.
1372 Désactivé par défaut.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1373
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1374 [method_override] utilise la magie de <tt>_method</tt> afin de permettre
1375 des formulaires put/delete dans des navigateurs qui ne
1376 le permettent pas.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1377
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1378 [port] port à écouter. Utiliser seulement pour le serveur
1379 intégré.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1380
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1381 [prefixed_redirects] si oui ou non <tt>request.script_name</tt> doit être
1382 inséré dans les redirections si un chemin non absolu
1383 est utilisé. Ainsi, <tt>redirect '/foo'</tt> se
1384 comportera comme <tt>redirect to('/foo')</tt>.
1385 Désactivé par défaut.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1386
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1387 [protection] défini s'il faut activer ou non la protection contre
1388 les attaques web. Voir la section protection plus loin.
976b3ff @michelc Update french readme for :static_cache_control setting
michelc authored
1389
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1390 [public_folder] dossier duquel les fichiers publics sont servis
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1391
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1392 [reload_templates] si oui ou non les templates doivent être rechargés
1393 entre les requêtes. Activé en mode développement.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1394
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1395 [root] dossier racine du projet.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1396
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1397 [raise_errors] soulever les erreurs (ce qui arrêtera l'application).
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1398
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1399 [run] si activé, Sinatra s'occupera de démarrer le serveur,
1400 ne pas activer si vous utiliser rackup ou autres.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1401
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1402 [running] est-ce que le serveur intégré est en marche ?
1403 ne changez pas ce paramètre !
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1404
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1405 [server] serveur ou liste de serveurs à utiliser pour le serveur
1406 intégré.
1407 Par défaut ['thin', 'mongrel', 'webrick'], l'ordre
1408 indiquant la priorité.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1409
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1410 [sessions] active l'enregistrement des sessions en utilisant les
1411 cookies.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1412
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1413 [show_exceptions] affiche la trace de l'erreur dans le navigateur.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1414
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1415 [static] Si oui ou non Sinatra doit s'occuper de servir les
1416 fichiers statiques.
1417 Désactivez si vous utilisez un serveur capable de le
1418 gérer lui même. Le désactiver augmentera la performance.
1419 Activé par défaut pour le style classique, désactivé pour
1420 le style modulaire.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1421
976b3ff @michelc Update french readme for :static_cache_control setting
michelc authored
1422 [static_cache_control] A définir quand Sinatra rend des fichiers statiques pour
1423 ajouter les en-têtes <tt>Cache-Control</tt>. Utilise le
1424 helper +cache_control+. Désactivé par défaut.
1425 Utiliser un array explicite pour définir des plusieurs
1426 valeurs :
1427 <tt>set :static_cache_control, [:public, :max_age => 300]</tt>
1428
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1429 [threaded] à définir à +true+ pour indiquer à Thin d'utiliser
1430 <tt>EventMachine.defer</tt> pour traiter la requête.
733d54a @michelc Add section about #stream helper
michelc authored
1431
cf4e7dd @michelc Add one space to align all parameters in french readme.
michelc authored
1432 [views] dossier des vues.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1433
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1434 == Gérer les erreurs
1435
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1436 Les gestionnaires d'erreur s'exécutent dans le même contexte que les routes ou
1437 les filtres, ce qui veut dire que vous avez accès (entre autres) aux bons
1438 vieux <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1439
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1440 === NotFound
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1441
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1442 Quand une exception <tt>Sinatra::NotFound</tt> est soulevée, ou que le code
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1443 retour est 404, le gestionnaire <tt>not_found</tt> est invoqué :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1444
1445 not_found do
1446 'Pas moyen de trouver ce que vous cherchez'
1447 end
1448
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1449 === Error
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1450
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1451 Le gestionnaire +error+ est invoqué à chaque fois qu'une exception est
1452 soulevée dans une route ou un filtre. L'objet exception est accessible via la
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1453 variable Rack <tt>sinatra.error</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1454
1455 error do
1456 'Désolé mais une méchante erreur est survenue - ' + env['sinatra.error'].name
1457 end
1458
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1459 Erreur sur mesure :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1460
1461 error MonErreurSurMesure do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
1462 'Donc il est arrivé ceci...' + env['sinatra.error'].message
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1463 end
1464
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1465 Donc si ceci arrive :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1466
1467 get '/' do
1468 raise MonErreurSurMesure, 'quelque chose de mal'
1469 end
1470
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1471 Vous obtenez ça :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1472
1473 Donc il est arrivé ceci... quelque chose de mal
1474
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1475 Alternativement, vous pouvez avoir un gestionnaire d'erreur associé à un code
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1476 particulier :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1477
1478 error 403 do
1479 'Accès interdit'
1480 end
1481
1482 get '/secret' do
1483 403
1484 end
1485
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1486 Ou un intervalle :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1487
1488 error 400..510 do
1489 'Boom'
1490 end
1491
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1492 Sinatra installe pour vous quelques gestionnaires <tt>not_found</tt> et
1493 <tt>error</tt> génériques lorsque vous êtes en environnement
1494 <tt>development</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1495
1496 == Les Middlewares Rack
1497
1498 Sinatra tourne avec Rack[http://rack.rubyforge.org/], une interface standard
1499 et minimale pour les web frameworks Ruby. Un des points forts de Rack est le
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1500 support de ce que l'on appelle des "middlewares" -- composant qui vient se
1501 situer entre le serveur et votre application, et dont le but est de
1502 visualiser/manipuler la requête/réponse HTTP, et d'offrir diverses
1503 fonctionnalités classiques.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1504
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1505 Sinatra permet de construire facilement des middlewares Rack via la méthode de
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1506 haut niveau +use+ :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1507
1508 require 'sinatra'
1509 require 'mon_middleware_perso'
1510
1511 use Rack::Lint
1512 use MonMiddlewarePerso
1513
1514 get '/bonjour' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1515 'Bonjour le monde'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1516 end
1517
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1518 La sémantique de +use+ est identique à celle définie dans le DSL de
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1519 Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html]
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1520 (le plus souvent utilisé dans un fichier rackup). Par exemple, la méthode
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1521 +use+ accepte divers arguments ainsi que des blocs :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1522