Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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