sinatra 1.4.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sinatra might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/AUTHORS.md +1 -0
- data/CHANGELOG.md +272 -54
- data/CONTRIBUTING.md +8 -8
- data/Gemfile +48 -47
- data/LICENSE +4 -1
- data/MAINTENANCE.md +42 -0
- data/README.de.md +651 -443
- data/README.es.md +738 -357
- data/README.fr.md +197 -100
- data/README.hu.md +40 -6
- data/README.ja.md +125 -67
- data/README.ko.md +15 -15
- data/README.malayalam.md +3141 -0
- data/README.md +592 -432
- data/README.pt-br.md +2362 -335
- data/README.pt-pt.md +5 -5
- data/README.ru.md +857 -608
- data/README.zh.md +91 -29
- data/Rakefile +77 -51
- data/SECURITY.md +35 -0
- data/VERSION +1 -0
- data/examples/chat.rb +2 -1
- data/examples/rainbows.conf +3 -0
- data/examples/rainbows.rb +20 -0
- data/examples/stream.ru +4 -4
- data/lib/sinatra/base.rb +243 -265
- data/lib/sinatra/indifferent_hash.rb +200 -0
- data/lib/sinatra/main.rb +30 -10
- data/lib/sinatra/show_exceptions.rb +67 -62
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +44 -8
- metadata +43 -167
- data/lib/sinatra/ext.rb +0 -17
- data/test/asciidoctor_test.rb +0 -72
- data/test/base_test.rb +0 -167
- data/test/builder_test.rb +0 -91
- data/test/coffee_test.rb +0 -96
- data/test/compile_test.rb +0 -183
- data/test/contest.rb +0 -91
- data/test/creole_test.rb +0 -65
- data/test/delegator_test.rb +0 -160
- data/test/encoding_test.rb +0 -20
- data/test/erb_test.rb +0 -116
- data/test/extensions_test.rb +0 -98
- data/test/filter_test.rb +0 -487
- data/test/haml_test.rb +0 -109
- data/test/helper.rb +0 -132
- data/test/helpers_test.rb +0 -1917
- data/test/integration/app.rb +0 -79
- data/test/integration_helper.rb +0 -236
- data/test/integration_test.rb +0 -104
- data/test/less_test.rb +0 -69
- data/test/liquid_test.rb +0 -77
- data/test/mapped_error_test.rb +0 -285
- data/test/markaby_test.rb +0 -80
- data/test/markdown_test.rb +0 -85
- data/test/mediawiki_test.rb +0 -68
- data/test/middleware_test.rb +0 -68
- data/test/nokogiri_test.rb +0 -67
- data/test/public/favicon.ico +0 -0
- data/test/public/hello+world.txt +0 -1
- data/test/rabl_test.rb +0 -89
- data/test/rack_test.rb +0 -45
- data/test/radius_test.rb +0 -59
- data/test/rdoc_test.rb +0 -66
- data/test/readme_test.rb +0 -130
- data/test/request_test.rb +0 -100
- data/test/response_test.rb +0 -63
- data/test/result_test.rb +0 -76
- data/test/route_added_hook_test.rb +0 -59
- data/test/routing_test.rb +0 -1456
- data/test/sass_test.rb +0 -115
- data/test/scss_test.rb +0 -88
- data/test/server_test.rb +0 -56
- data/test/settings_test.rb +0 -582
- data/test/sinatra_test.rb +0 -12
- data/test/slim_test.rb +0 -102
- data/test/static_test.rb +0 -266
- data/test/streaming_test.rb +0 -149
- data/test/stylus_test.rb +0 -90
- data/test/templates_test.rb +0 -382
- data/test/textile_test.rb +0 -65
- data/test/views/a/in_a.str +0 -1
- data/test/views/ascii.erb +0 -2
- data/test/views/b/in_b.str +0 -1
- data/test/views/calc.html.erb +0 -1
- data/test/views/error.builder +0 -3
- data/test/views/error.erb +0 -3
- data/test/views/error.haml +0 -3
- data/test/views/error.sass +0 -2
- data/test/views/explicitly_nested.str +0 -1
- data/test/views/foo/hello.test +0 -1
- data/test/views/hello.asciidoc +0 -1
- data/test/views/hello.builder +0 -1
- data/test/views/hello.coffee +0 -1
- data/test/views/hello.creole +0 -1
- data/test/views/hello.erb +0 -1
- data/test/views/hello.haml +0 -1
- data/test/views/hello.less +0 -5
- data/test/views/hello.liquid +0 -1
- data/test/views/hello.mab +0 -1
- data/test/views/hello.md +0 -1
- data/test/views/hello.mediawiki +0 -1
- data/test/views/hello.nokogiri +0 -1
- data/test/views/hello.rabl +0 -2
- data/test/views/hello.radius +0 -1
- data/test/views/hello.rdoc +0 -1
- data/test/views/hello.sass +0 -2
- data/test/views/hello.scss +0 -3
- data/test/views/hello.slim +0 -1
- data/test/views/hello.str +0 -1
- data/test/views/hello.styl +0 -2
- data/test/views/hello.test +0 -1
- data/test/views/hello.textile +0 -1
- data/test/views/hello.wlang +0 -1
- data/test/views/hello.yajl +0 -1
- data/test/views/layout2.builder +0 -3
- data/test/views/layout2.erb +0 -2
- data/test/views/layout2.haml +0 -2
- data/test/views/layout2.liquid +0 -2
- data/test/views/layout2.mab +0 -2
- data/test/views/layout2.nokogiri +0 -3
- data/test/views/layout2.rabl +0 -3
- data/test/views/layout2.radius +0 -2
- data/test/views/layout2.slim +0 -3
- data/test/views/layout2.str +0 -2
- data/test/views/layout2.test +0 -1
- data/test/views/layout2.wlang +0 -2
- data/test/views/nested.str +0 -1
- data/test/views/utf8.erb +0 -2
- data/test/wlang_test.rb +0 -87
- data/test/yajl_test.rb +0 -86
data/README.fr.md
CHANGED
@@ -26,8 +26,12 @@ Puis lancez votre programme :
|
|
26
26
|
ruby mon_application.rb
|
27
27
|
```
|
28
28
|
|
29
|
-
Le résultat est visible sur :
|
30
|
-
|
29
|
+
Le résultat est visible sur : [http://localhost:4567](http://localhost:4567)
|
30
|
+
|
31
|
+
Le code que vous avez modifié ne sera pas pris en compte tant que vous ne
|
32
|
+
redémarrerez pas le serveur. Pensez à redémarrer le serveur à chaque
|
33
|
+
modification ou utilisez
|
34
|
+
[sinatra/reloader](http://www.sinatrarb.com/contrib/reloader).
|
31
35
|
|
32
36
|
Il est recommandé d'exécuter également `gem install thin`, pour que
|
33
37
|
Sinatra utilise le server Thin quand il est disponible.
|
@@ -55,11 +59,13 @@ Sinatra utilise le server Thin quand il est disponible.
|
|
55
59
|
* [Templates Markdown](#templates-markdown)
|
56
60
|
* [Templates Textile](#templates-textile)
|
57
61
|
* [Templates RDoc](#templates-rdoc)
|
62
|
+
* [Templates Asciidoc](#templates-asciidoc)
|
58
63
|
* [Templates Radius](#templates-radius)
|
59
64
|
* [Templates Markaby](#templates-markaby)
|
60
65
|
* [Templates RABL](#templates-rabl)
|
61
66
|
* [Templates Slim](#templates-slim)
|
62
67
|
* [Templates Creole](#templates-creole)
|
68
|
+
* [Templates MediaWiki](#templates-mediawiki)
|
63
69
|
* [Templates CoffeeScript](#templates-coffeescript)
|
64
70
|
* [Templates Stylus](#templates-stylus)
|
65
71
|
* [Templates Yajl](#templates-yajl)
|
@@ -70,6 +76,7 @@ Sinatra utilise le server Thin quand il est disponible.
|
|
70
76
|
* [Templates nommés](#templates-nommés)
|
71
77
|
* [Associer des extensions de fichier](#associer-des-extensions-de-fichier)
|
72
78
|
* [Ajouter son propre moteur de rendu](#ajouter-son-propre-moteur-de-rendu)
|
79
|
+
* [Utiliser des règles personnalisées pour la recherche de templates](#utiliser-des-règles-personnalisées-pour-la-recherche-de-templates)
|
73
80
|
* [Filtres](#filtres)
|
74
81
|
* [Helpers](#helpers)
|
75
82
|
* [Utiliser les sessions](#utiliser-les-sessions)
|
@@ -91,7 +98,7 @@ Sinatra utilise le server Thin quand il est disponible.
|
|
91
98
|
* [Configuration](#configuration)
|
92
99
|
* [Se protéger des attaques](#se-protéger-des-attaques)
|
93
100
|
* [Paramètres disponibles](#paramètres-disponibles)
|
94
|
-
* [
|
101
|
+
* [Environnements](#environnements)
|
95
102
|
* [Gérer les erreurs](#gérer-les-erreurs)
|
96
103
|
* [NotFound](#notfound)
|
97
104
|
* [Error](#error)
|
@@ -157,9 +164,18 @@ unlink '/' do
|
|
157
164
|
end
|
158
165
|
```
|
159
166
|
|
160
|
-
Les routes sont évaluées
|
167
|
+
Les routes sont évaluées dans l'ordre où elles ont été définies. La première
|
161
168
|
route qui correspond à la requête est appelée.
|
162
169
|
|
170
|
+
Les routes se terminant par un slash sont différentes de celles qui n'en
|
171
|
+
comportent pas :
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
get '/foo' do
|
175
|
+
# Ne correspond pas à "GET /foo/"
|
176
|
+
end
|
177
|
+
```
|
178
|
+
|
163
179
|
Les masques peuvent inclure des paramètres nommés, accessibles par
|
164
180
|
l'intermédiaire du hash `params` :
|
165
181
|
|
@@ -209,7 +225,7 @@ end
|
|
209
225
|
Une route peut aussi être définie par une expression régulière :
|
210
226
|
|
211
227
|
```ruby
|
212
|
-
get
|
228
|
+
get /\/bonjour\/([\w]+)/ do
|
213
229
|
"Bonjour, #{params['captures'].first} !"
|
214
230
|
end
|
215
231
|
```
|
@@ -242,10 +258,24 @@ get '/articles' do
|
|
242
258
|
end
|
243
259
|
```
|
244
260
|
|
245
|
-
|
261
|
+
À ce propos, à moins d'avoir désactivé la protection contre les attaques par
|
246
262
|
"path transversal" (voir plus loin), l'URL demandée peut avoir été modifiée
|
247
263
|
avant d'être comparée à vos routes.
|
248
264
|
|
265
|
+
Vous pouvez personnaliser les options [Mustermann](https://github.com/sinatra/mustermann#readme)
|
266
|
+
utilisées pour une route donnée en fournissant un hash `:mustermann_opts` :
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
get '\A/articles\z', :mustermann_opts => { :type => :regexp, :check_anchors => false } do
|
270
|
+
# répond exactement à /articles, avec un ancrage explicite
|
271
|
+
"Si tu réponds à un pattern ancré tape dans tes mains !
|
272
|
+
end
|
273
|
+
```
|
274
|
+
|
275
|
+
Cela ressemble à une [condition](#conditions), mais ce n'en est pas une !
|
276
|
+
Ces options seront mergées dans le hash global `:mustermann_opts` décrit
|
277
|
+
[plus bas](#paramètres-disponibles).
|
278
|
+
|
249
279
|
## Conditions
|
250
280
|
|
251
281
|
Les routes peuvent définir toutes sortes de conditions, comme par exemple le
|
@@ -324,13 +354,13 @@ acceptées.
|
|
324
354
|
Vous pouvez renvoyer n'importe quel objet qu'il s'agisse d'une réponse Rack
|
325
355
|
valide, d'un corps de réponse Rack ou d'un code statut HTTP :
|
326
356
|
|
327
|
-
* Un tableau de 3 éléments : `[code statut (
|
357
|
+
* Un tableau de 3 éléments : `[code statut (Integer), en-têtes (Hash), corps
|
328
358
|
de la réponse (répondant à #each)]`
|
329
|
-
* Un tableau de 2 élements : `[code statut (
|
359
|
+
* Un tableau de 2 élements : `[code statut (Integer), corps de la réponse
|
330
360
|
(répondant à #each)]`
|
331
361
|
* Un objet qui répond à `#each` et qui ne transmet que des chaînes de
|
332
362
|
caractères au bloc fourni
|
333
|
-
* Un
|
363
|
+
* Un Integer représentant le code statut
|
334
364
|
|
335
365
|
Ainsi, on peut facilement implémenter un exemple de streaming :
|
336
366
|
|
@@ -390,7 +420,7 @@ end
|
|
390
420
|
Ou bien en utilisant cette expression regulière :
|
391
421
|
|
392
422
|
```ruby
|
393
|
-
get %r{
|
423
|
+
get %r{(?!/index)} do
|
394
424
|
# ...
|
395
425
|
end
|
396
426
|
```
|
@@ -400,7 +430,7 @@ end
|
|
400
430
|
Les fichiers du dossier `./public` sont servis de façon statique. Vous pouvez spécifier un autre dossier avec le paramètre `:public_folder` :
|
401
431
|
|
402
432
|
```ruby
|
403
|
-
set :public_folder,
|
433
|
+
set :public_folder, __dir__ + '/statique'
|
404
434
|
```
|
405
435
|
|
406
436
|
Notez que le nom du dossier public n'apparait pas dans l'URL. Le fichier
|
@@ -541,6 +571,15 @@ end
|
|
541
571
|
```
|
542
572
|
|
543
573
|
Utilisera la chaine de caractères comme template pour générer la réponse.
|
574
|
+
Vous pouvez spécifier un `:path` et `:line` optionnels pour une trace plus
|
575
|
+
claire s'il existe un chemin dans le système de fichiers ou une ligne
|
576
|
+
associés à cette chaîne de caractères :
|
577
|
+
|
578
|
+
```ruby
|
579
|
+
get '/' do
|
580
|
+
haml '%div.title Bonjour le monde', :path => 'exemples/fichier.haml', :line => 3
|
581
|
+
end
|
582
|
+
```
|
544
583
|
|
545
584
|
### Langages de template disponibles
|
546
585
|
|
@@ -691,7 +730,7 @@ exemple).
|
|
691
730
|
<table>
|
692
731
|
<tr>
|
693
732
|
<td>Dépendances</td>
|
694
|
-
<td><a href="
|
733
|
+
<td><a href="https://shopify.github.io/liquid/" title="liquid">liquid</a></td>
|
695
734
|
</tr>
|
696
735
|
<tr>
|
697
736
|
<td>Extensions de fichier</td>
|
@@ -716,7 +755,7 @@ locales.
|
|
716
755
|
Au choix :
|
717
756
|
<a href="https://github.com/davidfstr/rdiscount" title="RDiscount">RDiscount</a>,
|
718
757
|
<a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>,
|
719
|
-
<a href="
|
758
|
+
<a href="https://github.com/ged/bluecloth" title="bluecloth">BlueCloth</a>,
|
720
759
|
<a href="http://kramdown.gettalong.org/" title="kramdown">kramdown</a>,
|
721
760
|
<a href="https://github.com/bhollis/maruku" title="maruku">maruku</a>
|
722
761
|
</td>
|
@@ -826,7 +865,28 @@ pas utiliser de layouts écrits en RDoc. Toutefois, il est
|
|
826
865
|
possible d’utiliser un moteur de rendu différent pour le template et
|
827
866
|
pour le layout en utilisant l’option `:layout_engine`.
|
828
867
|
|
868
|
+
#### Templates Asciidoc
|
869
|
+
|
870
|
+
<table>
|
871
|
+
<tr>
|
872
|
+
<td>Dépendances</td>
|
873
|
+
<td><a href="http://asciidoctor.org/" title="Asciidoctor">Asciidoctor</a></td>
|
874
|
+
</tr>
|
875
|
+
<tr>
|
876
|
+
<td>Extensions de fichier</td>
|
877
|
+
<td><tt>.asciidoc</tt>, <tt>.adoc</tt> and <tt>.ad</tt></td>
|
878
|
+
</tr>
|
879
|
+
<tr>
|
880
|
+
<td>Exemple</td>
|
881
|
+
<td><tt>asciidoc :README, :layout_engine => :erb</tt></td>
|
882
|
+
</tr>
|
883
|
+
</table>
|
884
|
+
|
885
|
+
Comme vous ne pouvez pas appeler de méthodes Ruby depuis un template
|
886
|
+
AsciiDoc, vous aurez sûrement à lui passer des variables locales.
|
887
|
+
|
829
888
|
#### Templates Radius
|
889
|
+
|
830
890
|
<table>
|
831
891
|
<tr>
|
832
892
|
<td>Dépendances</td>
|
@@ -936,6 +996,44 @@ pas utiliser de layouts écrits en Creole. Toutefois, il est possible
|
|
936
996
|
d'utiliser un moteur de rendu différent pour le template et pour le layout
|
937
997
|
en utilisant l'option `:layout_engine`.
|
938
998
|
|
999
|
+
#### Templates MediaWiki
|
1000
|
+
|
1001
|
+
<table>
|
1002
|
+
<tr>
|
1003
|
+
<td>Dépendances</td>
|
1004
|
+
<td><a href="https://github.com/nricciar/wikicloth" title="WikiCloth">WikiCloth</a></td>
|
1005
|
+
</tr>
|
1006
|
+
<tr>
|
1007
|
+
<td>Extensions de fichier</td>
|
1008
|
+
<td><tt>.mediawiki</tt> and <tt>.mw</tt></td>
|
1009
|
+
</tr>
|
1010
|
+
<tr>
|
1011
|
+
<td>Exemple</td>
|
1012
|
+
<td><tt>mediawiki :wiki, :layout_engine => :erb</tt></td>
|
1013
|
+
</tr>
|
1014
|
+
</table>
|
1015
|
+
|
1016
|
+
Il n’est pas possible d’appeler de méthodes Ruby depuis Mediawiki, ni de lui
|
1017
|
+
passer de variables locales. Par conséquent, il sera souvent utilisé en
|
1018
|
+
combinaison avec un autre moteur de rendu :
|
1019
|
+
|
1020
|
+
```ruby
|
1021
|
+
erb :overview, :locals => { :text => mediawiki(:introduction) }
|
1022
|
+
```
|
1023
|
+
|
1024
|
+
Notez que vous pouvez également appeler la méthode `mediawiki` depuis un
|
1025
|
+
autre template :
|
1026
|
+
|
1027
|
+
```ruby
|
1028
|
+
%h1 Bonjour depuis Haml !
|
1029
|
+
%p= mediawiki(:bienvenue)
|
1030
|
+
```
|
1031
|
+
|
1032
|
+
Comme vous ne pouvez pas appeler de méthodes Ruby depuis MediaWiki, vous ne pouvez
|
1033
|
+
pas utiliser de layouts écrits en MediaWiki. Toutefois, il est
|
1034
|
+
possible d’utiliser un moteur de rendu différent pour le template et
|
1035
|
+
pour le layout en utilisant l’option `:layout_engine`.
|
1036
|
+
|
939
1037
|
#### Templates CoffeeScript
|
940
1038
|
|
941
1039
|
<table>
|
@@ -1078,12 +1176,12 @@ get '/:id' do
|
|
1078
1176
|
end
|
1079
1177
|
```
|
1080
1178
|
|
1081
|
-
Ceci est généralement nécessaire lorsque l'on veut utiliser un template depuis un autre template (partiel) et qu'il faut donc adapter le nom des variables.
|
1179
|
+
Ceci est généralement nécessaire lorsque l'on veut utiliser un template depuis un autre template (partiel) et qu'il faut donc adapter le nom des variables.
|
1082
1180
|
|
1083
1181
|
### Templates avec `yield` et layouts imbriqués
|
1084
1182
|
|
1085
1183
|
En général, un layout est un simple template qui appelle `yield`. Ce genre de
|
1086
|
-
template peut s'utiliser via l'option `:template`
|
1184
|
+
template peut s'utiliser via l'option `:template` comme décrit précédemment ou
|
1087
1185
|
peut être rendu depuis un bloc :
|
1088
1186
|
|
1089
1187
|
```ruby
|
@@ -1203,6 +1301,23 @@ end
|
|
1203
1301
|
|
1204
1302
|
Utilisera `./views/index.monmoteur`. Voir [le projet Github](https://github.com/rtomayko/tilt) pour en savoir plus sur Tilt.
|
1205
1303
|
|
1304
|
+
### Utiliser des règles personnalisées pour la recherche de templates
|
1305
|
+
|
1306
|
+
Pour implémenter votre propre mécanisme de recherche de templates, vous
|
1307
|
+
pouvez écrire votre propre méthode `#find_template` :
|
1308
|
+
|
1309
|
+
```ruby
|
1310
|
+
configure do
|
1311
|
+
set :views, [ './vues/a', './vues/b' ]
|
1312
|
+
end
|
1313
|
+
|
1314
|
+
def find_template(vues, nom, moteur, &bloc)
|
1315
|
+
Array(vues).each do |v|
|
1316
|
+
super(v, nom, moteur, &bloc)
|
1317
|
+
end
|
1318
|
+
end
|
1319
|
+
```
|
1320
|
+
|
1206
1321
|
## Filtres
|
1207
1322
|
|
1208
1323
|
Les filtres `before` sont exécutés avant chaque requête, dans le même contexte
|
@@ -1542,7 +1657,7 @@ post '/message' do
|
|
1542
1657
|
# prévient le client qu'un nouveau message est arrivé
|
1543
1658
|
out << params['message'] << "\n"
|
1544
1659
|
|
1545
|
-
#
|
1660
|
+
# indique au client de se connecter à nouveau
|
1546
1661
|
out.close
|
1547
1662
|
end
|
1548
1663
|
|
@@ -1551,6 +1666,10 @@ post '/message' do
|
|
1551
1666
|
end
|
1552
1667
|
```
|
1553
1668
|
|
1669
|
+
Il est aussi possible pour le client de fermer la connexion en essayant
|
1670
|
+
d'écrire sur le socket. Pour cette raison, il est recommandé de vérifier
|
1671
|
+
`out.closed?` avant d'essayer d'y écrire.
|
1672
|
+
|
1554
1673
|
### Journalisation (Logging)
|
1555
1674
|
|
1556
1675
|
Dans le contexte de la requête, la méthode utilitaire `logger` expose une
|
@@ -1792,12 +1911,6 @@ Les options sont :
|
|
1792
1911
|
le nom du fichier dans la réponse, par défaut le nom du fichier envoyé.
|
1793
1912
|
</dd>
|
1794
1913
|
|
1795
|
-
<dt>last_modified</dt>
|
1796
|
-
<dd>
|
1797
|
-
valeur pour l’en-tête Last-Modified, par défaut la date de modification du
|
1798
|
-
fichier.
|
1799
|
-
</dd>
|
1800
|
-
|
1801
1914
|
<dt>type</dt>
|
1802
1915
|
<dd>
|
1803
1916
|
type de contenu à utiliser, deviné à partir de l’extension de fichier si
|
@@ -1816,7 +1929,6 @@ Les options sont :
|
|
1816
1929
|
<dt>status</dt>
|
1817
1930
|
<dd>
|
1818
1931
|
code état à renvoyer. Utile quand un fichier statique sert de page d’erreur.
|
1819
|
-
|
1820
1932
|
Si le gestionnaire Rack le supporte, d'autres moyens que le streaming via le
|
1821
1933
|
processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera
|
1822
1934
|
automatiquement les requêtes de type range.
|
@@ -1962,8 +2074,8 @@ vous pouvez utiliser plus d'un répertoire de vues :
|
|
1962
2074
|
set :views, ['views', 'templates']
|
1963
2075
|
|
1964
2076
|
helpers do
|
1965
|
-
def find_template(
|
1966
|
-
Array(
|
2077
|
+
def find_template(vues, nom, moteur, &bloc)
|
2078
|
+
Array(vues).each { |v| super(v, nom, moteur, &bloc) }
|
1967
2079
|
end
|
1968
2080
|
end
|
1969
2081
|
```
|
@@ -2016,7 +2128,7 @@ configure do
|
|
2016
2128
|
end
|
2017
2129
|
```
|
2018
2130
|
|
2019
|
-
Lancé si l'environnement (variable d'environnement
|
2131
|
+
Lancé si l'environnement (variable d'environnement APP_ENV) est `:production` :
|
2020
2132
|
|
2021
2133
|
```ruby
|
2022
2134
|
configure :production do
|
@@ -2048,7 +2160,7 @@ end
|
|
2048
2160
|
|
2049
2161
|
### Se protéger des attaques
|
2050
2162
|
|
2051
|
-
Sinatra utilise [Rack::Protection](https://github.com/sinatra/rack-protection#readme)
|
2163
|
+
Sinatra utilise [Rack::Protection](https://github.com/sinatra/sinatra/tree/master/rack-protection#readme)
|
2052
2164
|
pour protéger votre application contre les principales attaques opportunistes.
|
2053
2165
|
Vous pouvez très simplement désactiver cette fonctionnalité (ce qui exposera
|
2054
2166
|
votre application à beaucoup de vulnerabilités courantes) :
|
@@ -2121,7 +2233,7 @@ set :protection, :session => true
|
|
2121
2233
|
</dd>
|
2122
2234
|
|
2123
2235
|
<dt>environment</dt>
|
2124
|
-
<dd>environnement courant, par défaut <tt>ENV['
|
2236
|
+
<dd>environnement courant, par défaut <tt>ENV['APP_ENV']</tt>, ou
|
2125
2237
|
<tt>"development"</tt> si absent.</dd>
|
2126
2238
|
|
2127
2239
|
<dt>logging</dt>
|
@@ -2142,6 +2254,12 @@ set :protection, :session => true
|
|
2142
2254
|
<dt>port</dt>
|
2143
2255
|
<dd>port à écouter. Utiliser seulement pour le serveur intégré.</dd>
|
2144
2256
|
|
2257
|
+
<dt>mustermann_opts</dt>
|
2258
|
+
<dd>
|
2259
|
+
Un hash d'options à passer à Mustermann.new lors de la compilation
|
2260
|
+
des chemins de routes
|
2261
|
+
</dd>
|
2262
|
+
|
2145
2263
|
<dt>prefixed_redirects</dt>
|
2146
2264
|
<dd>si oui ou non <tt>request.script_name</tt> doit être inséré dans les
|
2147
2265
|
redirections si un chemin non absolu est utilisé. Ainsi, <tt>redirect
|
@@ -2161,6 +2279,12 @@ set :protection, :session => true
|
|
2161
2279
|
paramètre <tt>static</tt>). Si non défini, il découle du paramètre
|
2162
2280
|
<tt>app_file</tt>.</dd>
|
2163
2281
|
|
2282
|
+
<dt>quiet</dt>
|
2283
|
+
<dd>
|
2284
|
+
Désactive les journaux (logs) générés par les commandes start et stop
|
2285
|
+
de Sinatra. <tt>false</tt> par défaut.
|
2286
|
+
</dd>
|
2287
|
+
|
2164
2288
|
<dt>reload_templates</dt>
|
2165
2289
|
<dd>si oui ou non les templates doivent être rechargés entre les requêtes.
|
2166
2290
|
Activé en mode développement.</dd>
|
@@ -2187,11 +2311,27 @@ set :protection, :session => true
|
|
2187
2311
|
défaut [‘thin’, ‘mongrel’, ‘webrick’], l’ordre indiquant la
|
2188
2312
|
priorité.</dd>
|
2189
2313
|
|
2314
|
+
<dt>server_settings</dt>
|
2315
|
+
<dd>
|
2316
|
+
Si vous utilisez un serveur Webrick, sans doute pour votre environnement de
|
2317
|
+
développement, vous pouvez passer des options à <tt>server_settings</tt>,
|
2318
|
+
comme <tt>SSLEnable</tt> ou <tt>SSLVerifyClient</tt>. Cependant, les
|
2319
|
+
serveurs comme Puma et Thin ne le permettent pas, et vous pouvez donc
|
2320
|
+
définir <tt>server_settings</tt> en tant que méthode lorsque vous appelez
|
2321
|
+
<tt>configure</tt>.
|
2322
|
+
</dd>
|
2323
|
+
|
2190
2324
|
<dt>sessions</dt>
|
2191
2325
|
<dd>active le support des sessions basées sur les cookies, en utilisant
|
2192
2326
|
<tt>Rack::Session::Cookie</tt>. Reportez-vous à la section ‘Utiliser les
|
2193
2327
|
sessions’ pour plus d’informations.</dd>
|
2194
2328
|
|
2329
|
+
<dt>session_store</dt>
|
2330
|
+
<dd>
|
2331
|
+
Le middleware Rack utilisé pour les sessions. <tt>Rack::Session::Cookie</tt>
|
2332
|
+
par défaut. Voir la section 'Utiliser les sessions' pour plus de détails.
|
2333
|
+
</dd>
|
2334
|
+
|
2195
2335
|
<dt>show_exceptions</dt>
|
2196
2336
|
<dd>affiche la trace de l’erreur dans le navigateur lorsqu’une exception se
|
2197
2337
|
produit. Désactivé par défaut sauf lorsque <tt>environment</tt> est
|
@@ -2214,6 +2354,9 @@ set :protection, :session => true
|
|
2214
2354
|
<dd>à définir à <tt>true</tt> pour indiquer à Thin d’utiliser
|
2215
2355
|
<tt>EventMachine.defer</tt> pour traiter la requête.</dd>
|
2216
2356
|
|
2357
|
+
<dt>traps</dt>
|
2358
|
+
<dd>Indique si Sinatra doit gérer les signaux système.</dd>
|
2359
|
+
|
2217
2360
|
<dt>views</dt>
|
2218
2361
|
<dd>chemin pour le dossier des vues. Si non défini, il découle du paramètre
|
2219
2362
|
<tt>app_file</tt>.</dd>
|
@@ -2225,11 +2368,11 @@ set :protection, :session => true
|
|
2225
2368
|
</dd>
|
2226
2369
|
</dl>
|
2227
2370
|
|
2228
|
-
##
|
2371
|
+
## Environnements
|
2229
2372
|
|
2230
2373
|
Il existe trois environnements prédéfinis : `"development"`,
|
2231
|
-
`"production"` et `"test"`. Les
|
2232
|
-
sélectionné via la variable d'environnement `
|
2374
|
+
`"production"` et `"test"`. Les environnements peuvent être
|
2375
|
+
sélectionné via la variable d'environnement `APP_ENV`. Sa valeur par défaut
|
2233
2376
|
est `"development"`. Dans ce mode, tous les templates sont rechargés à
|
2234
2377
|
chaque requête. Des handlers spécifiques pour `not_found` et
|
2235
2378
|
`error` sont installés pour vous permettre d'avoir une pile de trace
|
@@ -2237,10 +2380,10 @@ dans votre navigateur. En mode `"production"` et `"test"` les
|
|
2237
2380
|
templates sont mis en cache par défaut.
|
2238
2381
|
|
2239
2382
|
Pour exécuter votre application dans un environnement différent, définissez la
|
2240
|
-
variable d'environnement `
|
2383
|
+
variable d'environnement `APP_ENV` :
|
2241
2384
|
|
2242
|
-
```shell
|
2243
|
-
|
2385
|
+
``` shell
|
2386
|
+
APP_ENV=production ruby my_app.rb
|
2244
2387
|
```
|
2245
2388
|
|
2246
2389
|
Vous pouvez utiliser une des méthodes `development?`, `test?` et `production?`
|
@@ -2276,7 +2419,15 @@ end
|
|
2276
2419
|
### Error
|
2277
2420
|
|
2278
2421
|
Le gestionnaire `error` est invoqué à chaque fois qu'une exception est
|
2279
|
-
soulevée dans une route ou un filtre.
|
2422
|
+
soulevée dans une route ou un filtre. Notez qu'en développement, il ne
|
2423
|
+
sera exécuté que si vous définissez l'option show exceptions à
|
2424
|
+
`:after_handler` :
|
2425
|
+
|
2426
|
+
```ruby
|
2427
|
+
set :show_exceptions, :after_handler
|
2428
|
+
```
|
2429
|
+
|
2430
|
+
L'objet exception est accessible via la
|
2280
2431
|
variable Rack `sinatra.error` :
|
2281
2432
|
|
2282
2433
|
```ruby
|
@@ -2285,7 +2436,7 @@ error do
|
|
2285
2436
|
end
|
2286
2437
|
```
|
2287
2438
|
|
2288
|
-
Erreur
|
2439
|
+
Erreur personnalisée :
|
2289
2440
|
|
2290
2441
|
```ruby
|
2291
2442
|
error MonErreurSurMesure do
|
@@ -2405,13 +2556,16 @@ class MonTest < Minitest::Test
|
|
2405
2556
|
assert_equal 'Salut Frank !', last_response.body
|
2406
2557
|
end
|
2407
2558
|
|
2408
|
-
def
|
2559
|
+
def test_avec_agent
|
2409
2560
|
get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
|
2410
2561
|
assert_equal "Vous utilisez Songbird !", last_response.body
|
2411
2562
|
end
|
2412
2563
|
end
|
2413
2564
|
```
|
2414
2565
|
|
2566
|
+
Note : si vous utilisez le style modulaire de Sinatra, remplacez
|
2567
|
+
`Sinatra::Application` par le nom de la classe de votre application.
|
2568
|
+
|
2415
2569
|
## Sinatra::Base - Les Middlewares, Bibliothèques, et Applications Modulaires
|
2416
2570
|
|
2417
2571
|
Définir votre application au niveau supérieur fonctionne bien dans le cas des
|
@@ -2818,9 +2972,9 @@ multi-threaded:
|
|
2818
2972
|
require 'sinatra/base'
|
2819
2973
|
|
2820
2974
|
classe App < Sinatra::Base
|
2821
|
-
|
2975
|
+
get '/' do
|
2822
2976
|
'Bonjour le monde !'
|
2823
|
-
|
2977
|
+
end
|
2824
2978
|
end
|
2825
2979
|
|
2826
2980
|
App.run!
|
@@ -2839,31 +2993,9 @@ thin --threaded start
|
|
2839
2993
|
Les versions suivantes de Ruby sont officiellement supportées :
|
2840
2994
|
|
2841
2995
|
<dl>
|
2842
|
-
<dt>Ruby
|
2843
|
-
<dd>
|
2844
|
-
1.8.7 est complètement supporté, toutefois si rien ne vous en empêche,
|
2845
|
-
nous vous recommandons de faire une mise à jour ou bien de passer à JRuby
|
2846
|
-
ou Rubinius. Le support de Ruby 1.8.7 ne sera pas supprimé avant la sortie
|
2847
|
-
de Sinatra 2.0. Ruby 1.8.6 n’est plus supporté.
|
2848
|
-
</dd>
|
2849
|
-
|
2850
|
-
<dt>Ruby 1.9.2</dt>
|
2851
|
-
<dd>
|
2852
|
-
1.9.2 est totalement supporté. N’utilisez pas 1.9.2p0 car il provoque des
|
2853
|
-
erreurs de segmentation à l’exécution de Sinatra. Son support continuera
|
2854
|
-
au minimum jusqu’à la sortie de Sinatra 1.5.
|
2855
|
-
</dd>
|
2856
|
-
|
2857
|
-
<dt>Ruby 1.9.3</dt>
|
2858
|
-
<dd>
|
2859
|
-
1.9.3 est totalement supporté et recommandé. Nous vous rappelons que passer
|
2860
|
-
à 1.9.3 depuis une version précédente annulera toutes les sessions. 1.9.3
|
2861
|
-
sera supporté jusqu'à la sortie de Sinatra 2.0.
|
2862
|
-
</dd>
|
2863
|
-
|
2864
|
-
<dt>Ruby 2.0.0</dt>
|
2996
|
+
<dt>Ruby 2.2</dt>
|
2865
2997
|
<dd>
|
2866
|
-
2.
|
2998
|
+
2.2 est totalement supporté et recommandé. L'abandon de son support
|
2867
2999
|
officiel n'est pas à l'ordre du jour.
|
2868
3000
|
</dd>
|
2869
3001
|
|
@@ -2881,6 +3013,8 @@ Les versions suivantes de Ruby sont officiellement supportées :
|
|
2881
3013
|
</dd>
|
2882
3014
|
</dl>
|
2883
3015
|
|
3016
|
+
Les versions antérieures à 2.2.2 ne sont plus supportées depuis Sinatra 2.0.
|
3017
|
+
|
2884
3018
|
Nous gardons également un oeil sur les versions Ruby à venir.
|
2885
3019
|
|
2886
3020
|
Les implémentations Ruby suivantes ne sont pas officiellement supportées mais
|
@@ -2953,43 +3087,6 @@ Vous pouvez alors lancer votre application de la façon suivante :
|
|
2953
3087
|
bundle exec ruby myapp.rb
|
2954
3088
|
```
|
2955
3089
|
|
2956
|
-
### Faire un clone local
|
2957
|
-
|
2958
|
-
Si vous ne souhaitez pas employer Bundler, vous pouvez cloner Sinatra en local
|
2959
|
-
dans votre projet et démarrez votre application avec le dossier `sinatra/lib`
|
2960
|
-
dans le `$LOAD_PATH` :
|
2961
|
-
|
2962
|
-
```shell
|
2963
|
-
cd myapp
|
2964
|
-
git clone git://github.com/sinatra/sinatra.git
|
2965
|
-
ruby -I sinatra/lib myapp.rb
|
2966
|
-
```
|
2967
|
-
|
2968
|
-
Et de temps en temps, vous devrez récupérer la dernière version du code source
|
2969
|
-
de Sinatra :
|
2970
|
-
|
2971
|
-
```shell
|
2972
|
-
cd myapp/sinatra
|
2973
|
-
git pull
|
2974
|
-
```
|
2975
|
-
|
2976
|
-
### Installer globalement
|
2977
|
-
|
2978
|
-
Une dernière méthode consiste à construire la gem vous-même :
|
2979
|
-
|
2980
|
-
```shell
|
2981
|
-
git clone git://github.com/sinatra/sinatra.git
|
2982
|
-
cd sinatra
|
2983
|
-
rake sinatra.gemspec
|
2984
|
-
rake install
|
2985
|
-
```
|
2986
|
-
|
2987
|
-
Si vous installez les gems en tant que root, vous devez encore faire un :
|
2988
|
-
|
2989
|
-
```shell
|
2990
|
-
sudo rake install
|
2991
|
-
```
|
2992
|
-
|
2993
3090
|
## Versions
|
2994
3091
|
|
2995
3092
|
Sinatra se conforme aux [versions sémantiques](http://semver.org/), aussi bien
|
data/README.hu.md
CHANGED
@@ -88,7 +88,7 @@ Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
|
|
88
88
|
Reguláris kifejezéseket is felvehetünk az útvonalba:
|
89
89
|
|
90
90
|
```ruby
|
91
|
-
get
|
91
|
+
get /\/hello\/([\w]+)/ do
|
92
92
|
"Helló, #{params['captures'].first}!"
|
93
93
|
end
|
94
94
|
```
|
@@ -120,7 +120,7 @@ A statikus fájlok kiszolgálása a `./public` könyvtárból
|
|
120
120
|
történik, de természetesen más könyvtárat is megadhatsz erre a célra,
|
121
121
|
mégpedig a :public_folder kapcsoló beállításával:
|
122
122
|
|
123
|
-
set :public_folder,
|
123
|
+
set :public_folder, __dir__ + '/static'
|
124
124
|
|
125
125
|
Fontos megjegyezni, hogy a nyilvános könyvtár neve nem szerepel az URL-ben.
|
126
126
|
A ./public/css/style.css fájl az
|
@@ -131,7 +131,7 @@ A ./public/css/style.css fájl az
|
|
131
131
|
A sablonfájlokat rendszerint a `./views` könyvtárba helyezzük, de
|
132
132
|
itt is lehetőség nyílik egyéb könyvtár használatára:
|
133
133
|
|
134
|
-
set :views,
|
134
|
+
set :views, __dir__ + '/templates'
|
135
135
|
|
136
136
|
Nagyon fontos észben tartani, hogy a sablononkra mindig szimbólumokkal
|
137
137
|
hivatkozunk, még akkor is, ha egyéb (ebben az esetben a
|
@@ -411,7 +411,7 @@ Csak indításkor, de minden környezetre érvényesen fusson le:
|
|
411
411
|
end
|
412
412
|
```
|
413
413
|
|
414
|
-
Csak akkor fusson le, ha a környezet (a
|
414
|
+
Csak akkor fusson le, ha a környezet (a APP_ENV környezeti változóban)
|
415
415
|
`:production`-ra van állítva:
|
416
416
|
|
417
417
|
```ruby
|
@@ -562,7 +562,7 @@ könyvtárat ajánljuk:
|
|
562
562
|
assert_equal 'Helló Frici!', last_response.body
|
563
563
|
end
|
564
564
|
|
565
|
-
def
|
565
|
+
def test_with_user_agent
|
566
566
|
get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
|
567
567
|
assert_equal "Songbird-öt használsz!", last_response.body
|
568
568
|
end
|
@@ -649,6 +649,40 @@ Az alábbi kapcsolókat ismeri fel a rendszer:
|
|
649
649
|
-s # a rack szerver/handler beállítása (alapértelmezetten ez a thin)
|
650
650
|
-x # a mutex lock bekapcsolása (alapértelmezetten ki van kapcsolva)
|
651
651
|
|
652
|
+
## Több szálon futtatás
|
653
|
+
|
654
|
+
_Parafrázis [Konstantin StackOverflow válasza][so-answer] alapján_
|
655
|
+
|
656
|
+
A Sinatra nem szabja meg az konkurenciakezelés módját, hanem az alatta működő
|
657
|
+
Rack kezelőre (szerverre) hagyja ezt a feladatot, ami például a Thin, a Puma,
|
658
|
+
vagy a WEBrick. A Sinatra önmagában szálbiztos, tehát semmilyen probléma sem
|
659
|
+
adódik, ha a Rack kezelő többszálú konkurenciamodellt használ. Ezek szerint
|
660
|
+
szerverindításkor meg kell adni a Rack szervernek megfelelő indítási módot.
|
661
|
+
A következő példa egy többszálú Thin szerver indítását mutatja be.
|
662
|
+
|
663
|
+
```ruby
|
664
|
+
# app.rb
|
665
|
+
|
666
|
+
require 'sinatra/base'
|
667
|
+
|
668
|
+
class App < Sinatra::Base
|
669
|
+
get '/' do
|
670
|
+
"Hello, World"
|
671
|
+
end
|
672
|
+
end
|
673
|
+
|
674
|
+
App.run!
|
675
|
+
|
676
|
+
```
|
677
|
+
|
678
|
+
A szerverindítás parancsa a következő lenne:
|
679
|
+
|
680
|
+
``` shell
|
681
|
+
thin --threaded start
|
682
|
+
```
|
683
|
+
|
684
|
+
[so-answer]: http://stackoverflow.com/a/6282999/1725341
|
685
|
+
|
652
686
|
## Fejlesztői változat
|
653
687
|
|
654
688
|
Ha a Sinatra legfrissebb, fejlesztői változatát szeretnéd használni,
|
@@ -666,7 +700,7 @@ De hozzá is adhatod a <tt>sinatra/lib</tt> könyvtárat a <tt>LOAD_PATH</tt>-ho
|
|
666
700
|
az alkalmazásodban:
|
667
701
|
|
668
702
|
```ruby
|
669
|
-
$LOAD_PATH.unshift
|
703
|
+
$LOAD_PATH.unshift __dir__ + '/sinatra/lib'
|
670
704
|
require 'rubygems'
|
671
705
|
require 'sinatra'
|
672
706
|
|