Skip to content
Newer
Older
100644 1984 lines (1419 sloc) 60.6 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>
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
386 Exemple:: <tt>builder { |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
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
543 === Templates embarqués
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
544
545 get '/' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
546 haml '%div.title Bonjour le monde'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
547 end
548
ddd75e8 @michelc Proofreading the section about Views and Templates
michelc authored
549 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
550
551 === Accéder aux variables dans un Template
552
553 Un template est évalué dans le même contexte que l'endroit d'où il a été
554 appelé (gestionnaire de route). Les variables d'instance déclarées dans le
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
555 gestionnaire de route sont directement accessibles dans le template :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
556
557 get '/:id' do
558 @foo = Foo.find(params[:id])
559 haml '%h1= @foo.nom'
560 end
561
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
562 Alternativement, on peut passer un hash contenant des variables locales :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
563
564 get '/:id' do
565 foo = Foo.find(params[:id])
566 haml '%h1= foo.nom', :locals => { :foo => foo }
567 end
568
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
569 Ceci est généralement utilisé lorsque l'on veut utiliser un template comme
570 partiel (depuis un autre template) et qu'il est donc nécessaire d'adapter les
571 noms de variables.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
572
573 === Templates dans le fichier source
574
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
575 Des templates peuvent être définis dans le fichier source comme ceci :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
576
577 require 'sinatra'
578
579 get '/' do
580 haml :index
581 end
582
583 __END__
584
585 @@ layout
586 %html
587 = yield
588
589 @@ index
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
590 %div.title Bonjour le monde !
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
591
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
592 NOTE : Les templates du fichier source qui contient <tt>require 'sinatra'</tt>
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
593 sont automatiquement chargés. Si vous avez des templates dans d'autres
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
594 fichiers source, il faut explicitement les déclarer avec
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
595 <tt>enable :inline_templates</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
596
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
597 === Templates nommés
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
598
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
599 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
600 <tt>template</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
601
602 template :layout do
603 "%html\n =yield\n"
604 end
605
606 template :index do
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 end
609
610 get '/' do
611 haml :index
612 end
613
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
614 Si un template nommé "layout" existe, il sera utilisé à chaque fois qu'un
615 template sera affiché. Vous pouvez désactivez les layouts au cas par cas en
616 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
617 de <tt>set :haml, :layout => false</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
618
619 get '/' do
620 haml :index, :layout => !request.xhr?
621 end
622
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
623 === Associer des extensions de fichier
624
625 Pour associer une extension de fichier avec un moteur de rendu, utilisez
626 <tt>Tilt.register</tt>. Par exemple, si vous désirez utiliser l'extension
627 de fichier +tt+ pour les templates Textile, vous pouvez faire comme suit :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
628
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
629 Tilt.register :tt, Tilt[:textile]
630
631 === Ajouter son propre moteur de rendu
632
633 En premier lieu, déclarez votre moteur de rendu avec Tilt, ensuite créez
634 votre méthode de rendu :
635
636 Tilt.register :monmoteur, MonMerveilleurMoteurDeRendu
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
637
638 helpers do
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
639 def monmoteur(*args) render(:monmoteur, *args) end
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
640 end
641
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
642 get '/' do
643 monmoteur :index
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
644 end
645
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
646 Utilisera <tt>./views/index.monmoteur</tt>. Voir
647 https://github.com/rtomayko/tilt pour en savoir plus sur Tilt.
648
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
649 == Filtres
650
651 Un filtre <tt>before</tt> est évalué avant n'importe quelle requête, dans le
652 contexte de celle-ci, et peut modifier la requête ou la réponse. Les variables
653 d'instance déclarées dans le filtre sont accessibles au gestionnaire de route
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
654 et au template :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
655
656 before do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
657 @note = 'Coucou !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
658 request.path_info = '/foo/bar/baz'
659 end
660
661 get '/foo/*' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
662 @note #=> 'Coucou !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
663 params[:splat] #=> 'bar/baz'
664 end
665
666 Un filtre <tt>after</tt> est évalué après chaque requête, dans le contexte
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
667 de celle-ci et peut également modifier la requête et/ou la réponse. Toutes les
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
668 variables d'instance déclarées dans un filtre <tt>before</tt> et dans le
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
669 gestionnaire de route sont accessibles dans le filtre <tt>after</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
670
671 after do
672 puts response.status
673 end
674
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
675 Note : Sauf si vous utilisez la méthode +body+ au lieu de renvoyer une chaîne
676 de caractères dans vos gestionnaires de routes, le corps de la réponse ne sera
677 pas disponible dans le filtre <tt>after</tt>, étant donné qu'il est généré
678 plus tard.
679
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
680 En option, on peut passer un masque au filtre, ce qui le rend actif uniquement
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
681 si la requête correspond au masque en question :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
682
683 before '/secret/*' do
684 authentification!
685 end
686
687 after '/faire/:travail' do |travail|
688 session[:dernier_travail] = travail
689 end
690
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
691 Tout comme les routes, les filtres acceptent également les conditions :
692
693 before :agent => /Songbird/ do
694 # ...
695 end
696
697 after '/blog/*', :host_name => 'example.com' do
698 # ...
699 end
700
701 == Helpers
702
703 Utilisez la méthode de haut niveau <tt>helpers</tt> pour définir des routines
704 qui seront accessibles dans vos gestionnaires de route et dans vos templates :
705
706 helpers do
707 def bar(nom)
708 "#{nom}bar"
709 end
710 end
711
712 get '/:nom' do
713 bar(params[:nom])
714 end
715
716 === Utiliser les sessions
717
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
718 Une session est utilisée pour conserver un état entre les requêtes. Une fois
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
719 activées, vous avez un +hash+ de session par session utilisateur :
720
721 enable :sessions
722
723 get '/' do
724 "valeur = " << session[:valeur].inspect
725 end
726
727 get '/:value' do
728 session[:valeur] = params[:valeur]
729 end
730
731 Notez que <tt>enable :sessions</tt> enregistre en fait toutes les données dans
732 un +cookie+. Ce n'est pas toujours ce que vous voulez (enregistrer beaucoup de
733 données va augmenter le traffic par exemple). Vous pouvez utiliser n'importe
734 quel +middleware+ Rack de session afin d'éviter cela. N'utiliser *pas*
735 <tt>enable :sessions</tt> dans ce cas mais charger le +middleware+ de votre
736 choix comme vous le feriez pour n'importe quel autre +middleware+ :
737
738 use Rack::Session::Pool, :expire_after => 2592000
739
740 get '/' do
741 "valeur = " << session[:valeur].inspect
742 end
743
744 get '/:value' do
745 session[:valeur] = params[:valeur]
746 end
747
644c26e @sylvaindesve French README update.
sylvaindesve authored
748 Pour renforcer la sécurité, les données de session dans le cookie sont signées
749 avec une clé secrète de session. Une clé secrète est générée pour vous au
750 hasard par Sinatra. Toutefois, comme cette clé change à chaque démarrage de
751 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
752 les instances de votre application la partage :
644c26e @sylvaindesve French README update.
sylvaindesve authored
753
754 set :session_secret, 'super secret'
755
756 Si vous souhaitez avoir plus de contrôle, vous pouvez également enregistrer un
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
757 +hash+ avec des options lors de la configuration de +sessions+ :
644c26e @sylvaindesve French README update.
sylvaindesve authored
758
759 set :sessions, :domain => 'foo.com'
760
f221fd3 @michelc Synchronized levels of some titles
michelc authored
761 === Halt
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
762
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
763 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
764 route :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
765
766 halt
767
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
768 Vous pouvez aussi passer le code retour ...
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
769
770 halt 410
771
772 Ou le texte ...
773
774 halt 'Ceci est le texte'
775
776 Ou les deux ...
777
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
778 halt 401, 'Partez !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
779
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
780 Ainsi que les entêtes ...
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
781
782 halt 402, {'Content-Type' => 'text/plain'}, 'revanche'
783
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
784 Bien sûr il est possible de combiner un template avec +halt+ :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
785
786 halt erb(:erreur)
787
f221fd3 @michelc Synchronized levels of some titles
michelc authored
788 === Passer
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
789
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
790 Une route peut passer le relais aux autres routes qui correspondent également
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
791 avec <tt>pass</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
792
793 get '/devine/:qui' do
794 pass unless params[:qui] == 'Frank'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
795 "Tu m'as eu !"
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
796 end
797
798 get '/devine/*' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
799 'Manqué !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
800 end
801
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
802 On sort donc immédiatement de ce gestionnaire et on continue à chercher,
803 dans les masques suivants, le prochain qui correspond à la requête.
804 Si aucun des masques suivants ne correspond, un code 404 est retourné.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
805
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
806 === Déclencher une autre route
807
808 Parfois, +pass+ n'est pas ce que vous recherchez, au lieu de cela vous
809 souhaitez obtenir le résultat d'une autre route. Pour cela, utilisez
810 simplement +call+ :
811
812 get '/foo' do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
813 status, headers, body = call env.merge("PATH_INFO" => '/bar')
039675f @rkh test and fix #call example
rkh authored
814 [status, headers, body.map(&:upcase)]
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
815 end
816
817 get '/bar' do
818 "bar"
819 end
820
821 Notez que dans l'exemple ci-dessus, vous faciliterez les tests et améliorerez
822 la performance en déplaçant simplement <tt>"bar"</tt> dans un +helper+
823 utilisé à la fois par <tt>/foo</tt> et <tt>/bar</tt>.
824
825 Si vous souhiatez que la requête soit envoyée à la même instance de
826 l'application plutôt qu'à une copie, utilisez <tt>call!</tt> au lieu de
827 <tt>call</tt>.
828
829 Lisez la spécification Rack si vous souhaitez en savoir plus sur
830 <tt>call</tt>.
831
832 === Définir le corps, le code retour et les entêtes
833
834 Il est possible et recommandé de définir le code retour et le corps de la
835 réponse au moyen de la valeur de retour d'un bloc définissant une route.
836 Quoiqu'il en soit, dans certains cas vous pourriez avoir besoin de définir
837 le coprs de la réponse à un moment arbitraire de l'exécution. Vous pouvez le
838 faire au moyen de la méthode +body+. Si vous faites ainsi, vous pouvez alors
839 utiliser cette même méthode pour accéder au corps de la réponse :
840
841 get '/foo' do
842 body "bar"
843 end
844
845 after do
846 puts body
847 end
848
849 Il est également possible de passer un bloc à +body+, qui sera exécuté par le
850 gestionnaire Rack (ceci peut être utilisé pour implémenter un +streaming+,
851 voir "Valeurs de retour").
852
853 Pareillement au corps de la réponse, vous pouvez également définir le code
854 retour et les entêtes :
855
856 get '/foo' do
857 status 418
858 headers \
9f69232 @rkh fix teapot example
rkh authored
859 "Allow" => "BREW, POST, GET, PROPFIND, WHEN",
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
860 "Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
861 body "Je suis une théière !"
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
862 end
863
864 Comme +body+, +headers+ et +status+ peuvent être utilisés sans arguments
865 pour accéder à leurs valeurs.
866
733d54a @michelc Add section about #stream helper
michelc authored
867 === Faire du streaming
868
869 Il y a des cas où vous voulez commencer à renvoyer des données pendant que
870 vous êtes en train de générer le reste de la réponse. Dans les cas les plus
871 extrèmes, vous souhaitez continuer à envoyer des données tant que le client
872 n'abandonne pas la connection. Vous pouvez alors utiliser le helper +stream+
873 pour éviter de créer votre propre système :
874
875 get '/' do
876 stream do |out|
877 out << "Ca va être hallu -\n"
878 sleep 0.5
879 out << " (attends la suite) \n"
880 sleep 1
881 out << "- cinant !\n"
882 end
883 end
884
885 Cela permet d'implémenter des API de streaming ou de
886 {Server Sent Events}[http://dev.w3.org/html5/eventsource/] et peut servir de
887 base pour des {WebSockets}[http://en.wikipedia.org/wiki/WebSocket]. Vous
888 pouvez aussi l'employer pour augmenter le débit quand une partie du contenu
889 provient d'une resource lente.
890
891 Le fonctionnement du streaming, notamment le nombre de requêtes simultanées,
892 dépend énormément du serveur web utilisé. Certains ne prennent pas du tout en
893 charge le streaming (WEBRick par exemple). Lorsque le serveur ne gère pas le
894 streaming, la partie body de la réponse sera envoyée au client en une seule
895 fois, après que l'exécution du bloc passé au helper +stream+ sera terminée.
896
53d8013 @rkh adjust streaming docs in frensh readme
rkh authored
897 En utilisant le helper +stream+ avec le paramètre +keep_open+, il n'appelera
898 pas la méthode +close+ du flux, vous laissant la possibilité de le fermer à
899 tout moment au cours de l'exécution. Ceci ne fonctionne qu'avec les serveurs
733d54a @michelc Add section about #stream helper
michelc authored
900 evented (ie non threadés) tels que Thin et Rainbows. Les autres serveurs
901 fermeront malgré tout le flux.
902
903 set :server, :thin
904 connections = []
905
906 get '/' do
907 # conserve le flux ouvert
53d8013 @rkh adjust streaming docs in frensh readme
rkh authored
908 stream(:keep_open) { |out| connections << out }
733d54a @michelc Add section about #stream helper
michelc authored
909 end
910
911 post '/' do
912 # écrit dans tous les flux ouverts
913 connections.each { |out| out << params[:message] << "\n" }
914 "message sent"
915 end
916
644c26e @sylvaindesve French README update.
sylvaindesve authored
917 === Journalisation (Logging)
918
919 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
920 instance de +logger+ :
644c26e @sylvaindesve French README update.
sylvaindesve authored
921
922 get '/' do
923 logger.info "chargement des données"
924 # ...
925 end
926
927 Ce +logger+ va automatiquement prendre en compte les paramètres de
928 configuration pour la journalisation de votre gestionnaire Rack. Si la
929 journalisation est désactivée, cette méthode renverra un objet factice et
930 vous n'avez pas à vous en inquiéter dans vos routes en le filtrant.
931
932 Notez que la journalisation est seulement activée par défaut pour
933 <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
934 vous aurez à l'activer vous-même :
644c26e @sylvaindesve French README update.
sylvaindesve authored
935
936 class MonApp < Sinatra::Base
937 configure(:production, :development) do
938 enable :logging
939 end
940 end
941
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
942 === Types Mime
943
944 Quand vous utilisez <tt>send_file</tt> ou des fichiers statiques, vous
945 pouvez rencontrer des types mime que Sinatra ne connaît pas. Utilisez
946 +mime_type+ pour les déclarer par extension de fichier :
947
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
948 configure do
949 mime_type :foo, 'text/foo'
950 end
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
951
952 Vous pouvez également les utiliser avec la méthode +content_type+ :
953
954 get '/' do
955 content_type :foo
956 "foo foo foo"
957 end
958
959 === Former des URLs
960
961 Pour former des URLs, vous devriez utiliser la méthode +url+, par exemple en
962 Haml :
963
964 %a{:href => url('/foo')} foo
965
966 Cela prend en compte les proxy inverse et les routeurs Rack, s'ils existent.
967
968 Cette méthode est également disponible sous l'alias +to+ (voir ci-dessous
969 pour un exemple).
970
971 === Redirection du navigateur
972
973 Vous pouvez déclencher une redirection du navigateur avec la méthode
974 +redirect+ :
975
976 get '/foo' do
977 redirect to('/bar')
978 end
979
980 Tout paramètre additionnel est géré comme des arguments pour la méthode
981 +halt+ :
982
983 redirect to('/bar'), 303
984 redirect 'http://google.com', 'mauvais endroit mon pote'
985
986 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
987 <tt>redirect back</tt> :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
988
989 get '/foo' do
990 "<a href='/bar'>faire quelque chose</a>"
991 end
992
993 get '/bar' do
994 faire_quelque_chose
995 redirect back
996 end
997
998 Pour passer des arguments à une redirection, ajoutez-les soit à la requête :
999
1000 redirect to('/bar?sum=42')
1001
1002 Ou bien utilisez une session :
1003
e6ab1e8 @Igneous fix readme: enable :session => enable :sessions
Igneous authored
1004 enable :sessions
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1005
1006 get '/foo' do
1007 session[:secret] = 'foo'
1008 redirect to('/bar')
1009 end
1010
1011 get '/bar' do
1012 session[:secret]
1013 end
1014
1015 === Contrôle du cache
1016
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1017 Définir correctement vos entêtes à la base pour un bon cache HTTP.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1018
1019 Vous pouvez facilement définir l'entête Cache-Control de la manière suivante :
1020
1021 get '/' do
1022 cache_control :public
1023 "met le en cache !"
1024 end
1025
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1026 Conseil de pro : définir le cache dans un filtre +before+ :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1027
1028 before do
1029 cache_control :public, :must_revalidate, :max_age => 60
1030 end
1031
1032 Si vous utilisez la méthode +expires+ pour définir l'entête correspondant,
1033 <tt>Cache-Control</tt> sera alors défini automatiquement :
1034
1035 before do
1036 expires 500, :public, :must_revalidate
1037 end
1038
40c0003 @michelc Slight changes to wording regarding caching.
michelc authored
1039 Pour utiliser correctement les caches, vous devriez utiliser +etag+ ou
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1040 +last_modified+. Il est recommandé d'utiliser ces méthodes *avant* de faire
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1041 d'importantes modifications, car elles vont immédiatement déclencher la réponse
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1042 si le client a déjà la version courante dans son cache :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1043
1044 get '/article/:id' do
1045 @article = Article.find params[:id]
1046 last_modified @article.updated_at
1047 etag @article.sha1
1048 erb :article
1049 end
1050
1051 Il est également possible d'utiliser un
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1052 {weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation] :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1053
1054 etag @article.sha1, :weak
1055
1056 Ces méthodes ne sont pas chargées de mettre des données en cache, mais elles
1057 fournissent les informations nécessaires pour votre cache. Si vous êtes à la
40c0003 @michelc Slight changes to wording regarding caching.
michelc authored
1058 recherche de solutions rapides pour un reverse-proxy de cache, essayez
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1059 {rack-cache}[http://rtomayko.github.com/rack-cache/] :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1060
1061 require "rack/cache"
1062 require "sinatra"
1063
1064 use Rack::Cache
1065
1066 get '/' do
1067 cache_control :public, :max_age => 36000
1068 sleep 5
1069 "hello"
1070 end
1071
1072 === Envoyer des fichiers
1073
1074 Pour envoyer des fichiers, vous pouvez utiliser la méthode
1075 <tt>send_file</tt> :
1076
1077 get '/' do
1078 send_file 'foo.png'
1079 end
1080
1081 Quelques options sont également acceptées :
1082
1083 send_file 'foo.png', :type => :jpg
1084
1085 Les options sont :
1086
1087 [filename]
1088 le nom du fichier dans la réponse, par défaut le nom du fichier envoyé.
1089
1090 [last_modified]
1091 valeur pour l'entête Last-Modified, par défaut la date de modification du
1092 fichier
1093
1094 [type]
1095 type de contenu à utiliser, deviné à partir de l'extension de fichier si
1096 absent
1097
1098 [disposition]
1099 utilisé pour Content-Disposition, les valuers possibles étant : +nil+ (par
1100 défaut), <tt>:attachment</tt> et <tt>:inline</tt>
1101
1102 [length]
1103 entête Content-Length, par défaut la taille du fichier
1104
1105 Si le gestionnaire Rack le supporte, d'autres moyens que le +streaming+ via le
1106 processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera
1107 automatiquement les requêtes de type +range+.
1108
f221fd3 @michelc Synchronized levels of some titles
michelc authored
1109 === Accéder à l'objet requête
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1110
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1111 L'objet correspondant à la requête envoyée peut être récupéré dans le contexte
1112 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
1113 +request+ :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1114
1115 # application tournant à l'adresse http://exemple.com/exemple
1116 get '/foo' do
644c26e @sylvaindesve French README update.
sylvaindesve authored
1117 t = %w[text/css text/html application/javascript]
1118 request.accept # ['text/html', '*/*']
1119 request.accept? 'text/xml' # true
1120 request.preferred_type(t) # 'text/html'
1121 request.body # corps de la requête envoyée par le client
1122 # (voir ci-dessous)
1123 request.scheme # "http"
1124 request.script_name # "/exemple"
1125 request.path_info # "/foo"
1126 request.port # 80
1127 request.request_method # "GET"
1128 request.query_string # ""
1129 request.content_length # taille de request.body
1130 request.media_type # type de média pour request.body
1131 request.host # "exemple.com"
1132 request.get? # true (méthodes similaires pour les autres
1133 # verbes HTTP)
1134 request.form_data? # false
1135 request["UN_ENTETE"] # valeur de l'entête UN_ENTETE
1136 request.referer # référant du client ou '/'
1137 request.user_agent # user agent (utilisé par la condition :agent)
1138 request.cookies # tableau contenant les cookies du navigateur
1139 request.xhr? # requête AJAX ?
1140 request.url # "http://exemple.com/exemple/foo"
1141 request.path # "/exemple/foo"
1142 request.ip # adresse IP du client
1143 request.secure? # false
1144 request.forwarded? # vrai (si on est derrière un proxy inverse)
1145 request.env # tableau brut de l'environnement fourni par
1146 # Rack
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1147 end
1148
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1149 Certaines options, telles que <tt>script_name</tt> ou <tt>path_info</tt>
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1150 peuvent également être modifiées :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1151
1152 before { request.path_info = "/" }
1153
1154 get "/" do
1155 "toutes les requêtes arrivent ici"
1156 end
1157
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1158 <tt>request.body</tt> est un objet IO ou StringIO :
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1159
1160 post "/api" do
1161 request.body.rewind # au cas où il a déjà été lu
1162 donnees = JSON.parse request.body.read
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1163 "Bonjour #{donnees['nom']} !"
3feef2d @sylvaindesve Updated French README with request object documentation.
sylvaindesve authored
1164 end
1165
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1166 === Fichiers joints
1167
1168 Vous pouvez utiliser la méthode +attachment+ pour indiquer au navigateur que
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1169 la réponse devrait être stockée sur le disque plutôt qu'affichée :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1170
1171 get '/' do
1172 attachment
1173 "enregistre-le !"
1174 end
1175
1176 Vous pouvez également lui passer un nom de fichier :
1177
1178 get '/' do
1179 attachment "info.txt"
1180 "enregistre-le !"
1181 end
1182
5a23b36 @michelc Make time_for part of the API.
michelc authored
1183 === Gérer Date et Time
1184
1185 Sinatra fourni un helper +time_for+ pour convertir une valeur donnée en
1186 objet +Time+. Il peut aussi faire la conversion à partir d'objets +DateTime+,
1187 +Date+ ou de classes similaires.
1188
1189 get '/' do
1190 pass if Time.now > time_for('Dec 23, 2012')
1191 "encore temps"
1192 end
1193
1194 Cette méthode est utilisée en interne par +expires+, +last_modified+ et
1195 consorts. Par conséquent, vous pouvez très facilement étendre le
1196 fonctionnement de ces méthodes en surchargeant le helper +time_for+ dans
1197 votre application :
1198
1199 helpers do
1200 def time_for(value)
1201 case value
1202 when :yesterday then Time.now - 24*60*60
1203 when :tomorrow then Time.now + 24*60*60
1204 else super
1205 end
1206 end
1207 end
1208
1209 get '/' do
1210 last_modified :yesterday
1211 expires :tomorrow
1212 "salut"
1213 end
1214
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1215 === Chercher les fichiers de templates
1216
1217 La méthode <tt>find_template</tt> est utilisée pour trouver les fichiers de
1218 templates à générer :
1219
1220 find_template settings.views, 'foo', Tilt[:haml] do |file|
1221 puts "pourrait être #{file}"
1222 end
1223
1224 Ce n'est pas très utilise. En revanche, il est utile de pouvoir surcharger
1225 cette méthode afin de définir son propre mécanisme de recherche. Par exemple,
1226 vous pouvez utiliser plus d'un répertoire de vues :
1227
1228 set :views, ['views', 'templates']
1229
1230 helpers do
1231 def find_template(views, name, engine, &block)
1232 Array(views).each { |v| super(v, name, engine, &block) }
1233 end
1234 end
1235
1236 Un autre exemple est d'utiliser des répertoires différents pour des moteurs
1237 de rendu différents :
1238
1239 set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'
1240
1241 helpers do
1242 def find_template(views, name, engine, &block)
1243 _, folder = views.detect { |k,v| engine == Tilt[k] }
1244 folder ||= views[:default]
1245 super(folder, name, engine, &block)
1246 end
1247 end
1248
1249 Vous pouvez également écrire cela dans une extension et la partager avec
1250 d'autres !
1251
1252 Notez que <tt>find_template</tt> ne vérifie pas que le fichier existe mais
1253 va plutôt exécuter le bloc pour tous les chemins possibles. Cela n'induit pas
1254 un problème de performance dans le sens où +render+ va utiliser +break+ dès
1255 qu'un fichier est trouvé. De plus, l'emplacement des templates (et leur
1256 contenu) est mis en cache si vous n'êtes pas en mode développement. Vous
1257 devriez garder cela en tête si vous écrivez une méthode vraiment dingue.
1258
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1259 == Configuration
1260
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1261 Lancé une seule fois au démarrage de tous les environnements :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1262
1263 configure do
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1264 # définir un paramètre
1265 set :option, 'value'
1266
1267 # définir plusieurs paramètre
1268 set :a => 1, :b => 2
1269
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1270 # identique à "set :option, true"
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1271 enable :option
1272
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1273 # identique à "set :option, false""
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1274 disable :option
1275
1276 # vous pouvez également avoir des paramètres dynamiques avec des blocs
1277 set(:css_dir) { File.join(views, 'css') }
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1278 end
1279
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1280 Lancé si l'environnement (variable d'environnement RACK_ENV) est défini comme
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1281 <tt>:production</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1282
1283 configure :production do
1284 ...
1285 end
1286
1287 Lancé si l'environnement est <tt>:production</tt> ou
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1288 <tt>:test</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1289
1290 configure :production, :test do
1291 ...
1292 end
1293
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1294 Vous pouvez accéder à ces paramètres via <tt>settings</tt> :
1295
1296 configure do
1297 set :foo, 'bar'
1298 end
1299
1300 get '/' do
1301 settings.foo? # => true
1302 settings.foo # => 'bar'
1303 ...
1304 end
1305
1306 === Paramètres disponibles
1307
1308 [absolute_redirects] Si désactivé, Sinatra permettra les redirections
1309 relatives. Toutefois, Sinatra ne sera plus conforme à la
1310 RFC 2616 (HTTP 1.1), qui n'autorise que les redirections
1311 absolues.
1312
1313 Activez si votre application tourne derrière un proxy
1314 inverse qui n'a pas été correctement configuré. Notez
1315 que la méthode +url+ continuera de produire des URLs
1316 absolues, sauf si vous lui passez +false+ comme second
1317 argument.
1318
1319 Désactivé par défaut.
1320
1321 [add_charsets] types mime pour lesquels la méthode
1322 <tt>content_type</tt> va automatiquement ajouter
1323 l'information du +charset+.
1324
1325 Vous devriez lui ajouter des valeurs plutôt que de
1326 l'écraser :
1327
1328 settings.add_charsets << "application/foobar"
1329
1330 [app_file] fichier de l'application principale, utilisé pour
1331 détecterla racine du projet, le dossier public et le
1332 dossier de vues ainsi que pour les templates en ligne.
1333
1334 [bind] adresse IP sur laquelle se brancher
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1335 (par défaut : 0.0.0.0).
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1336 Utiliser seulement pour le serveur intégré.
1337
1338 [default_encoding] encodage à utiliser si inconnu (par défaut
1339 <tt>"utf-8"</tt>).
1340
1341 [dump_errors] afficher les erreurs dans le +log+.
1342
1343 [environment] environnement courant, par défaut
1344 <tt>ENV['RACK_ENV']</tt>, ou
1345 <tt>"development"</tt> si absent.
1346
1347 [logging] utiliser le +logger+.
1348
1349 [lock] Place un +lock+ autour de chaque requête, n'exécutant
1350 donc qu'une seule requête par processus Ruby.
1351
1352 Activé si votre application n'est pas +thread-safe+.
1353 Désactivé par défaut.
1354
1355 [method_override] utilise la magie de <tt>_method</tt> afin de permettre
1356 des formulaires put/delete dans des navigateurs qui ne
1357 le permettent pas.
1358
1359 [port] port à écouter. Utiliser seulement pour le serveur
1360 intégré.
1361
1362 [prefixed_redirects] si oui ou non <tt>request.script_name</tt> doit être
1363 inséré dans les redirections si un chemin non absolu
1364 est utilisé. Ainsi, <tt>redirect '/foo'</tt> se
1365 comportera comme <tt>redirect to('/foo')</tt>.
1366 Désactivé par défaut.
1367
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
1368 [public_folder] dossier duquel les fichiers publics sont servis
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1369
1370 [reload_templates] si oui ou non les templates doivent être rechargés
644c26e @sylvaindesve French README update.
sylvaindesve authored
1371 entre les requêtes. Activé en mode développement.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1372
1373 [root] dossier racine du projet.
1374
1375 [raise_errors] soulever les erreurs (ce qui arrêtera l'application).
1376
1377 [run] si activé, Sinatra s'occupera de démarrer le serveur,
1378 ne pas activer si vous utiliser rackup ou autres.
1379
1380 [running] est-ce que le serveur intégré est en marche ?
1381 ne changez pas ce paramètre !
1382
1383 [server] serveur ou liste de serveurs à utiliser pour le serveur
1384 intégré.
1385 Par défaut ['thin', 'mongrel', 'webrick'], l'ordre
1386 indiquant la priorité.
1387
1388 [sessions] active l'enregistrement des sessions en utilisant les
1389 cookies.
1390
1391 [show_exceptions] affiche la trace de l'erreur dans le navigateur.
1392
1393 [static] Si oui ou non Sinatra doit s'occuper de servir les
1394 fichiers statiques.
1395 Désactivez si vous utilisez un serveur capable de le
1396 gérer lui même. Le désactiver augmentera la performance.
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1397 Activé par défaut pour le style classique, désactivé pour
1398 le style modulaire.
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1399
733d54a @michelc Add section about #stream helper
michelc authored
1400 [threaded] à définir à +true+ pour indiquer à Thin d'utiliser
1401 <tt>EventMachine.defer</tt> pour traiter la requête.
1402
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1403 [views] dossier des vues.
1404
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1405 == Gérer les erreurs
1406
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1407 Les gestionnaires d'erreur s'exécutent dans le même contexte que les routes ou
1408 les filtres, ce qui veut dire que vous avez accès (entre autres) aux bons
1409 vieux <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1410
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1411 === NotFound
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1412
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1413 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
1414 retour est 404, le gestionnaire <tt>not_found</tt> est invoqué :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1415
1416 not_found do
1417 'Pas moyen de trouver ce que vous cherchez'
1418 end
1419
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1420 === Error
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1421
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1422 Le gestionnaire +error+ est invoqué à chaque fois qu'une exception est
1423 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
1424 variable Rack <tt>sinatra.error</tt> :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1425
1426 error do
1427 'Désolé mais une méchante erreur est survenue - ' + env['sinatra.error'].name
1428 end
1429
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1430 Erreur sur mesure :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1431
1432 error MonErreurSurMesure do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
1433 'Donc il est arrivé ceci...' + env['sinatra.error'].message
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1434 end
1435
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1436 Donc si ceci arrive :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1437
1438 get '/' do
1439 raise MonErreurSurMesure, 'quelque chose de mal'
1440 end
1441
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1442 Vous obtenez ça :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1443
1444 Donc il est arrivé ceci... quelque chose de mal
1445
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1446 Alternativement, vous pouvez avoir un gestionnaire d'erreur associé à un code
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1447 particulier :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1448
1449 error 403 do
1450 'Accès interdit'
1451 end
1452
1453 get '/secret' do
1454 403
1455 end
1456
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1457 Ou un intervalle :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1458
1459 error 400..510 do
1460 'Boom'
1461 end
1462
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1463 Sinatra installe pour vous quelques gestionnaires <tt>not_found</tt> et
1464 <tt>error</tt> génériques lorsque vous êtes en environnement
1465 <tt>development</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1466
1467 == Les Middlewares Rack
1468
1469 Sinatra tourne avec Rack[http://rack.rubyforge.org/], une interface standard
1470 et minimale pour les web frameworks Ruby. Un des points forts de Rack est le
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1471 support de ce que l'on appelle des "middlewares" -- composant qui vient se
1472 situer entre le serveur et votre application, et dont le but est de
1473 visualiser/manipuler la requête/réponse HTTP, et d'offrir diverses
1474 fonctionnalités classiques.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1475
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1476 Sinatra permet de construire facilement des middlewares Rack via la méthode de
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1477 haut niveau +use+ :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1478
1479 require 'sinatra'
1480 require 'mon_middleware_perso'
1481
1482 use Rack::Lint
1483 use MonMiddlewarePerso
1484
1485 get '/bonjour' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1486 'Bonjour le monde'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1487 end
1488
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1489 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
1490 Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html]
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1491 (le plus souvent utilisé dans un fichier rackup). Par exemple, la méthode
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1492 +use+ accepte divers arguments ainsi que des blocs :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1493
1494 use Rack::Auth::Basic do |login, password|
1495 login == 'admin' && password == 'secret'
1496 end
1497
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1498 Rack est distribué avec une bonne variété de middlewares standards pour les
1499 logs, débuguer, faire du routage URL, de l'authentification, gérer des
1500 sessions. Sinatra utilise beaucoup de ces composants automatiquement via la
1501 configuration, donc pour ceux-ci vous n'aurez pas à utiliser la méthode +use+.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1502
1503 == Tester
1504
1505 Les tests pour Sinatra peuvent être écrit avec n'importe quelle bibliothèque
1506 basée sur Rack. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] est
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1507 recommandé :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1508
1509 require 'mon_application_sinatra'
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1510 require 'test/unit'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1511 require 'rack/test'
1512
1513 class MonTest < Test::Unit::TestCase
1514 include Rack::Test::Methods
1515
1516 def app
1517 Sinatra::Application
1518 end
1519
1520 def test_ma_racine
1521 get '/'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1522 assert_equal 'Bonjour le monde !', last_response.body
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1523 end
1524
1525 def test_avec_des_parametres
1526 get '/rencontrer', :name => 'Frank'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1527 assert_equal 'Salut Frank !', last_response.body
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1528 end
1529
1530 def test_avec_rack_env
1531 get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1532 assert_equal "Vous utilisez Songbird !", last_response.body
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1533 end
1534 end
1535
1536 == Sinatra::Base - Les Middlewares, les Bibliothèques, et les Applications Modulaires
1537
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1538 Définir votre application au niveau supérieur fonctionne bien pour les
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1539 micro-applications, mais peut s'avérer moins pratique lorsqu'il s'agit
1540 de créer des composants réutilisables comme des middlewares Rack, faire
1541 du Rails metal, ou de simples bibliothèques avec un composant serveur, ou
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1542 même une extension pour Sinatra. Le DSL de haut niveau pollue l'espace de noms
1543 et est une configuration adaptée à une micro-application (un fichier unique
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1544 pour l'application, les dossiers <tt>./public</tt> et <tt>./views</tt>, les
1545 logs, pages d'erreur, etc.). C'est là que <tt>Sinatra::Base</tt> entre en jeu :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1546
1547 require 'sinatra/base'
1548
1549 class MonApplication < Sinatra::Base
1550 set :sessions, true
1551 set :foo, 'bar'
1552
1553 get '/' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1554 'Bonjour le monde !'
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1555 end
1556 end
1557
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1558 Les méthodes disponibles dans <tt>Sinatra::Base</tt> sont exactement identiques
1559 à celles disponibles dans le DSL de haut niveau. La plupart des applications
1560 de haut niveau peuvent être converties en composant <tt>Sinatra::Base</tt> avec
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1561 deux modifications :
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1562
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1563 * Votre fichier doit charger +sinatra/base+ au lieu de +sinatra+ ;
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1564 autrement, toutes les méthodes de la DSL seront chargées dans l'espace
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1565 de noms.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1566 * Mettre vos gestionnaires de route, vos gestionnaires d'erreur, vos filtres
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1567 et options dans une sous-classe de <tt>Sinatra::Base</tt>.
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1568
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1569 <tt>Sinatra::Base</tt> est plutôt épuré. La plupart des options sont
1570 désactivées par défaut, ceci inclus le serveur. Voir {Options et
1571 Configuration}[http://sinatra.github.com/configuration.html]
945a1f8 @mig-hub Add README's French translation.
mig-hub authored
1572 pour plus de détails sur les options et leur comportement.
1573
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1574 === Style modulaire vs. style classique
1575
1576 Contrairement aux croyanaces, le style classique n'a rien de mauvais. Si cela
1577 convient à votre application, vous n'avez pas à changer pour une application
1578 modulaire.
1579
1580 Il n'y a que deux inconvénient au style classique comparé au style modulaire :
1581
1582 * Vous ne pouvez avoir qu'une seule application Sinatra par processus Ruby. Si
1583 vous envisagez d'en utiliser plus, passez au style modulaire
1584
1585 * Le style classique pollue la classe Object avec des méthodes déléguantes.
1586 Si vous prévoyez de diffuser votre application dans une bibliothèque/gem,
1587 passez au style modulaire.
1588
1589 Il n'y pas d'empêchement à mélanger style classic et style modulaire.
1590
1591 Si vous passez d'un style à l'autre, vous devriez être vigilant à quelques
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1592 légères différences dans les paramètres par défaut :
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1593
1594 Paramètre Classique Modulaire
1595
1596 app_file fichier chargeant sinatra nil
1597 run $0 == app_file false
1598 logging true false
1599 method_override true false
1600 inline_templates true false
9b77a2d @sylvaindesve Updated French README and fixed typography.
sylvaindesve authored
1601 static true false
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1602
1603
1604 === Servir une application modulaire
1605
1606 Il y a deux façons de faire pour démarrer une application modulaire, démarrez
1607 avec <tt>run!</tt> :
1608
1609 # my_app.rb
1610 require 'sinatra/base'
1611
1612 class MyApp < Sinatra::Base
1613 # ... code de l'application ici ...
1614
1615 # démarre le serveur si ce fichier est directement exécuté
1616 run! if app_file == $0
1617 end
1618
1619 Démarrez ensuite avec :
1620
1621 ruby my_app.rb
1622
1623 Ou alors avec un fichier <tt>config.ru</tt>, qui permet d'utiliser n'importe
1624 quel gestionnaire Rack :
1625
1626 # config.ru
b6d589e @rkh adjust readme examples so they work with 1.9.2 even if pwd is not on …
rkh authored
1627 require './my_app'
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1628 run MyApp
1629
1630 Exécutez :
1631
1632 rackup -p 4567
1633
1634 === Utiliser une application de style classique avec un fichier config.ru
1635
1636 Ecrivez votre application :
1637
1638 # app.rb
1639 require 'sinatra'
1640
1641 get '/' do
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1642 'Bonjour le monde !'
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1643 end
1644
1645 Et un fichier <tt>config.ru</tt> correspondant :
1646
b6d589e @rkh adjust readme examples so they work with 1.9.2 even if pwd is not on …
rkh authored
1647 require './app'
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1648 run Sinatra::Application
1649
1650 === Quand utiliser un fichier config.ru ?
1651
1652 Quelques cas où vous devriez utiliser un fichier <tt>config.ru</tt> :
1653
1654 * Vous souhaitez déployer avec un autre gestionnaire Rack (Passenger, Unicorn,
1655 Heroku, ...).
1656 * Vous souhaitez utiliser plus d'une sous-classe de <tt>Sinatra::Base</tt>.
1657 * Vous voulez utiliser Sinatra comme un +middleware+, non en tant que
1658 +endpoint+.
1659
1660 <b>Il n'est pas nécessaire de passer par un fichier <tt>config.ru</tt> pour la
1661 seule raison que vous êtes passé au style modulaire, et vous n'avez pas besoin
1662 de passer au style modulaire pour utiliser un fichier <tt>config.ru</tt>.</b>
1663
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1664 === Utiliser Sinatra comme Middleware
1665
95924e3 @sylvaindesve Updated the French README.
sylvaindesve authored
1666 Non seulement Sinatra peut utiliser d'autres middlewares Rack, il peut
1667 également être à son tour utilisé au-dessus de n'importe quel +endpoint+ Rack
1668 en tant que middleware. Ce +endpoint+ peut très bien être une autre
1669 application Sinatra, ou n'importe quelle application basée sur Rack
d8f46b5 @rymai Typography update: added whitespace before "?", "!", ";" and ":", cha…
rymai authored
1670 (Rails/Ramaze/Camping/...) :
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1671
1672 require 'sinatra/base'
1673
1674 class EcranDeConnexion < Sinatra::Base
e6887fe @andrewhampton Fix typo in middleware example.
andrewhampton authored
1675 enable :sessions
4d87a59 @sylvaindesve Updated the French README to include changes made to the English vers…
sylvaindesve authored
1676