sinatra 1.4.5 → 1.4.6
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 +4 -4
- data/AUTHORS.md +77 -0
- data/CHANGES +30 -0
- data/Gemfile +5 -5
- data/README.de.md +186 -56
- data/README.es.md +76 -76
- data/README.fr.md +120 -56
- data/README.hu.md +19 -19
- data/README.ja.md +44 -46
- data/README.ko.md +163 -67
- data/README.md +151 -127
- data/README.pt-br.md +905 -144
- data/README.pt-pt.md +17 -17
- data/README.ru.md +88 -52
- data/README.zh.md +76 -68
- data/lib/sinatra.rb +0 -1
- data/lib/sinatra/base.rb +21 -15
- data/lib/sinatra/show_exceptions.rb +10 -4
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +1 -1
- data/test/asciidoctor_test.rb +2 -2
- data/test/base_test.rb +1 -5
- data/test/builder_test.rb +2 -2
- data/test/coffee_test.rb +8 -2
- data/test/compile_test.rb +1 -1
- data/test/contest.rb +3 -12
- data/test/creole_test.rb +2 -2
- data/test/delegator_test.rb +1 -1
- data/test/encoding_test.rb +1 -1
- data/test/erb_test.rb +1 -1
- data/test/extensions_test.rb +1 -1
- data/test/filter_test.rb +2 -2
- data/test/haml_test.rb +2 -2
- data/test/helper.rb +8 -7
- data/test/helpers_test.rb +6 -6
- data/test/integration_test.rb +3 -3
- data/test/less_test.rb +2 -2
- data/test/liquid_test.rb +3 -3
- data/test/mapped_error_test.rb +5 -5
- data/test/markaby_test.rb +2 -2
- data/test/markdown_test.rb +6 -3
- data/test/mediawiki_test.rb +2 -2
- data/test/middleware_test.rb +1 -1
- data/test/nokogiri_test.rb +2 -2
- data/test/rabl_test.rb +2 -2
- data/test/rack_test.rb +1 -1
- data/test/radius_test.rb +2 -2
- data/test/rdoc_test.rb +4 -4
- data/test/readme_test.rb +1 -1
- data/test/request_test.rb +4 -1
- data/test/response_test.rb +1 -1
- data/test/result_test.rb +2 -2
- data/test/route_added_hook_test.rb +1 -1
- data/test/routing_test.rb +7 -7
- data/test/sass_test.rb +3 -3
- data/test/scss_test.rb +2 -2
- data/test/server_test.rb +10 -2
- data/test/settings_test.rb +4 -4
- data/test/sinatra_test.rb +1 -1
- data/test/slim_test.rb +2 -2
- data/test/static_test.rb +2 -2
- data/test/streaming_test.rb +2 -2
- data/test/stylus_test.rb +2 -2
- data/test/templates_test.rb +3 -3
- data/test/textile_test.rb +2 -2
- data/test/wlang_test.rb +1 -1
- data/test/yajl_test.rb +2 -2
- metadata +10 -11
- data/AUTHORS +0 -61
data/README.fr.md
CHANGED
@@ -164,8 +164,8 @@ l'intermédiaire du hash `params` :
|
|
164
164
|
``` ruby
|
165
165
|
get '/bonjour/:nom' do
|
166
166
|
# répond aux requêtes "GET /bonjour/foo" et "GET /bonjour/bar"
|
167
|
-
# params[
|
168
|
-
"Bonjour #{params[
|
167
|
+
# params['nom'] est 'foo' ou 'bar'
|
168
|
+
"Bonjour #{params['nom']} !"
|
169
169
|
end
|
170
170
|
```
|
171
171
|
|
@@ -175,24 +175,24 @@ paramètres du bloc comme ceci :
|
|
175
175
|
``` ruby
|
176
176
|
get '/bonjour/:nom' do |n|
|
177
177
|
# répond aux requêtes "GET /bonjour/foo" et "GET /bonjour/bar"
|
178
|
-
# params[
|
179
|
-
# n contient params[
|
178
|
+
# params['nom'] est 'foo' ou 'bar'
|
179
|
+
# n contient params['nom']
|
180
180
|
"Bonjour #{n} !"
|
181
181
|
end
|
182
182
|
```
|
183
183
|
|
184
184
|
Une route peut contenir un splat (caractère joker), accessible par
|
185
|
-
l'intermédiaire du tableau `params[
|
185
|
+
l'intermédiaire du tableau `params['splat']` :
|
186
186
|
|
187
187
|
``` ruby
|
188
188
|
get '/dire/*/a/*' do
|
189
189
|
# répond à /dire/bonjour/a/monde
|
190
|
-
params[
|
190
|
+
params['splat'] # => ["bonjour", "monde"]
|
191
191
|
end
|
192
192
|
|
193
193
|
get '/telecharger/*.*' do
|
194
194
|
# répond à /telecharger/chemin/vers/fichier.xml
|
195
|
-
params[
|
195
|
+
params['splat'] # => ["chemin/vers/fichier", "xml"]
|
196
196
|
end
|
197
197
|
```
|
198
198
|
|
@@ -207,8 +207,8 @@ end
|
|
207
207
|
Une route peut aussi être définie par une expression régulière :
|
208
208
|
|
209
209
|
``` ruby
|
210
|
-
get
|
211
|
-
"Bonjour, #{params[
|
210
|
+
get /\A\/bonjour\/([\w]+)\z/ do
|
211
|
+
"Bonjour, #{params['captures'].first} !"
|
212
212
|
end
|
213
213
|
```
|
214
214
|
|
@@ -228,6 +228,17 @@ get '/posts.?:format?' do
|
|
228
228
|
end
|
229
229
|
```
|
230
230
|
|
231
|
+
Ainsi que des paramètres d'URL :
|
232
|
+
|
233
|
+
``` ruby
|
234
|
+
get '/posts' do
|
235
|
+
# répond à "GET /posts?titre=foo&auteur=bar"
|
236
|
+
titre = params['titre']
|
237
|
+
auteur = params['auteur']
|
238
|
+
# utilise les variables titre et auteur, ces paramètres d'URL sont optionnels pour la route /posts
|
239
|
+
end
|
240
|
+
```
|
241
|
+
|
231
242
|
A ce propos, à moins d'avoir désactivé la protection contre les attaques par
|
232
243
|
"path transversal" (voir plus loin), l'URL demandée peut avoir été modifiée
|
233
244
|
avant d'être comparée à vos routes.
|
@@ -239,7 +250,7 @@ Les routes peuvent définir toutes sortes de conditions, comme par exemple le
|
|
239
250
|
|
240
251
|
``` ruby
|
241
252
|
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
|
242
|
-
"Vous utilisez Songbird version #{params[
|
253
|
+
"Vous utilisez Songbird version #{params['agent'][0]}"
|
243
254
|
end
|
244
255
|
|
245
256
|
get '/foo' do
|
@@ -588,7 +599,7 @@ get('/') { markdown :index }
|
|
588
599
|
<tr>
|
589
600
|
<td>Dépendances</td>
|
590
601
|
<td>
|
591
|
-
<a href="
|
602
|
+
<a href="https://github.com/jimweirich/builder" title="builder">builder</a>
|
592
603
|
</td>
|
593
604
|
</tr>
|
594
605
|
<tr>
|
@@ -709,8 +720,8 @@ locales.
|
|
709
720
|
<a href="https://github.com/rtomayko/rdiscount" title="RDiscount">RDiscount</a>,
|
710
721
|
<a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>,
|
711
722
|
<a href="http://deveiate.org/projects/BlueCloth" title="BlueCloth">BlueCloth</a>,
|
712
|
-
<a href="http://kramdown.
|
713
|
-
<a href="
|
723
|
+
<a href="http://kramdown.gettalong.org/" title="kramdown">kramdown</a>,
|
724
|
+
<a href="https://github.com/bhollis/maruku" title="maruku">maruku</a>
|
714
725
|
</td>
|
715
726
|
</tr>
|
716
727
|
|
@@ -788,7 +799,7 @@ pour le layout en utilisant l’option `:layout_engine`.
|
|
788
799
|
<table>
|
789
800
|
<tr>
|
790
801
|
<td>Dépendances</td>
|
791
|
-
<td><a href="http://rdoc.
|
802
|
+
<td><a href="http://rdoc.sourceforge.net/" title="RDoc">RDoc</a></td>
|
792
803
|
</tr>
|
793
804
|
<tr>
|
794
805
|
<td>Extensions de fichier</td>
|
@@ -825,7 +836,7 @@ pour le layout en utilisant l’option `:layout_engine`.
|
|
825
836
|
<table>
|
826
837
|
<tr>
|
827
838
|
<td>Dépendances</td>
|
828
|
-
<td><a href="
|
839
|
+
<td><a href="https://github.com/jlong/radius" title="Radius">Radius</a></td>
|
829
840
|
</tr>
|
830
841
|
<tr>
|
831
842
|
<td>Extensions de fichier</td>
|
@@ -1060,7 +1071,7 @@ gestionnaire de route sont directement accessibles dans le template :
|
|
1060
1071
|
|
1061
1072
|
``` ruby
|
1062
1073
|
get '/:id' do
|
1063
|
-
@foo = Foo.find(params[
|
1074
|
+
@foo = Foo.find(params['id'])
|
1064
1075
|
haml '%h1= @foo.nom'
|
1065
1076
|
end
|
1066
1077
|
```
|
@@ -1069,7 +1080,7 @@ Alternativement, on peut passer un hash contenant des variables locales :
|
|
1069
1080
|
|
1070
1081
|
``` ruby
|
1071
1082
|
get '/:id' do
|
1072
|
-
foo = Foo.find(params[
|
1083
|
+
foo = Foo.find(params['id'])
|
1073
1084
|
haml '%h1= foo.nom', :locals => { :foo => foo }
|
1074
1085
|
end
|
1075
1086
|
```
|
@@ -1217,7 +1228,7 @@ end
|
|
1217
1228
|
|
1218
1229
|
get '/foo/*' do
|
1219
1230
|
@note #=> 'Coucou !'
|
1220
|
-
params[
|
1231
|
+
params['splat'] #=> 'bar/baz'
|
1221
1232
|
end
|
1222
1233
|
```
|
1223
1234
|
|
@@ -1245,7 +1256,7 @@ before '/secret/*' do
|
|
1245
1256
|
end
|
1246
1257
|
|
1247
1258
|
after '/faire/:travail' do |travail|
|
1248
|
-
session[
|
1259
|
+
session['dernier_travail'] = travail
|
1249
1260
|
end
|
1250
1261
|
```
|
1251
1262
|
|
@@ -1274,7 +1285,7 @@ helpers do
|
|
1274
1285
|
end
|
1275
1286
|
|
1276
1287
|
get '/:nom' do
|
1277
|
-
bar(params[
|
1288
|
+
bar(params['nom'])
|
1278
1289
|
end
|
1279
1290
|
```
|
1280
1291
|
|
@@ -1304,11 +1315,11 @@ activées, vous avez un hash de session par session utilisateur :
|
|
1304
1315
|
enable :sessions
|
1305
1316
|
|
1306
1317
|
get '/' do
|
1307
|
-
"valeur = " << session[
|
1318
|
+
"valeur = " << session['valeur'].inspect
|
1308
1319
|
end
|
1309
1320
|
|
1310
1321
|
get '/:value' do
|
1311
|
-
session[
|
1322
|
+
session['valeur'] = params['valeur']
|
1312
1323
|
end
|
1313
1324
|
```
|
1314
1325
|
|
@@ -1323,11 +1334,11 @@ choix comme vous le feriez pour n'importe quel autre middleware :
|
|
1323
1334
|
use Rack::Session::Pool, :expire_after => 2592000
|
1324
1335
|
|
1325
1336
|
get '/' do
|
1326
|
-
"valeur = " << session[
|
1337
|
+
"valeur = " << session['valeur'].inspect
|
1327
1338
|
end
|
1328
1339
|
|
1329
1340
|
get '/:value' do
|
1330
|
-
session[
|
1341
|
+
session['valeur'] = params['valeur']
|
1331
1342
|
end
|
1332
1343
|
```
|
1333
1344
|
|
@@ -1402,7 +1413,7 @@ avec `pass` :
|
|
1402
1413
|
|
1403
1414
|
``` ruby
|
1404
1415
|
get '/devine/:qui' do
|
1405
|
-
pass unless params[
|
1416
|
+
pass unless params['qui'] == 'Frank'
|
1406
1417
|
"Tu m'as eu !"
|
1407
1418
|
end
|
1408
1419
|
|
@@ -1529,19 +1540,17 @@ connexions = []
|
|
1529
1540
|
|
1530
1541
|
get '/souscrire' do
|
1531
1542
|
# abonne un client aux évènements du serveur
|
1532
|
-
stream(:keep_open)
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
# compte-rendu
|
1538
|
-
"abonné"
|
1543
|
+
stream(:keep_open) do |out|
|
1544
|
+
connexions << out
|
1545
|
+
# purge les connexions abandonnées
|
1546
|
+
connexions.reject!(&:closed?)
|
1547
|
+
end
|
1539
1548
|
end
|
1540
1549
|
|
1541
1550
|
post '/message' do
|
1542
1551
|
connexions.each do |out|
|
1543
1552
|
# prévient le client qu'un nouveau message est arrivé
|
1544
|
-
out << params[
|
1553
|
+
out << params['message'] << "\n"
|
1545
1554
|
|
1546
1555
|
# indique au client de se connecter à nouveau
|
1547
1556
|
out.close
|
@@ -1666,12 +1675,12 @@ Ou bien utilisez une session :
|
|
1666
1675
|
enable :sessions
|
1667
1676
|
|
1668
1677
|
get '/foo' do
|
1669
|
-
session[
|
1678
|
+
session['secret'] = 'foo'
|
1670
1679
|
redirect to('/bar')
|
1671
1680
|
end
|
1672
1681
|
|
1673
1682
|
get '/bar' do
|
1674
|
-
session[
|
1683
|
+
session['secret']
|
1675
1684
|
end
|
1676
1685
|
```
|
1677
1686
|
|
@@ -1712,7 +1721,7 @@ si le client a déjà la version courante dans son cache :
|
|
1712
1721
|
|
1713
1722
|
``` ruby
|
1714
1723
|
get '/article/:id' do
|
1715
|
-
@article = Article.find params[
|
1724
|
+
@article = Article.find params['id']
|
1716
1725
|
last_modified @article.updated_at
|
1717
1726
|
etag @article.sha1
|
1718
1727
|
erb :article
|
@@ -2098,13 +2107,13 @@ set :protection, :session => true
|
|
2098
2107
|
|
2099
2108
|
<p>Désactivé par défaut.</p></dd>
|
2100
2109
|
|
2101
|
-
<dt>
|
2110
|
+
<dt>add_charset</dt>
|
2102
2111
|
<dd><p>types mime pour lesquels la méthode <tt>content_type</tt> va
|
2103
2112
|
automatiquement ajouter l’information du <tt>charset</tt>.</p>
|
2104
2113
|
|
2105
2114
|
<p>Vous devriez lui ajouter des valeurs plutôt que de l’écraser :</p>
|
2106
2115
|
|
2107
|
-
<pre>settings.
|
2116
|
+
<pre>settings.add_charset >> "application/foobar"</pre></dd>
|
2108
2117
|
|
2109
2118
|
<dt>app_file</dt>
|
2110
2119
|
<dd><p>chemin pour le fichier de l’application principale, utilisé pour
|
@@ -2283,7 +2292,7 @@ variable Rack `sinatra.error` :
|
|
2283
2292
|
|
2284
2293
|
``` ruby
|
2285
2294
|
error do
|
2286
|
-
'Désolé mais une méchante erreur est survenue - ' + env['sinatra.error'].
|
2295
|
+
'Désolé mais une méchante erreur est survenue - ' + env['sinatra.error'].message
|
2287
2296
|
end
|
2288
2297
|
```
|
2289
2298
|
|
@@ -2334,7 +2343,7 @@ Sinatra installe pour vous quelques gestionnaires `not_found` et
|
|
2334
2343
|
|
2335
2344
|
## Les Middlewares Rack
|
2336
2345
|
|
2337
|
-
Sinatra tourne avec [Rack](http://rack.
|
2346
|
+
Sinatra tourne avec [Rack](http://rack.github.io/), une interface standard
|
2338
2347
|
et minimale pour les web frameworks Ruby. Un des points forts de Rack est le
|
2339
2348
|
support de ce que l'on appelle des "middlewares" -- composant qui vient se
|
2340
2349
|
situer entre le serveur et votre application, et dont le but est de
|
@@ -2357,7 +2366,7 @@ end
|
|
2357
2366
|
```
|
2358
2367
|
|
2359
2368
|
La sémantique de `use` est identique à celle définie dans le DSL de
|
2360
|
-
[Rack::Builder](http://
|
2369
|
+
[Rack::Builder](http://rubydoc.info/github/rack/rack/master/Rack/Builder)
|
2361
2370
|
(le plus souvent utilisé dans un fichier rackup). Par exemple, la méthode
|
2362
2371
|
`use` accepte divers arguments ainsi que des blocs :
|
2363
2372
|
|
@@ -2385,10 +2394,10 @@ recommandé :
|
|
2385
2394
|
|
2386
2395
|
``` ruby
|
2387
2396
|
require 'mon_application_sinatra'
|
2388
|
-
require '
|
2397
|
+
require 'minitest/autorun'
|
2389
2398
|
require 'rack/test'
|
2390
2399
|
|
2391
|
-
class MonTest < Test
|
2400
|
+
class MonTest < Minitest::Test
|
2392
2401
|
include Rack::Test::Methods
|
2393
2402
|
|
2394
2403
|
def app
|
@@ -2449,7 +2458,20 @@ pour transformer la plupart des applications de haut niveau en un composant
|
|
2449
2458
|
`Sinatra::Base` est une page blanche. La plupart des options sont
|
2450
2459
|
désactivées par défaut, y compris le serveur intégré. Reportez-vous à
|
2451
2460
|
[Options et Configuration](http://sinatra.github.com/configuration.html)
|
2452
|
-
pour plus d'informations sur les options et leur fonctionnement.
|
2461
|
+
pour plus d'informations sur les options et leur fonctionnement. Si vous
|
2462
|
+
souhaitez un comportement plus proche de celui obtenu lorsque vous définissez
|
2463
|
+
votre application au niveau supérieur (aussi connu sous le nom de style
|
2464
|
+
Classique), vous pouvez créer une classe héritant de `Sinatra::Application`.
|
2465
|
+
|
2466
|
+
``` ruby
|
2467
|
+
require 'sinatra/base'
|
2468
|
+
|
2469
|
+
class MyApp < Sinatra::Application
|
2470
|
+
get '/' do
|
2471
|
+
'Bonjour le monde !'
|
2472
|
+
end
|
2473
|
+
end
|
2474
|
+
```
|
2453
2475
|
|
2454
2476
|
### Style modulaire vs. style classique
|
2455
2477
|
|
@@ -2465,14 +2487,56 @@ classique et style modulaire.
|
|
2465
2487
|
Si vous passez d'un style à l'autre, souvenez-vous des quelques différences
|
2466
2488
|
mineures en ce qui concerne les paramètres par défaut :
|
2467
2489
|
|
2468
|
-
|
2490
|
+
<table>
|
2491
|
+
<tr>
|
2492
|
+
<th>Paramètre</th>
|
2493
|
+
<th>Classique</th>
|
2494
|
+
<th>Modulaire</th>
|
2495
|
+
<th>Modulaire</th>
|
2496
|
+
</tr>
|
2497
|
+
|
2498
|
+
<tr>
|
2499
|
+
<td>app_file</td>
|
2500
|
+
<td>fichier chargeant sinatra</td>
|
2501
|
+
<td>fichier héritant de Sinatra::Base</td>
|
2502
|
+
<td>fichier héritant de Sinatra::Application</td>
|
2503
|
+
</tr>
|
2504
|
+
|
2505
|
+
<tr>
|
2506
|
+
<td>run</td>
|
2507
|
+
<td>$0 == app_file</td>
|
2508
|
+
<td>false</td>
|
2509
|
+
<td>false</td>
|
2510
|
+
</tr>
|
2511
|
+
|
2512
|
+
<tr>
|
2513
|
+
<td>logging</td>
|
2514
|
+
<td>true</td>
|
2515
|
+
<td>false</td>
|
2516
|
+
<td>true</td>
|
2517
|
+
</tr>
|
2469
2518
|
|
2470
|
-
|
2471
|
-
|
2472
|
-
|
2473
|
-
|
2474
|
-
|
2475
|
-
|
2519
|
+
<tr>
|
2520
|
+
<td>method_override</td>
|
2521
|
+
<td>true</td>
|
2522
|
+
<td>false</td>
|
2523
|
+
<td>true</td>
|
2524
|
+
</tr>
|
2525
|
+
|
2526
|
+
<tr>
|
2527
|
+
<td>inline_templates</td>
|
2528
|
+
<td>true</td>
|
2529
|
+
<td>false</td>
|
2530
|
+
<td>true</td>
|
2531
|
+
</tr>
|
2532
|
+
|
2533
|
+
<tr>
|
2534
|
+
<td>static</td>
|
2535
|
+
<td>true</td>
|
2536
|
+
<td>false</td>
|
2537
|
+
<td>true</td>
|
2538
|
+
</tr>
|
2539
|
+
</table>
|
2476
2540
|
|
2477
2541
|
### Servir une application modulaire
|
2478
2542
|
|
@@ -2563,8 +2627,8 @@ class EcranDeConnexion < Sinatra::Base
|
|
2563
2627
|
get('/connexion') { haml :connexion }
|
2564
2628
|
|
2565
2629
|
post('/connexion') do
|
2566
|
-
if params[
|
2567
|
-
session['nom_utilisateur'] = params[
|
2630
|
+
if params['nom'] = 'admin' && params['motdepasse'] = 'admin'
|
2631
|
+
session['nom_utilisateur'] = params['nom']
|
2568
2632
|
else
|
2569
2633
|
redirect '/connexion'
|
2570
2634
|
end
|
@@ -2689,8 +2753,8 @@ class MonApp < Sinatra::Base
|
|
2689
2753
|
# Contexte de la requête pour '/ajouter_route/:nom'
|
2690
2754
|
@value = 42
|
2691
2755
|
|
2692
|
-
settings.get("/#{params[
|
2693
|
-
# Contexte de la requête pour "/#{params[
|
2756
|
+
settings.get("/#{params['nom']}") do
|
2757
|
+
# Contexte de la requête pour "/#{params['nom']}"
|
2694
2758
|
@value # => nil (on est pas au sein de la même requête)
|
2695
2759
|
end
|
2696
2760
|
|
@@ -2915,7 +2979,7 @@ SemVer que SemVerTag.
|
|
2915
2979
|
* [Twitter](http://twitter.com/sinatra)
|
2916
2980
|
* [Mailing List](http://groups.google.com/group/sinatrarb/topics)
|
2917
2981
|
* IRC : [#sinatra](irc://chat.freenode.net/#sinatra) sur http://freenode.net
|
2918
|
-
* [Sinatra Book](
|
2982
|
+
* [Sinatra Book](https://github.com/sinatra/sinatra-book/) Tutoriels et recettes
|
2919
2983
|
* [Sinatra Recipes](http://recipes.sinatrarb.com/) trucs et astuces rédigés par
|
2920
2984
|
la communauté
|
2921
2985
|
* Documentation API de la [dernière version](http://rubydoc.info/gems/sinatra)
|
data/README.hu.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Sinatra
|
2
2
|
*Fontos megjegyzés: Ez a dokumentum csak egy fordítása az angol nyelvű
|
3
|
-
|
3
|
+
változatnak, és lehet, hogy nem naprakész.*
|
4
4
|
|
5
5
|
A Sinatra egy [DSL](http://en.wikipedia.org/wiki/Domain-specific_language)
|
6
6
|
webalkalmazások Ruby nyelven történő fejlesztéséhez, minimális
|
@@ -56,8 +56,8 @@ hash-ből érhetünk el:
|
|
56
56
|
```ruby
|
57
57
|
get '/hello/:name' do
|
58
58
|
# illeszkedik a "GET /hello/foo" és a "GET /hello/bar" útvonalakra
|
59
|
-
# ekkor params[
|
60
|
-
"Helló #{params[
|
59
|
+
# ekkor params['name'] értéke 'foo' vagy 'bar' lesz
|
60
|
+
"Helló #{params['name']}!"
|
61
61
|
end
|
62
62
|
```
|
63
63
|
|
@@ -71,25 +71,25 @@ is el tudod érni:
|
|
71
71
|
```
|
72
72
|
|
73
73
|
Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
|
74
|
-
`params[
|
74
|
+
`params['splat']` tömbön keresztül tudunk elérni.
|
75
75
|
|
76
76
|
```ruby
|
77
77
|
get '/say/*/to/*' do
|
78
78
|
# illeszkedik a /say/hello/to/world mintára
|
79
|
-
params[
|
79
|
+
params['splat'] # => ["hello", "world"]
|
80
80
|
end
|
81
81
|
|
82
82
|
get '/download/*.*' do
|
83
83
|
# illeszkedik a /download/path/to/file.xml mintára
|
84
|
-
params[
|
84
|
+
params['splat'] # => ["path/to/file", "xml"]
|
85
85
|
end
|
86
86
|
```
|
87
87
|
|
88
88
|
Reguláris kifejezéseket is felvehetünk az útvonalba:
|
89
89
|
|
90
90
|
```ruby
|
91
|
-
get
|
92
|
-
"Helló, #{params[
|
91
|
+
get /\A\/hello\/([\w]+)\z/ do
|
92
|
+
"Helló, #{params['captures'].first}!"
|
93
93
|
end
|
94
94
|
```
|
95
95
|
|
@@ -106,7 +106,7 @@ tervezhetők, így például az user agent karakterláncot alapul véve:
|
|
106
106
|
|
107
107
|
```ruby
|
108
108
|
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
|
109
|
-
"A Songbird #{params[
|
109
|
+
"A Songbird #{params['agent'][0]} verzióját használod"
|
110
110
|
end
|
111
111
|
|
112
112
|
get '/foo' do
|
@@ -122,7 +122,7 @@ mégpedig a :public_folder kapcsoló beállításával:
|
|
122
122
|
|
123
123
|
set :public_folder, File.dirname(__FILE__) + '/static'
|
124
124
|
|
125
|
-
Fontos
|
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
|
127
127
|
`http://example.com/css/style.css` URL-en lesz elérhető.
|
128
128
|
|
@@ -244,7 +244,7 @@ változók közvetlenül elérhetőek lesznek a sablonokban:
|
|
244
244
|
|
245
245
|
```ruby
|
246
246
|
get '/:id' do
|
247
|
-
@foo = Foo.find(params[
|
247
|
+
@foo = Foo.find(params['id'])
|
248
248
|
haml '%h1= @foo.name'
|
249
249
|
end
|
250
250
|
```
|
@@ -253,7 +253,7 @@ De megadhatod egy lokális változókat tartalmazó explicit hash-ben is:
|
|
253
253
|
|
254
254
|
```ruby
|
255
255
|
get '/:id' do
|
256
|
-
foo = Foo.find(params[
|
256
|
+
foo = Foo.find(params['id'])
|
257
257
|
haml '%h1= foo.name', :locals => { :foo => foo }
|
258
258
|
end
|
259
259
|
```
|
@@ -332,7 +332,7 @@ használni:
|
|
332
332
|
end
|
333
333
|
|
334
334
|
get '/:name' do
|
335
|
-
bar(params[
|
335
|
+
bar(params['name'])
|
336
336
|
end
|
337
337
|
```
|
338
338
|
|
@@ -351,7 +351,7 @@ az útvonalakban és a sablonokban is:
|
|
351
351
|
|
352
352
|
get '/foo/*' do
|
353
353
|
@note #=> 'Szeva!'
|
354
|
-
params[
|
354
|
+
params['splat'] #=> 'bar/baz'
|
355
355
|
end
|
356
356
|
```
|
357
357
|
|
@@ -388,7 +388,7 @@ a `pass` függvényhívással:
|
|
388
388
|
|
389
389
|
```ruby
|
390
390
|
get '/guess/:who' do
|
391
|
-
pass unless params[
|
391
|
+
pass unless params['who'] == 'Frici'
|
392
392
|
"Elkaptál!"
|
393
393
|
end
|
394
394
|
|
@@ -454,7 +454,7 @@ előszűrő kivételt vált ki. A kivétel objektum lehívható a
|
|
454
454
|
|
455
455
|
```ruby
|
456
456
|
error do
|
457
|
-
'Elnézést, de valami szörnyű hiba lépett fel - ' + env['sinatra.error'].
|
457
|
+
'Elnézést, de valami szörnyű hiba lépett fel - ' + env['sinatra.error'].message
|
458
458
|
end
|
459
459
|
```
|
460
460
|
|
@@ -495,7 +495,7 @@ bevezetéséhez:
|
|
495
495
|
## Rack Middleware
|
496
496
|
|
497
497
|
A Sinatra egy Ruby keretrendszerek számára kifejlesztett egyszerű és szabványos
|
498
|
-
interfészre, a [Rack](http://rack.
|
498
|
+
interfészre, a [Rack](http://rack.github.io/) -re épül. A Rack fejlesztői
|
499
499
|
szempontból egyik legérdekesebb jellemzője, hogy támogatja az úgynevezett
|
500
500
|
"middleware" elnevezésű komponenseket, amelyek beékelődnek a szerver és az
|
501
501
|
alkalmazás közé, így képesek megfigyelni és/vagy módosítani a HTTP
|
@@ -518,7 +518,7 @@ A Sinatra keretrendszerben gyerekjáték a Rack middleware-ek behúzása a
|
|
518
518
|
```
|
519
519
|
|
520
520
|
A `use` metódus szemantikája megegyezik a
|
521
|
-
[Rack::Builder](http://
|
521
|
+
[Rack::Builder](http://rubydoc.info/github/rack/rack/master/Rack/Builder) DSL-ben
|
522
522
|
használt +use+ metóduséval (az említett DSL-t leginkább rackup állományokban
|
523
523
|
használják). Hogy egy példát említsünk, a `use` metódus elfogad
|
524
524
|
változókat és blokkokat egyaránt, akár kombinálva is ezeket:
|
@@ -545,7 +545,7 @@ könyvtárat ajánljuk:
|
|
545
545
|
require 'my_sinatra_app'
|
546
546
|
require 'rack/test'
|
547
547
|
|
548
|
-
class MyAppTest < Test
|
548
|
+
class MyAppTest < Minitest::Test
|
549
549
|
include Rack::Test::Methods
|
550
550
|
|
551
551
|
def app
|