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.

Files changed (133) hide show
  1. checksums.yaml +5 -5
  2. data/AUTHORS.md +1 -0
  3. data/CHANGELOG.md +272 -54
  4. data/CONTRIBUTING.md +8 -8
  5. data/Gemfile +48 -47
  6. data/LICENSE +4 -1
  7. data/MAINTENANCE.md +42 -0
  8. data/README.de.md +651 -443
  9. data/README.es.md +738 -357
  10. data/README.fr.md +197 -100
  11. data/README.hu.md +40 -6
  12. data/README.ja.md +125 -67
  13. data/README.ko.md +15 -15
  14. data/README.malayalam.md +3141 -0
  15. data/README.md +592 -432
  16. data/README.pt-br.md +2362 -335
  17. data/README.pt-pt.md +5 -5
  18. data/README.ru.md +857 -608
  19. data/README.zh.md +91 -29
  20. data/Rakefile +77 -51
  21. data/SECURITY.md +35 -0
  22. data/VERSION +1 -0
  23. data/examples/chat.rb +2 -1
  24. data/examples/rainbows.conf +3 -0
  25. data/examples/rainbows.rb +20 -0
  26. data/examples/stream.ru +4 -4
  27. data/lib/sinatra/base.rb +243 -265
  28. data/lib/sinatra/indifferent_hash.rb +200 -0
  29. data/lib/sinatra/main.rb +30 -10
  30. data/lib/sinatra/show_exceptions.rb +67 -62
  31. data/lib/sinatra/version.rb +1 -1
  32. data/sinatra.gemspec +44 -8
  33. metadata +43 -167
  34. data/lib/sinatra/ext.rb +0 -17
  35. data/test/asciidoctor_test.rb +0 -72
  36. data/test/base_test.rb +0 -167
  37. data/test/builder_test.rb +0 -91
  38. data/test/coffee_test.rb +0 -96
  39. data/test/compile_test.rb +0 -183
  40. data/test/contest.rb +0 -91
  41. data/test/creole_test.rb +0 -65
  42. data/test/delegator_test.rb +0 -160
  43. data/test/encoding_test.rb +0 -20
  44. data/test/erb_test.rb +0 -116
  45. data/test/extensions_test.rb +0 -98
  46. data/test/filter_test.rb +0 -487
  47. data/test/haml_test.rb +0 -109
  48. data/test/helper.rb +0 -132
  49. data/test/helpers_test.rb +0 -1917
  50. data/test/integration/app.rb +0 -79
  51. data/test/integration_helper.rb +0 -236
  52. data/test/integration_test.rb +0 -104
  53. data/test/less_test.rb +0 -69
  54. data/test/liquid_test.rb +0 -77
  55. data/test/mapped_error_test.rb +0 -285
  56. data/test/markaby_test.rb +0 -80
  57. data/test/markdown_test.rb +0 -85
  58. data/test/mediawiki_test.rb +0 -68
  59. data/test/middleware_test.rb +0 -68
  60. data/test/nokogiri_test.rb +0 -67
  61. data/test/public/favicon.ico +0 -0
  62. data/test/public/hello+world.txt +0 -1
  63. data/test/rabl_test.rb +0 -89
  64. data/test/rack_test.rb +0 -45
  65. data/test/radius_test.rb +0 -59
  66. data/test/rdoc_test.rb +0 -66
  67. data/test/readme_test.rb +0 -130
  68. data/test/request_test.rb +0 -100
  69. data/test/response_test.rb +0 -63
  70. data/test/result_test.rb +0 -76
  71. data/test/route_added_hook_test.rb +0 -59
  72. data/test/routing_test.rb +0 -1456
  73. data/test/sass_test.rb +0 -115
  74. data/test/scss_test.rb +0 -88
  75. data/test/server_test.rb +0 -56
  76. data/test/settings_test.rb +0 -582
  77. data/test/sinatra_test.rb +0 -12
  78. data/test/slim_test.rb +0 -102
  79. data/test/static_test.rb +0 -266
  80. data/test/streaming_test.rb +0 -149
  81. data/test/stylus_test.rb +0 -90
  82. data/test/templates_test.rb +0 -382
  83. data/test/textile_test.rb +0 -65
  84. data/test/views/a/in_a.str +0 -1
  85. data/test/views/ascii.erb +0 -2
  86. data/test/views/b/in_b.str +0 -1
  87. data/test/views/calc.html.erb +0 -1
  88. data/test/views/error.builder +0 -3
  89. data/test/views/error.erb +0 -3
  90. data/test/views/error.haml +0 -3
  91. data/test/views/error.sass +0 -2
  92. data/test/views/explicitly_nested.str +0 -1
  93. data/test/views/foo/hello.test +0 -1
  94. data/test/views/hello.asciidoc +0 -1
  95. data/test/views/hello.builder +0 -1
  96. data/test/views/hello.coffee +0 -1
  97. data/test/views/hello.creole +0 -1
  98. data/test/views/hello.erb +0 -1
  99. data/test/views/hello.haml +0 -1
  100. data/test/views/hello.less +0 -5
  101. data/test/views/hello.liquid +0 -1
  102. data/test/views/hello.mab +0 -1
  103. data/test/views/hello.md +0 -1
  104. data/test/views/hello.mediawiki +0 -1
  105. data/test/views/hello.nokogiri +0 -1
  106. data/test/views/hello.rabl +0 -2
  107. data/test/views/hello.radius +0 -1
  108. data/test/views/hello.rdoc +0 -1
  109. data/test/views/hello.sass +0 -2
  110. data/test/views/hello.scss +0 -3
  111. data/test/views/hello.slim +0 -1
  112. data/test/views/hello.str +0 -1
  113. data/test/views/hello.styl +0 -2
  114. data/test/views/hello.test +0 -1
  115. data/test/views/hello.textile +0 -1
  116. data/test/views/hello.wlang +0 -1
  117. data/test/views/hello.yajl +0 -1
  118. data/test/views/layout2.builder +0 -3
  119. data/test/views/layout2.erb +0 -2
  120. data/test/views/layout2.haml +0 -2
  121. data/test/views/layout2.liquid +0 -2
  122. data/test/views/layout2.mab +0 -2
  123. data/test/views/layout2.nokogiri +0 -3
  124. data/test/views/layout2.rabl +0 -3
  125. data/test/views/layout2.radius +0 -2
  126. data/test/views/layout2.slim +0 -3
  127. data/test/views/layout2.str +0 -2
  128. data/test/views/layout2.test +0 -1
  129. data/test/views/layout2.wlang +0 -2
  130. data/test/views/nested.str +0 -1
  131. data/test/views/utf8.erb +0 -2
  132. data/test/wlang_test.rb +0 -87
  133. 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
- [http://localhost:4567](http://localhost:4567)
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
- * [Environements](#environements)
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 dans l'ordre où elles ont été définies. La première
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 /\A\/bonjour\/([\w]+)\z/ do
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
- A ce propos, à moins d'avoir désactivé la protection contre les attaques par
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 (Fixnum), en-têtes (Hash), corps
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 (Fixnum), corps de la réponse
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 Fixnum représentant le code statut
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{^(?!/index$)} do
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, File.dirname(__FILE__) + '/statique'
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="http://liquidmarkup.org/" title="liquid">liquid</a></td>
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="http://deveiate.org/projects/BlueCloth" title="BlueCloth">BlueCloth</a>,
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` comme décrit précédemment ou
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
- # indique au client de se connecter à nouveau
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(views, name, engine, &block)
1966
- Array(views).each { |v| super(v, name, engine, &block) }
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 RACK_ENV) est `:production` :
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['RACK_ENV']</tt>, ou
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
- ## Environements
2371
+ ## Environnements
2229
2372
 
2230
2373
  Il existe trois environnements prédéfinis : `"development"`,
2231
- `"production"` et `"test"`. Les environements peuvent être
2232
- sélectionné via la variable d'environnement `RACK_ENV`. Sa valeur par défaut
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 `RACK_ENV` :
2383
+ variable d'environnement `APP_ENV` :
2241
2384
 
2242
- ```shell
2243
- RACK_ENV=production ruby my_app.rb
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. L'objet exception est accessible via la
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 sur mesure :
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 test_avec_rack_env
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
-   get '/' do
2975
+ get '/' do
2822
2976
  'Bonjour le monde !'
2823
-   end
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 1.8.7</dt>
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.0.0 est totalement supporté et recommandé. L'abandon de son support
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 /\A\/hello\/([\w]+)\z/ do
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, File.dirname(__FILE__) + '/static'
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, File.dirname(__FILE__) + '/templates'
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 RACK_ENV környezeti változóban)
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 test_with_rack_env
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 File.dirname(__FILE__) + '/sinatra/lib'
703
+ $LOAD_PATH.unshift __dir__ + '/sinatra/lib'
670
704
  require 'rubygems'
671
705
  require 'sinatra'
672
706