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.zh.md
CHANGED
@@ -22,7 +22,15 @@ gem install sinatra
|
|
22
22
|
ruby myapp.rb
|
23
23
|
~~~~
|
24
24
|
|
25
|
-
在该地址查看:
|
25
|
+
在该地址查看: http://localhost:4567
|
26
|
+
|
27
|
+
这个时候访问地址将绑定到 127.0.0.1 和 localhost ,如果使用 vagrant 进行开发,访问会失败,此时就需要进行 ip 绑定了:
|
28
|
+
|
29
|
+
~~~~ shell
|
30
|
+
ruby myapp.rb -o 0.0.0.0
|
31
|
+
~~~~
|
32
|
+
|
33
|
+
```-o``` 这个参数就是进行 Listening 时候监听的绑定,能从通过 IP、127.0.0.1、localhost + 端口号进行访问。
|
26
34
|
|
27
35
|
安装Sintra后,最好再运行`gem install thin`安装Thin。这样,Sinatra会优先选择Thin作为服务器。
|
28
36
|
|
@@ -70,8 +78,8 @@ end
|
|
70
78
|
~~~~ ruby
|
71
79
|
get '/hello/:name' do
|
72
80
|
# 匹配 "GET /hello/foo" 和 "GET /hello/bar"
|
73
|
-
# params[
|
74
|
-
"Hello #{params[
|
81
|
+
# params['name'] 的值是 'foo' 或者 'bar'
|
82
|
+
"Hello #{params['name']}!"
|
75
83
|
end
|
76
84
|
~~~~
|
77
85
|
|
@@ -83,25 +91,25 @@ get '/hello/:name' do |n|
|
|
83
91
|
end
|
84
92
|
~~~~
|
85
93
|
|
86
|
-
路由范式也可以包含通配符参数, 可以通过`params[
|
94
|
+
路由范式也可以包含通配符参数, 可以通过`params['splat']`数组获得。
|
87
95
|
|
88
96
|
~~~~ ruby
|
89
97
|
get '/say/*/to/*' do
|
90
98
|
# 匹配 /say/hello/to/world
|
91
|
-
params[
|
99
|
+
params['splat'] # => ["hello", "world"]
|
92
100
|
end
|
93
101
|
|
94
102
|
get '/download/*.*' do
|
95
103
|
# 匹配 /download/path/to/file.xml
|
96
|
-
params[
|
104
|
+
params['splat'] # => ["path/to/file", "xml"]
|
97
105
|
end
|
98
106
|
~~~~
|
99
107
|
|
100
108
|
通过正则表达式匹配的路由:
|
101
109
|
|
102
110
|
~~~~ ruby
|
103
|
-
get
|
104
|
-
"Hello, #{params[
|
111
|
+
get /\A\/hello\/([\w]+)\z/ do
|
112
|
+
"Hello, #{params['captures'].first}!"
|
105
113
|
end
|
106
114
|
~~~~
|
107
115
|
|
@@ -119,7 +127,7 @@ end
|
|
119
127
|
|
120
128
|
~~~~ ruby
|
121
129
|
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
|
122
|
-
"你正在使用Songbird,版本是 #{params[
|
130
|
+
"你正在使用Songbird,版本是 #{params['agent'][0]}"
|
123
131
|
end
|
124
132
|
|
125
133
|
get '/foo' do
|
@@ -254,13 +262,13 @@ set :public_folder, File.dirname(__FILE__) + '/static'
|
|
254
262
|
set :views, File.dirname(__FILE__) + '/templates'
|
255
263
|
~~~~
|
256
264
|
|
257
|
-
|
258
|
-
(在这种情况下,使用 `:'subdir/template'`)。
|
259
|
-
|
265
|
+
重要提示:你只可以通过符号引用模板, 即使它们在子目录下
|
266
|
+
(在这种情况下,使用 `:'subdir/template'`)。 如果你不用符号、而用字符串的话,
|
267
|
+
填充方法会只把你传入的字符串当成内容显示出来,而不调用模板。
|
260
268
|
|
261
269
|
### Haml模板
|
262
270
|
|
263
|
-
需要引入 `haml` gem/library
|
271
|
+
需要引入 `haml` gem/library以填充 HAML 模板:
|
264
272
|
|
265
273
|
~~~~ ruby
|
266
274
|
# 你需要在你的应用中引入 haml
|
@@ -271,7 +279,7 @@ get '/' do
|
|
271
279
|
end
|
272
280
|
~~~~
|
273
281
|
|
274
|
-
|
282
|
+
填充 `./views/index.haml`。
|
275
283
|
|
276
284
|
[Haml的选项](http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options)
|
277
285
|
可以通过Sinatra的配置全局设定, 参见
|
@@ -301,7 +309,7 @@ end
|
|
301
309
|
|
302
310
|
### Erubis
|
303
311
|
|
304
|
-
需要引入 `erubis` gem/library
|
312
|
+
需要引入 `erubis` gem/library以填充 erubis 模板:
|
305
313
|
|
306
314
|
~~~~ ruby
|
307
315
|
# 你需要在你的应用中引入 erubis
|
@@ -325,11 +333,11 @@ get '/' do
|
|
325
333
|
end
|
326
334
|
~~~~
|
327
335
|
|
328
|
-
使用Erubis
|
336
|
+
使用Erubis来填充 `./views/index.erb`。
|
329
337
|
|
330
338
|
### Builder 模板
|
331
339
|
|
332
|
-
需要引入 `builder` gem/library
|
340
|
+
需要引入 `builder` gem/library 以填充 builder templates:
|
333
341
|
|
334
342
|
~~~~ ruby
|
335
343
|
# 需要在你的应用中引入builder
|
@@ -344,7 +352,7 @@ end
|
|
344
352
|
|
345
353
|
### Nokogiri 模板
|
346
354
|
|
347
|
-
需要引入 `nokogiri` gem/library
|
355
|
+
需要引入 `nokogiri` gem/library 以填充 nokogiri 模板:
|
348
356
|
|
349
357
|
~~~~ ruby
|
350
358
|
# 需要在你的应用中引入 nokogiri
|
@@ -359,7 +367,7 @@ end
|
|
359
367
|
|
360
368
|
### Sass 模板
|
361
369
|
|
362
|
-
需要引入 `haml` 或者 `sass` gem/library
|
370
|
+
需要引入 `haml` 或者 `sass` gem/library 以填充 Sass 模板:
|
363
371
|
|
364
372
|
~~~~ ruby
|
365
373
|
# 需要在你的应用中引入 haml 或者 sass
|
@@ -388,7 +396,7 @@ end
|
|
388
396
|
|
389
397
|
### Scss 模板
|
390
398
|
|
391
|
-
需要引入 `haml` 或者 `sass` gem/library
|
399
|
+
需要引入 `haml` 或者 `sass` gem/library 来填充 Scss templates:
|
392
400
|
|
393
401
|
~~~~ ruby
|
394
402
|
# 需要在你的应用中引入 haml 或者 sass
|
@@ -416,7 +424,7 @@ end
|
|
416
424
|
|
417
425
|
### Less 模板
|
418
426
|
|
419
|
-
需要引入 `less` gem/library
|
427
|
+
需要引入 `less` gem/library 以填充 Less 模板:
|
420
428
|
|
421
429
|
~~~~ ruby
|
422
430
|
# 需要在你的应用中引入 less
|
@@ -431,7 +439,7 @@ end
|
|
431
439
|
|
432
440
|
### Liquid 模板
|
433
441
|
|
434
|
-
需要引入 `liquid` gem/library
|
442
|
+
需要引入 `liquid` gem/library 来填充 Liquid 模板:
|
435
443
|
|
436
444
|
~~~~ ruby
|
437
445
|
# 需要在你的应用中引入 liquid
|
@@ -453,7 +461,7 @@ liquid :index, :locals => { :key => 'value' }
|
|
453
461
|
|
454
462
|
### Markdown 模板
|
455
463
|
|
456
|
-
需要引入 `rdiscount` gem/library
|
464
|
+
需要引入 `rdiscount` gem/library 以填充 Markdown 模板:
|
457
465
|
|
458
466
|
~~~~ ruby
|
459
467
|
# 需要在你的应用中引入rdiscount
|
@@ -467,7 +475,7 @@ end
|
|
467
475
|
这里调用的是 `./views/index.markdown` (`md` 和 `mkd` 也是合理的文件扩展名)。
|
468
476
|
|
469
477
|
在markdown中是不可以调用方法的,也不可以传递 locals给它。
|
470
|
-
|
478
|
+
你因此一般会结合其他的填充引擎来使用它:
|
471
479
|
|
472
480
|
~~~~ ruby
|
473
481
|
erb :overview, :locals => { :text => markdown(:introduction) }
|
@@ -481,7 +489,7 @@ erb :overview, :locals => { :text => markdown(:introduction) }
|
|
481
489
|
~~~~
|
482
490
|
|
483
491
|
既然你不能在Markdown中调用Ruby,你不能使用Markdown编写的布局。
|
484
|
-
|
492
|
+
不过,使用其他填充引擎作为模版的布局是可能的,
|
485
493
|
通过传递`:layout_engine`选项:
|
486
494
|
|
487
495
|
~~~~ ruby
|
@@ -519,11 +527,11 @@ get '/' do
|
|
519
527
|
end
|
520
528
|
~~~~
|
521
529
|
|
522
|
-
使用BlueCloth
|
530
|
+
使用BlueCloth来填充 `./views/index.md` 。
|
523
531
|
|
524
532
|
### Textile 模板
|
525
533
|
|
526
|
-
需要引入 `RedCloth` gem/library
|
534
|
+
需要引入 `RedCloth` gem/library 以填充 Textile 模板:
|
527
535
|
|
528
536
|
~~~~ ruby
|
529
537
|
# 在你的应用中引入redcloth
|
@@ -537,7 +545,7 @@ end
|
|
537
545
|
这里调用的是 `./views/index.textile`。
|
538
546
|
|
539
547
|
在textile中是不可以调用方法的,也不可以传递 locals给它。
|
540
|
-
|
548
|
+
你因此一般会结合其他的填充引擎来使用它:
|
541
549
|
|
542
550
|
~~~~ ruby
|
543
551
|
erb :overview, :locals => { :text => textile(:introduction) }
|
@@ -551,7 +559,7 @@ erb :overview, :locals => { :text => textile(:introduction) }
|
|
551
559
|
~~~~
|
552
560
|
|
553
561
|
既然你不能在Textile中调用Ruby,你不能使用Textile编写的布局。
|
554
|
-
|
562
|
+
不过,使用其他填充引擎作为模版的布局是可能的,
|
555
563
|
通过传递`:layout_engine`选项:
|
556
564
|
|
557
565
|
~~~~ ruby
|
@@ -560,7 +568,7 @@ get '/' do
|
|
560
568
|
end
|
561
569
|
~~~~
|
562
570
|
|
563
|
-
|
571
|
+
这将会填充 `./views/index.textile` 并使用 `./views/layout.erb`
|
564
572
|
作为布局。
|
565
573
|
|
566
574
|
请记住你可以全局设定这个选项:
|
@@ -578,7 +586,7 @@ end
|
|
578
586
|
|
579
587
|
### RDoc 模板
|
580
588
|
|
581
|
-
需要引入 `RDoc` gem/library
|
589
|
+
需要引入 `RDoc` gem/library 以填充RDoc模板:
|
582
590
|
|
583
591
|
~~~~ ruby
|
584
592
|
# 需要在你的应用中引入rdoc/markup/to_html
|
@@ -593,7 +601,7 @@ end
|
|
593
601
|
这里调用的是 `./views/index.rdoc`。
|
594
602
|
|
595
603
|
在rdoc中是不可以调用方法的,也不可以传递locals给它。
|
596
|
-
|
604
|
+
你因此一般会结合其他的填充引擎来使用它:
|
597
605
|
|
598
606
|
~~~~ ruby
|
599
607
|
erb :overview, :locals => { :text => rdoc(:introduction) }
|
@@ -607,7 +615,7 @@ erb :overview, :locals => { :text => rdoc(:introduction) }
|
|
607
615
|
~~~~
|
608
616
|
|
609
617
|
既然你不能在RDoc中调用Ruby,你不能使用RDoc编写的布局。
|
610
|
-
|
618
|
+
不过,使用其他填充引擎作为模版的布局是可能的,
|
611
619
|
通过传递`:layout_engine`选项:
|
612
620
|
|
613
621
|
~~~~ ruby
|
@@ -633,7 +641,7 @@ end
|
|
633
641
|
|
634
642
|
### Radius 模板
|
635
643
|
|
636
|
-
需要引入 `radius` gem/library
|
644
|
+
需要引入 `radius` gem/library 以填充 Radius 模板:
|
637
645
|
|
638
646
|
~~~~ ruby
|
639
647
|
# 需要在你的应用中引入radius
|
@@ -655,7 +663,7 @@ radius :index, :locals => { :key => 'value' }
|
|
655
663
|
|
656
664
|
### Markaby 模板
|
657
665
|
|
658
|
-
需要引入`markaby` gem/library
|
666
|
+
需要引入`markaby` gem/library以填充Markaby模板:
|
659
667
|
|
660
668
|
~~~~ ruby
|
661
669
|
#需要在你的应用中引入 markaby
|
@@ -678,7 +686,7 @@ end
|
|
678
686
|
|
679
687
|
### Slim 模板
|
680
688
|
|
681
|
-
需要引入 `slim` gem/library
|
689
|
+
需要引入 `slim` gem/library 来填充 Slim 模板:
|
682
690
|
|
683
691
|
~~~~ ruby
|
684
692
|
# 需要在你的应用中引入 slim
|
@@ -693,7 +701,7 @@ end
|
|
693
701
|
|
694
702
|
### Creole 模板
|
695
703
|
|
696
|
-
需要引入 `creole` gem/library
|
704
|
+
需要引入 `creole` gem/library 来填充 Creole 模板:
|
697
705
|
|
698
706
|
~~~~ ruby
|
699
707
|
# 需要在你的应用中引入 creole
|
@@ -751,7 +759,7 @@ end
|
|
751
759
|
|
752
760
|
~~~~ ruby
|
753
761
|
get '/:id' do
|
754
|
-
@foo = Foo.find(params[
|
762
|
+
@foo = Foo.find(params['id'])
|
755
763
|
haml '%h1= @foo.name'
|
756
764
|
end
|
757
765
|
~~~~
|
@@ -760,12 +768,12 @@ end
|
|
760
768
|
|
761
769
|
~~~~ ruby
|
762
770
|
get '/:id' do
|
763
|
-
foo = Foo.find(params[
|
771
|
+
foo = Foo.find(params['id'])
|
764
772
|
haml '%h1= foo.name', :locals => { :foo => foo }
|
765
773
|
end
|
766
774
|
~~~~
|
767
775
|
|
768
|
-
|
776
|
+
典型的使用情况是在别的模板中按照局部模板的方式来填充。
|
769
777
|
|
770
778
|
### 内联模板
|
771
779
|
|
@@ -810,7 +818,7 @@ get '/' do
|
|
810
818
|
end
|
811
819
|
~~~~
|
812
820
|
|
813
|
-
如果存在名为“layout
|
821
|
+
如果存在名为“layout”的模板,该模板会在每个模板填充的时候被使用。
|
814
822
|
你可以单独地通过传送 `:layout => false`来禁用,
|
815
823
|
或者通过`set :haml, :layout => false`来禁用他们。
|
816
824
|
|
@@ -832,7 +840,7 @@ Tilt.register :tt, Tilt[:textile]
|
|
832
840
|
|
833
841
|
### 添加你自己的模版引擎
|
834
842
|
|
835
|
-
首先,通过Tilt
|
843
|
+
首先,通过Tilt注册你自己的引擎,然后创建一个填充方法:
|
836
844
|
|
837
845
|
~~~~ ruby
|
838
846
|
Tilt.register :myat, MyAwesomeTemplateEngine
|
@@ -863,7 +871,7 @@ end
|
|
863
871
|
|
864
872
|
get '/foo/*' do
|
865
873
|
@note #=> 'Hi!'
|
866
|
-
params[
|
874
|
+
params['splat'] #=> 'bar/baz'
|
867
875
|
end
|
868
876
|
~~~~
|
869
877
|
|
@@ -888,7 +896,7 @@ before '/protected/*' do
|
|
888
896
|
end
|
889
897
|
|
890
898
|
after '/create/:slug' do |slug|
|
891
|
-
session[
|
899
|
+
session['last_slug'] = slug
|
892
900
|
end
|
893
901
|
~~~~
|
894
902
|
|
@@ -916,7 +924,7 @@ helpers do
|
|
916
924
|
end
|
917
925
|
|
918
926
|
get '/:name' do
|
919
|
-
bar(params[
|
927
|
+
bar(params['name'])
|
920
928
|
end
|
921
929
|
~~~~
|
922
930
|
|
@@ -929,11 +937,11 @@ Session被用来在请求之间保持状态。如果被激活,每一个用户
|
|
929
937
|
enable :sessions
|
930
938
|
|
931
939
|
get '/' do
|
932
|
-
"value = " << session[
|
940
|
+
"value = " << session['value'].inspect
|
933
941
|
end
|
934
942
|
|
935
943
|
get '/:value' do
|
936
|
-
session[
|
944
|
+
session['value'] = params['value']
|
937
945
|
end
|
938
946
|
~~~~
|
939
947
|
|
@@ -946,11 +954,11 @@ end
|
|
946
954
|
use Rack::Session::Pool, :expire_after => 2592000
|
947
955
|
|
948
956
|
get '/' do
|
949
|
-
"value = " << session[
|
957
|
+
"value = " << session['value'].inspect
|
950
958
|
end
|
951
959
|
|
952
960
|
get '/:value' do
|
953
|
-
session[
|
961
|
+
session['value'] = params['value']
|
954
962
|
end
|
955
963
|
~~~~
|
956
964
|
|
@@ -992,7 +1000,7 @@ halt 402, {'Content-Type' => 'text/plain'}, 'revenge'
|
|
992
1000
|
|
993
1001
|
~~~~ ruby
|
994
1002
|
get '/guess/:who' do
|
995
|
-
pass unless params[
|
1003
|
+
pass unless params['who'] == 'Frank'
|
996
1004
|
'You got me!'
|
997
1005
|
end
|
998
1006
|
|
@@ -1138,12 +1146,12 @@ redirect to('/bar?sum=42')
|
|
1138
1146
|
enable :sessions
|
1139
1147
|
|
1140
1148
|
get '/foo' do
|
1141
|
-
session[
|
1149
|
+
session['secret'] = 'foo'
|
1142
1150
|
redirect to('/bar')
|
1143
1151
|
end
|
1144
1152
|
|
1145
1153
|
get '/bar' do
|
1146
|
-
session[
|
1154
|
+
session['secret']
|
1147
1155
|
end
|
1148
1156
|
~~~~
|
1149
1157
|
|
@@ -1184,7 +1192,7 @@ end
|
|
1184
1192
|
|
1185
1193
|
~~~~ ruby
|
1186
1194
|
get '/article/:id' do
|
1187
|
-
@article = Article.find params[
|
1195
|
+
@article = Article.find params['id']
|
1188
1196
|
last_modified @article.updated_at
|
1189
1197
|
etag @article.sha1
|
1190
1198
|
erb :article
|
@@ -1334,7 +1342,7 @@ end
|
|
1334
1342
|
|
1335
1343
|
### 查找模板文件
|
1336
1344
|
|
1337
|
-
`find_template`
|
1345
|
+
`find_template` 辅助方法被用于在填充时查找模板文件:
|
1338
1346
|
|
1339
1347
|
~~~~ ruby
|
1340
1348
|
find_template settings.views, 'foo', Tilt[:haml] do |file|
|
@@ -1450,7 +1458,7 @@ end
|
|
1450
1458
|
</p>
|
1451
1459
|
</dd>
|
1452
1460
|
|
1453
|
-
<dt>
|
1461
|
+
<dt>add_charset</dt>
|
1454
1462
|
<dd>
|
1455
1463
|
<p>
|
1456
1464
|
设定 <tt>content_type</tt> 辅助方法会 自动加上字符集信息的多媒体类型。
|
@@ -1458,7 +1466,7 @@ end
|
|
1458
1466
|
|
1459
1467
|
<p>
|
1460
1468
|
你应该添加而不是覆盖这个选项:
|
1461
|
-
<tt>settings.
|
1469
|
+
<tt>settings.add_charset << "application/foobar"</tt>
|
1462
1470
|
</p>
|
1463
1471
|
</dd>
|
1464
1472
|
|
@@ -1603,7 +1611,7 @@ end
|
|
1603
1611
|
|
1604
1612
|
~~~~ ruby
|
1605
1613
|
error do
|
1606
|
-
'Sorry there was a nasty error - ' + env['sinatra.error'].
|
1614
|
+
'Sorry there was a nasty error - ' + env['sinatra.error'].message
|
1607
1615
|
end
|
1608
1616
|
~~~~
|
1609
1617
|
|
@@ -1652,7 +1660,7 @@ end
|
|
1652
1660
|
|
1653
1661
|
## Rack 中间件
|
1654
1662
|
|
1655
|
-
Sinatra 依靠 [Rack](http://rack.
|
1663
|
+
Sinatra 依靠 [Rack](http://rack.github.io/), 一个面向Ruby
|
1656
1664
|
web框架的最小标准接口。
|
1657
1665
|
Rack的一个最有趣的面向应用开发者的能力是支持“中间件”——坐落在服务器和你的应用之间,
|
1658
1666
|
监视 并/或 操作HTTP请求/响应以 提供多样类型的常用功能。
|
@@ -1672,7 +1680,7 @@ end
|
|
1672
1680
|
~~~~
|
1673
1681
|
|
1674
1682
|
`use` 的语义和在
|
1675
|
-
[Rack::Builder](http://
|
1683
|
+
[Rack::Builder](http://rubydoc.info/github/rack/rack/master/Rack/Builder)
|
1676
1684
|
DSL(在rack文件中最频繁使用)中定义的完全一样。例如,`use` 方法接受
|
1677
1685
|
多个/可变 参数,包括代码块:
|
1678
1686
|
|
@@ -1693,10 +1701,10 @@ Sinatra的测试可以使用任何基于Rack的测试程序库或者框架来编
|
|
1693
1701
|
|
1694
1702
|
~~~~ ruby
|
1695
1703
|
require 'my_sinatra_app'
|
1696
|
-
require '
|
1704
|
+
require 'minitest/autorun'
|
1697
1705
|
require 'rack/test'
|
1698
1706
|
|
1699
|
-
class MyAppTest < Test
|
1707
|
+
class MyAppTest < Minitest::Test
|
1700
1708
|
include Rack::Test::Methods
|
1701
1709
|
|
1702
1710
|
def app
|
@@ -1866,8 +1874,8 @@ class LoginScreen < Sinatra::Base
|
|
1866
1874
|
get('/login') { haml :login }
|
1867
1875
|
|
1868
1876
|
post('/login') do
|
1869
|
-
if params[
|
1870
|
-
session['user_name'] = params[
|
1877
|
+
if params['name'] = 'admin' and params['password'] = 'admin'
|
1878
|
+
session['user_name'] = params['name']
|
1871
1879
|
else
|
1872
1880
|
redirect '/login'
|
1873
1881
|
end
|
@@ -1935,7 +1943,7 @@ end
|
|
1935
1943
|
|
1936
1944
|
对于每个进入的请求,一个新的应用类的实例会被创建
|
1937
1945
|
所有的处理器代码块在该变量域被运行。在这个变量域中, 你可以访问
|
1938
|
-
\`request\` 和 \`session\`
|
1946
|
+
\`request\` 和 \`session\` 对象,或者调用填充方法比如 \`erb\` 或者
|
1939
1947
|
\`haml\`。你可以在请求变量域当中通过\`settings\`辅助方法
|
1940
1948
|
访问应用变量域:
|
1941
1949
|
|
@@ -1946,8 +1954,8 @@ class MyApp < Sinatra::Base
|
|
1946
1954
|
# 针对 '/define_route/:name' 的请求变量域
|
1947
1955
|
@value = 42
|
1948
1956
|
|
1949
|
-
settings.get("/#{params[
|
1950
|
-
# 针对 "/#{params[
|
1957
|
+
settings.get("/#{params['name']}") do
|
1958
|
+
# 针对 "/#{params['name']}" 的请求变量域
|
1951
1959
|
@value # => nil (并不是相同的请求)
|
1952
1960
|
end
|
1953
1961
|
|
@@ -2149,10 +2157,10 @@ gem 'activerecord', '~> 3.0' # 也许你还需要 ActiveRecord 3.x
|
|
2149
2157
|
- [IRC: \#sinatra](irc://chat.freenode.net/#sinatra) on
|
2150
2158
|
[freenode.net](http://freenode.net)
|
2151
2159
|
|
2152
|
-
- [Sinatra宝典](
|
2160
|
+
- [Sinatra宝典](https://github.com/sinatra/sinatra-book/) Cookbook教程
|
2153
2161
|
|
2154
2162
|
- [Sinatra使用技巧](http://recipes.sinatrarb.com/) 网友贡献的实用技巧
|
2155
|
-
|
2163
|
+
|
2156
2164
|
- [最新版本](http://rubydoc.info/gems/sinatra)API文档;[http://rubydoc.info](http://rubydoc.info)的[当前HEAD](http://rubydoc.info/github/sinatra/sinatra)
|
2157
2165
|
|
2158
2166
|
- [CI服务器](http://travis-ci.org/sinatra/sinatra)
|