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.

Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS.md +77 -0
  3. data/CHANGES +30 -0
  4. data/Gemfile +5 -5
  5. data/README.de.md +186 -56
  6. data/README.es.md +76 -76
  7. data/README.fr.md +120 -56
  8. data/README.hu.md +19 -19
  9. data/README.ja.md +44 -46
  10. data/README.ko.md +163 -67
  11. data/README.md +151 -127
  12. data/README.pt-br.md +905 -144
  13. data/README.pt-pt.md +17 -17
  14. data/README.ru.md +88 -52
  15. data/README.zh.md +76 -68
  16. data/lib/sinatra.rb +0 -1
  17. data/lib/sinatra/base.rb +21 -15
  18. data/lib/sinatra/show_exceptions.rb +10 -4
  19. data/lib/sinatra/version.rb +1 -1
  20. data/sinatra.gemspec +1 -1
  21. data/test/asciidoctor_test.rb +2 -2
  22. data/test/base_test.rb +1 -5
  23. data/test/builder_test.rb +2 -2
  24. data/test/coffee_test.rb +8 -2
  25. data/test/compile_test.rb +1 -1
  26. data/test/contest.rb +3 -12
  27. data/test/creole_test.rb +2 -2
  28. data/test/delegator_test.rb +1 -1
  29. data/test/encoding_test.rb +1 -1
  30. data/test/erb_test.rb +1 -1
  31. data/test/extensions_test.rb +1 -1
  32. data/test/filter_test.rb +2 -2
  33. data/test/haml_test.rb +2 -2
  34. data/test/helper.rb +8 -7
  35. data/test/helpers_test.rb +6 -6
  36. data/test/integration_test.rb +3 -3
  37. data/test/less_test.rb +2 -2
  38. data/test/liquid_test.rb +3 -3
  39. data/test/mapped_error_test.rb +5 -5
  40. data/test/markaby_test.rb +2 -2
  41. data/test/markdown_test.rb +6 -3
  42. data/test/mediawiki_test.rb +2 -2
  43. data/test/middleware_test.rb +1 -1
  44. data/test/nokogiri_test.rb +2 -2
  45. data/test/rabl_test.rb +2 -2
  46. data/test/rack_test.rb +1 -1
  47. data/test/radius_test.rb +2 -2
  48. data/test/rdoc_test.rb +4 -4
  49. data/test/readme_test.rb +1 -1
  50. data/test/request_test.rb +4 -1
  51. data/test/response_test.rb +1 -1
  52. data/test/result_test.rb +2 -2
  53. data/test/route_added_hook_test.rb +1 -1
  54. data/test/routing_test.rb +7 -7
  55. data/test/sass_test.rb +3 -3
  56. data/test/scss_test.rb +2 -2
  57. data/test/server_test.rb +10 -2
  58. data/test/settings_test.rb +4 -4
  59. data/test/sinatra_test.rb +1 -1
  60. data/test/slim_test.rb +2 -2
  61. data/test/static_test.rb +2 -2
  62. data/test/streaming_test.rb +2 -2
  63. data/test/stylus_test.rb +2 -2
  64. data/test/templates_test.rb +3 -3
  65. data/test/textile_test.rb +2 -2
  66. data/test/wlang_test.rb +1 -1
  67. data/test/yajl_test.rb +2 -2
  68. metadata +10 -11
  69. data/AUTHORS +0 -61
@@ -22,7 +22,15 @@ gem install sinatra
22
22
  ruby myapp.rb
23
23
  ~~~~
24
24
 
25
- 在该地址查看: [localhost:4567](http://localhost:4567)
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[:name] 的值是 'foo' 或者 'bar'
74
- "Hello #{params[:name]}!"
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[:splat]`数组获得。
94
+ 路由范式也可以包含通配符参数, 可以通过`params['splat']`数组获得。
87
95
 
88
96
  ~~~~ ruby
89
97
  get '/say/*/to/*' do
90
98
  # 匹配 /say/hello/to/world
91
- params[:splat] # => ["hello", "world"]
99
+ params['splat'] # => ["hello", "world"]
92
100
  end
93
101
 
94
102
  get '/download/*.*' do
95
103
  # 匹配 /download/path/to/file.xml
96
- params[:splat] # => ["path/to/file", "xml"]
104
+ params['splat'] # => ["path/to/file", "xml"]
97
105
  end
98
106
  ~~~~
99
107
 
100
108
  通过正则表达式匹配的路由:
101
109
 
102
110
  ~~~~ ruby
103
- get %r{/hello/([\w]+)} do
104
- "Hello, #{params[:captures].first}!"
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[:agent][0]}"
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以渲染 HAML 模板:
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
- 渲染 `./views/index.haml`。
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以渲染 erubis 模板:
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来渲染 `./views/index.erb`。
336
+ 使用Erubis来填充 `./views/index.erb`。
329
337
 
330
338
  ### Builder 模板
331
339
 
332
- 需要引入 `builder` gem/library 以渲染 builder templates:
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 以渲染 nokogiri 模板:
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 以渲染 Sass 模板:
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 来渲染 Scss templates:
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 以渲染 Less 模板:
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 来渲染 Liquid 模板:
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 以渲染 Markdown 模板:
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来渲染 `./views/index.md` 。
530
+ 使用BlueCloth来填充 `./views/index.md` 。
523
531
 
524
532
  ### Textile 模板
525
533
 
526
- 需要引入 `RedCloth` gem/library 以渲染 Textile 模板:
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
- 这将会渲染 `./views/index.textile` 并使用 `./views/layout.erb`
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 以渲染RDoc模板:
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 以渲染 Radius 模板:
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以渲染Markaby模板:
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 来渲染 Slim 模板:
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 来渲染 Creole 模板:
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[:id])
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[:id])
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[:splat] #=> 'bar/baz'
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[:last_slug] = slug
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[:name])
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[:value].inspect
940
+ "value = " << session['value'].inspect
933
941
  end
934
942
 
935
943
  get '/:value' do
936
- session[:value] = params[:value]
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[:value].inspect
957
+ "value = " << session['value'].inspect
950
958
  end
951
959
 
952
960
  get '/:value' do
953
- session[:value] = params[:value]
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[:who] == 'Frank'
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[:secret] = 'foo'
1149
+ session['secret'] = 'foo'
1142
1150
  redirect to('/bar')
1143
1151
  end
1144
1152
 
1145
1153
  get '/bar' do
1146
- session[:secret]
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[:id]
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>add_charsets</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.add_charsets << "application/foobar"</tt>
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'].name
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.rubyforge.org/), 一个面向Ruby
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://rack.rubyforge.org/doc/classes/Rack/Builder.html)
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 'test/unit'
1704
+ require 'minitest/autorun'
1697
1705
  require 'rack/test'
1698
1706
 
1699
- class MyAppTest < Test::Unit::TestCase
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[:name] = 'admin' and params[:password] = 'admin'
1870
- session['user_name'] = params[:name]
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\` 对象,或者调用渲染方法比如 \`erb\` 或者
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[:name]}") do
1950
- # 针对 "/#{params[:name]}" 的请求变量域
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宝典](http://sinatra-book.gittr.com/) Cookbook教程
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)