sinatra 1.4.4 → 1.4.5
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/CHANGES +19 -2
- data/Gemfile +33 -50
- data/LICENSE +2 -1
- data/README.de.md +2 -3
- data/README.es.md +36 -29
- data/README.fr.md +1 -2
- data/README.ja.md +2726 -0
- data/README.ko.md +1127 -784
- data/README.md +125 -34
- data/README.ru.md +70 -2
- data/README.zh.md +74 -55
- data/Rakefile +1 -1
- data/lib/sinatra/base.rb +17 -7
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +1 -0
- data/test/asciidoctor_test.rb +72 -0
- data/test/helpers_test.rb +3 -3
- data/test/mediawiki_test.rb +68 -0
- data/test/request_test.rb +5 -0
- data/test/routing_test.rb +4 -1
- data/test/sass_test.rb +0 -1
- data/test/scss_test.rb +0 -1
- data/test/static_test.rb +21 -4
- data/test/views/hello.asciidoc +1 -0
- data/test/views/hello.mediawiki +1 -0
- metadata +29 -22
- data/README.jp.md +0 -1141
data/README.zh.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Sinatra
|
2
2
|
|
3
|
-
|
3
|
+
*注:本文档是英文版的翻译,内容更新有可能不及时。
|
4
4
|
如有不一致的地方,请以英文版为准。*
|
5
5
|
|
6
|
-
Sinatra是一个基于Ruby
|
7
|
-
|
6
|
+
Sinatra是一个基于Ruby语言的[DSL](http://en.wikipedia.org/wiki/Domain-specific_language)(
|
7
|
+
领域专属语言),可以轻松、快速的创建web应用。
|
8
8
|
|
9
9
|
~~~~ ruby
|
10
10
|
# myapp.rb
|
@@ -15,7 +15,7 @@ get '/' do
|
|
15
15
|
end
|
16
16
|
~~~~
|
17
17
|
|
18
|
-
安装gem
|
18
|
+
安装gem,然后运行:
|
19
19
|
|
20
20
|
~~~~ shell
|
21
21
|
gem install sinatra
|
@@ -24,33 +24,43 @@ ruby myapp.rb
|
|
24
24
|
|
25
25
|
在该地址查看: [localhost:4567](http://localhost:4567)
|
26
26
|
|
27
|
-
|
27
|
+
安装Sintra后,最好再运行`gem install thin`安装Thin。这样,Sinatra会优先选择Thin作为服务器。
|
28
28
|
|
29
|
-
## 路由
|
29
|
+
## 路由(route)
|
30
30
|
|
31
|
-
在Sinatra
|
32
|
-
|
31
|
+
在Sinatra中,一个路由分为两部分:HTTP方法(GET, POST等)和URL匹配范式。
|
32
|
+
每个路由都有一个要执行的代码块:
|
33
33
|
|
34
34
|
~~~~ ruby
|
35
35
|
get '/' do
|
36
|
-
..
|
36
|
+
.. 显示内容 ..
|
37
37
|
end
|
38
38
|
|
39
39
|
post '/' do
|
40
|
-
..
|
40
|
+
.. 创建内容 ..
|
41
41
|
end
|
42
42
|
|
43
43
|
put '/' do
|
44
|
-
..
|
44
|
+
.. 更新内容 ..
|
45
45
|
end
|
46
46
|
|
47
47
|
delete '/' do
|
48
|
-
..
|
48
|
+
.. 删除内容 ..
|
49
49
|
end
|
50
50
|
|
51
51
|
options '/' do
|
52
|
-
..
|
52
|
+
.. 显示命令列表 ..
|
53
53
|
end
|
54
|
+
|
55
|
+
link '/' do
|
56
|
+
.. 建立某种联系 ..
|
57
|
+
end
|
58
|
+
|
59
|
+
unlink '/' do
|
60
|
+
.. 解除某种联系 ..
|
61
|
+
end
|
62
|
+
|
63
|
+
|
54
64
|
~~~~
|
55
65
|
|
56
66
|
路由按照它们被定义的顺序进行匹配。 第一个与请求匹配的路由会被调用。
|
@@ -133,7 +143,7 @@ get '/', :provides => ['rss', 'atom', 'xml'] do
|
|
133
143
|
end
|
134
144
|
~~~~
|
135
145
|
|
136
|
-
|
146
|
+
你也可以自定义条件:
|
137
147
|
|
138
148
|
~~~~ ruby
|
139
149
|
set(:probability) { |value| condition { rand <= value } }
|
@@ -206,7 +216,7 @@ get all_but("/index") do
|
|
206
216
|
end
|
207
217
|
~~~~
|
208
218
|
|
209
|
-
|
219
|
+
上面的例子可能太繁琐了, 因为它也可以用更简单的方式表述:
|
210
220
|
|
211
221
|
~~~~ ruby
|
212
222
|
get // do
|
@@ -287,7 +297,7 @@ get '/' do
|
|
287
297
|
end
|
288
298
|
~~~~
|
289
299
|
|
290
|
-
|
300
|
+
这里调用的是 `./views/index.erb`
|
291
301
|
|
292
302
|
### Erubis
|
293
303
|
|
@@ -302,7 +312,7 @@ get '/' do
|
|
302
312
|
end
|
303
313
|
~~~~
|
304
314
|
|
305
|
-
|
315
|
+
这里调用的是 `./views/index.erubis`
|
306
316
|
|
307
317
|
使用Erubis代替Erb也是可能的:
|
308
318
|
|
@@ -330,7 +340,7 @@ get '/' do
|
|
330
340
|
end
|
331
341
|
~~~~
|
332
342
|
|
333
|
-
|
343
|
+
这里调用的是 `./views/index.builder`。
|
334
344
|
|
335
345
|
### Nokogiri 模板
|
336
346
|
|
@@ -345,7 +355,7 @@ get '/' do
|
|
345
355
|
end
|
346
356
|
~~~~
|
347
357
|
|
348
|
-
|
358
|
+
这里调用的是 `./views/index.nokogiri`。
|
349
359
|
|
350
360
|
### Sass 模板
|
351
361
|
|
@@ -360,7 +370,7 @@ get '/stylesheet.css' do
|
|
360
370
|
end
|
361
371
|
~~~~
|
362
372
|
|
363
|
-
|
373
|
+
这里调用的是 `./views/stylesheet.sass`。
|
364
374
|
|
365
375
|
[Sass
|
366
376
|
的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
@@ -389,7 +399,7 @@ get '/stylesheet.css' do
|
|
389
399
|
end
|
390
400
|
~~~~
|
391
401
|
|
392
|
-
|
402
|
+
这里调用的是 `./views/stylesheet.scss`。
|
393
403
|
|
394
404
|
[Scss的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
395
405
|
可以通过Sinatra选项全局设定, 参考
|
@@ -417,7 +427,7 @@ get '/stylesheet.css' do
|
|
417
427
|
end
|
418
428
|
~~~~
|
419
429
|
|
420
|
-
|
430
|
+
这里调用的是 `./views/stylesheet.less`。
|
421
431
|
|
422
432
|
### Liquid 模板
|
423
433
|
|
@@ -432,7 +442,7 @@ get '/' do
|
|
432
442
|
end
|
433
443
|
~~~~
|
434
444
|
|
435
|
-
|
445
|
+
这里调用的是 `./views/index.liquid`。
|
436
446
|
|
437
447
|
因为你不能在Liquid 模板中调用 Ruby 方法 (除了 `yield`) ,
|
438
448
|
你几乎总是需要传递locals给它:
|
@@ -454,7 +464,7 @@ get '/' do
|
|
454
464
|
end
|
455
465
|
~~~~
|
456
466
|
|
457
|
-
|
467
|
+
这里调用的是 `./views/index.markdown` (`md` 和 `mkd` 也是合理的文件扩展名)。
|
458
468
|
|
459
469
|
在markdown中是不可以调用方法的,也不可以传递 locals给它。
|
460
470
|
你因此一般会结合其他的渲染引擎来使用它:
|
@@ -480,7 +490,7 @@ get '/' do
|
|
480
490
|
end
|
481
491
|
~~~~
|
482
492
|
|
483
|
-
|
493
|
+
这将会调用 `./views/index.md` 并使用 `./views/layout.erb` 作为布局。
|
484
494
|
|
485
495
|
请记住你可以全局设定这个选项:
|
486
496
|
|
@@ -492,7 +502,7 @@ get '/' do
|
|
492
502
|
end
|
493
503
|
~~~~
|
494
504
|
|
495
|
-
|
505
|
+
这将会调用 `./views/index.markdown` (和任何其他的 Markdown 模版) 并使用
|
496
506
|
`./views/post.haml` 作为布局.
|
497
507
|
|
498
508
|
也可能使用BlueCloth而不是RDiscount来解析Markdown文件:
|
@@ -524,7 +534,7 @@ get '/' do
|
|
524
534
|
end
|
525
535
|
~~~~
|
526
536
|
|
527
|
-
|
537
|
+
这里调用的是 `./views/index.textile`。
|
528
538
|
|
529
539
|
在textile中是不可以调用方法的,也不可以传递 locals给它。
|
530
540
|
你因此一般会结合其他的渲染引擎来使用它:
|
@@ -563,7 +573,7 @@ get '/' do
|
|
563
573
|
end
|
564
574
|
~~~~
|
565
575
|
|
566
|
-
|
576
|
+
这将会调用 `./views/index.textile` (和任何其他的 Textile 模版) 并使用
|
567
577
|
`./views/post.haml` 作为布局.
|
568
578
|
|
569
579
|
### RDoc 模板
|
@@ -580,7 +590,7 @@ get '/' do
|
|
580
590
|
end
|
581
591
|
~~~~
|
582
592
|
|
583
|
-
|
593
|
+
这里调用的是 `./views/index.rdoc`。
|
584
594
|
|
585
595
|
在rdoc中是不可以调用方法的,也不可以传递locals给它。
|
586
596
|
你因此一般会结合其他的渲染引擎来使用它:
|
@@ -606,7 +616,7 @@ get '/' do
|
|
606
616
|
end
|
607
617
|
~~~~
|
608
618
|
|
609
|
-
|
619
|
+
这将会调用 `./views/index.rdoc` 并使用 `./views/layout.erb` 作为布局。
|
610
620
|
|
611
621
|
请记住你可以全局设定这个选项:
|
612
622
|
|
@@ -618,7 +628,7 @@ get '/' do
|
|
618
628
|
end
|
619
629
|
~~~~
|
620
630
|
|
621
|
-
|
631
|
+
这将会调用 `./views/index.rdoc` (和任何其他的 RDoc 模版) 并使用
|
622
632
|
`./views/post.haml` 作为布局.
|
623
633
|
|
624
634
|
### Radius 模板
|
@@ -634,7 +644,7 @@ get '/' do
|
|
634
644
|
end
|
635
645
|
~~~~
|
636
646
|
|
637
|
-
|
647
|
+
这里调用的是 `./views/index.radius`。
|
638
648
|
|
639
649
|
因为你不能在Radius 模板中调用 Ruby 方法 (除了 `yield`) ,
|
640
650
|
你几乎总是需要传递locals给它:
|
@@ -656,7 +666,7 @@ get '/' do
|
|
656
666
|
end
|
657
667
|
~~~~
|
658
668
|
|
659
|
-
|
669
|
+
这里调用的是 `./views/index.mab`。
|
660
670
|
|
661
671
|
你也可以使用嵌入的 Markaby:
|
662
672
|
|
@@ -679,7 +689,7 @@ get '/' do
|
|
679
689
|
end
|
680
690
|
~~~~
|
681
691
|
|
682
|
-
|
692
|
+
这里调用的是 `./views/index.slim`。
|
683
693
|
|
684
694
|
### Creole 模板
|
685
695
|
|
@@ -694,7 +704,7 @@ get '/' do
|
|
694
704
|
end
|
695
705
|
~~~~
|
696
706
|
|
697
|
-
|
707
|
+
这里调用的是 `./views/index.creole`。
|
698
708
|
|
699
709
|
### CoffeeScript 模板
|
700
710
|
|
@@ -711,7 +721,7 @@ end
|
|
711
721
|
[github.com/josh/ruby-coffee-script](http://github.com/josh/ruby-coffee-script)
|
712
722
|
获取更新的选项。
|
713
723
|
|
714
|
-
|
724
|
+
现在你可以调用 CoffeeScript 模版了:
|
715
725
|
|
716
726
|
~~~~ ruby
|
717
727
|
# 需要在你的应用中引入coffee-script
|
@@ -722,7 +732,7 @@ get '/application.js' do
|
|
722
732
|
end
|
723
733
|
~~~~
|
724
734
|
|
725
|
-
|
735
|
+
这里调用的是 `./views/application.coffee`。
|
726
736
|
|
727
737
|
### 嵌入模板字符串
|
728
738
|
|
@@ -732,7 +742,7 @@ get '/' do
|
|
732
742
|
end
|
733
743
|
~~~~
|
734
744
|
|
735
|
-
|
745
|
+
调用嵌入模板字符串。
|
736
746
|
|
737
747
|
### 在模板中访问变量
|
738
748
|
|
@@ -836,7 +846,7 @@ get '/' do
|
|
836
846
|
end
|
837
847
|
~~~~
|
838
848
|
|
839
|
-
|
849
|
+
这里调用的是 `./views/index.myat`。察看
|
840
850
|
[github.com/rtomayko/tilt](https://github.com/rtomayko/tilt)
|
841
851
|
来更多了解Tilt.
|
842
852
|
|
@@ -1019,7 +1029,7 @@ end
|
|
1019
1029
|
如果你希望请求被发送到同一个应用,而不是副本, 使用 `call!` 而不是
|
1020
1030
|
`call`.
|
1021
1031
|
|
1022
|
-
|
1032
|
+
如果想更多了解 `call`,请察看 Rack specification。
|
1023
1033
|
|
1024
1034
|
### 设定 消息体,状态码和消息头
|
1025
1035
|
|
@@ -1056,16 +1066,16 @@ end
|
|
1056
1066
|
如同 `body`, 不带参数的 `headers` 和 `status` 可以用来访问
|
1057
1067
|
他们你的当前值.
|
1058
1068
|
|
1059
|
-
###
|
1069
|
+
### 媒体(MIME)类型
|
1060
1070
|
|
1061
|
-
|
1062
|
-
|
1071
|
+
使用 `send_file` 或者静态文件的时候,Sinatra可能不能识别你的媒体类型。
|
1072
|
+
使用 `mime_type` 通过文件扩展名来注册它们:
|
1063
1073
|
|
1064
1074
|
~~~~ ruby
|
1065
1075
|
mime_type :foo, 'text/foo'
|
1066
1076
|
~~~~
|
1067
1077
|
|
1068
|
-
|
1078
|
+
你也可以使用 `content_type` 辅助方法:
|
1069
1079
|
|
1070
1080
|
~~~~ ruby
|
1071
1081
|
get '/' do
|
@@ -1082,7 +1092,7 @@ end
|
|
1082
1092
|
%a{:href => url('/foo')} foo
|
1083
1093
|
~~~~
|
1084
1094
|
|
1085
|
-
|
1095
|
+
如果使用反向代理和Rack路由,生成URL的时候会考虑这些因素。
|
1086
1096
|
|
1087
1097
|
这个方法还有一个别名 `to` (见下面的例子).
|
1088
1098
|
|
@@ -1096,14 +1106,14 @@ get '/foo' do
|
|
1096
1106
|
end
|
1097
1107
|
~~~~
|
1098
1108
|
|
1099
|
-
|
1109
|
+
其他参数的用法,与 `halt`相同:
|
1100
1110
|
|
1101
1111
|
~~~~ ruby
|
1102
1112
|
redirect to('/bar'), 303
|
1103
1113
|
redirect 'http://google.com', 'wrong place, buddy'
|
1104
1114
|
~~~~
|
1105
1115
|
|
1106
|
-
|
1116
|
+
用 `redirect back`可以把用户重定向到原始页面:
|
1107
1117
|
|
1108
1118
|
~~~~ ruby
|
1109
1119
|
get '/foo' do
|
@@ -1116,13 +1126,13 @@ get '/bar' do
|
|
1116
1126
|
end
|
1117
1127
|
~~~~
|
1118
1128
|
|
1119
|
-
|
1129
|
+
如果想传递参数给redirect,可以用query string:
|
1120
1130
|
|
1121
1131
|
~~~~ ruby
|
1122
1132
|
redirect to('/bar?sum=42')
|
1123
1133
|
~~~~
|
1124
1134
|
|
1125
|
-
|
1135
|
+
或者用session:
|
1126
1136
|
|
1127
1137
|
~~~~ ruby
|
1128
1138
|
enable :sessions
|
@@ -1139,9 +1149,9 @@ end
|
|
1139
1149
|
|
1140
1150
|
### 缓存控制
|
1141
1151
|
|
1142
|
-
|
1152
|
+
要使用HTTP缓存,必须正确地设定消息头。
|
1143
1153
|
|
1144
|
-
|
1154
|
+
你可以这样设定 Cache-Control 消息头:
|
1145
1155
|
|
1146
1156
|
~~~~ ruby
|
1147
1157
|
get '/' do
|
@@ -1167,9 +1177,10 @@ before do
|
|
1167
1177
|
end
|
1168
1178
|
~~~~
|
1169
1179
|
|
1170
|
-
为了合适地使用缓存,你应该考虑使用 `etag` 和 `last_modified
|
1171
|
-
推荐在执行繁重任务\*之前\*使用这些helpers
|
1172
|
-
|
1180
|
+
为了合适地使用缓存,你应该考虑使用 `etag` 和 `last_modified`方法。
|
1181
|
+
推荐在执行繁重任务\*之前\*使用这些helpers,这样一来,
|
1182
|
+
如果客户端在缓存中已经有相关内容,就会立即得到显示。
|
1183
|
+
|
1173
1184
|
|
1174
1185
|
~~~~ ruby
|
1175
1186
|
get '/article/:id' do
|
@@ -1243,7 +1254,7 @@ send_file 'foo.png', :type => :jpg
|
|
1243
1254
|
<dd>Content-Length 的值,默认是文件的大小。</dd>
|
1244
1255
|
</dl>
|
1245
1256
|
|
1246
|
-
如果Rack
|
1257
|
+
如果Rack处理器支持的话,Ruby进程也能使用除streaming以外的方法。
|
1247
1258
|
如果你使用这个辅助方法, Sinatra会自动处理range请求。
|
1248
1259
|
|
1249
1260
|
### 访问请求对象
|
@@ -2137,3 +2148,11 @@ gem 'activerecord', '~> 3.0' # 也许你还需要 ActiveRecord 3.x
|
|
2137
2148
|
|
2138
2149
|
- [IRC: \#sinatra](irc://chat.freenode.net/#sinatra) on
|
2139
2150
|
[freenode.net](http://freenode.net)
|
2151
|
+
|
2152
|
+
- [Sinatra宝典](http://sinatra-book.gittr.com/) Cookbook教程
|
2153
|
+
|
2154
|
+
- [Sinatra使用技巧](http://recipes.sinatrarb.com/) 网友贡献的实用技巧
|
2155
|
+
|
2156
|
+
- [最新版本](http://rubydoc.info/gems/sinatra)API文档;[http://rubydoc.info](http://rubydoc.info)的[当前HEAD](http://rubydoc.info/github/sinatra/sinatra)
|
2157
|
+
|
2158
|
+
- [CI服务器](http://travis-ci.org/sinatra/sinatra)
|
data/Rakefile
CHANGED
@@ -111,7 +111,7 @@ end
|
|
111
111
|
desc "list of authors"
|
112
112
|
task :authors, [:commit_range, :format, :sep] do |t, a|
|
113
113
|
a.with_defaults :format => "%s (%d)", :sep => ", ", :commit_range => '--all'
|
114
|
-
authors = Hash.new
|
114
|
+
authors = Hash.new(0)
|
115
115
|
blake = "Blake Mizerany"
|
116
116
|
overall = 0
|
117
117
|
mapping = {
|
data/lib/sinatra/base.rb
CHANGED
@@ -32,7 +32,7 @@ module Sinatra
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def accept?(type)
|
35
|
-
preferred_type(type).include?(type)
|
35
|
+
preferred_type(type).to_s.include?(type)
|
36
36
|
end
|
37
37
|
|
38
38
|
def preferred_type(*types)
|
@@ -658,6 +658,7 @@ module Sinatra
|
|
658
658
|
def initialize
|
659
659
|
super
|
660
660
|
@default_layout = :layout
|
661
|
+
@preferred_extension = nil
|
661
662
|
end
|
662
663
|
|
663
664
|
def erb(template, options = {}, locals = {}, &block)
|
@@ -715,6 +716,10 @@ module Sinatra
|
|
715
716
|
render :rdoc, template, options, locals
|
716
717
|
end
|
717
718
|
|
719
|
+
def asciidoc(template, options = {}, locals = {})
|
720
|
+
render :asciidoc, template, options, locals
|
721
|
+
end
|
722
|
+
|
718
723
|
def radius(template, options = {}, locals = {})
|
719
724
|
render :radius, template, options, locals
|
720
725
|
end
|
@@ -741,6 +746,10 @@ module Sinatra
|
|
741
746
|
render :creole, template, options, locals
|
742
747
|
end
|
743
748
|
|
749
|
+
def mediawiki(template, options = {}, locals = {})
|
750
|
+
render :mediawiki, template, options, locals
|
751
|
+
end
|
752
|
+
|
744
753
|
def wlang(template, options = {}, locals = {}, &block)
|
745
754
|
render(:wlang, template, options, locals, &block)
|
746
755
|
end
|
@@ -809,7 +818,7 @@ module Sinatra
|
|
809
818
|
|
810
819
|
# render layout
|
811
820
|
if layout
|
812
|
-
options.merge
|
821
|
+
options = options.merge(:views => views, :layout => false, :eat_errors => eat_errors, :scope => scope).
|
813
822
|
merge!(layout_options)
|
814
823
|
catch(:layout_missing) { return render(layout_engine, layout, options, locals) { output } }
|
815
824
|
end
|
@@ -835,7 +844,7 @@ module Sinatra
|
|
835
844
|
@preferred_extension = engine.to_s
|
836
845
|
find_template(views, data, template) do |file|
|
837
846
|
path ||= file # keep the initial path rather than the last one
|
838
|
-
if found = File.
|
847
|
+
if found = File.exist?(file)
|
839
848
|
path = file
|
840
849
|
break
|
841
850
|
end
|
@@ -1015,14 +1024,14 @@ module Sinatra
|
|
1015
1024
|
|
1016
1025
|
# Attempt to serve static files from public directory. Throws :halt when
|
1017
1026
|
# a matching file is found, returns nil otherwise.
|
1018
|
-
def static!
|
1027
|
+
def static!(options = {})
|
1019
1028
|
return if (public_dir = settings.public_folder).nil?
|
1020
1029
|
path = File.expand_path("#{public_dir}#{unescape(request.path_info)}" )
|
1021
1030
|
return unless File.file?(path)
|
1022
1031
|
|
1023
1032
|
env['sinatra.static_file'] = path
|
1024
1033
|
cache_control(*settings.static_cache_control) if settings.static_cache_control?
|
1025
|
-
send_file path, :disposition => nil
|
1034
|
+
send_file path, options.merge(:disposition => nil)
|
1026
1035
|
end
|
1027
1036
|
|
1028
1037
|
# Enable string or symbol key access to the nested params hash.
|
@@ -1129,7 +1138,7 @@ module Sinatra
|
|
1129
1138
|
|
1130
1139
|
class << self
|
1131
1140
|
CALLERS_TO_IGNORE = [ # :nodoc:
|
1132
|
-
/\/sinatra(\/(base|main|
|
1141
|
+
/\/sinatra(\/(base|main|show_exceptions))?\.rb$/, # all sinatra code
|
1133
1142
|
/lib\/tilt.*\.rb$/, # all tilt code
|
1134
1143
|
/^\(.*\)$/, # generated code
|
1135
1144
|
/rubygems\/(custom|core_ext\/kernel)_require\.rb$/, # rubygems require hacks
|
@@ -1575,6 +1584,7 @@ module Sinatra
|
|
1575
1584
|
end
|
1576
1585
|
|
1577
1586
|
def generate_method(method_name, &block)
|
1587
|
+
method_name = method_name.to_sym
|
1578
1588
|
define_method(method_name, &block)
|
1579
1589
|
method = instance_method method_name
|
1580
1590
|
remove_method method_name
|
@@ -1828,7 +1838,7 @@ module Sinatra
|
|
1828
1838
|
set :use_code, false
|
1829
1839
|
set :default_encoding, "utf-8"
|
1830
1840
|
set :x_cascade, true
|
1831
|
-
set :add_charset, %w[javascript xml xhtml+xml
|
1841
|
+
set :add_charset, %w[javascript xml xhtml+xml].map { |t| "application/#{t}" }
|
1832
1842
|
settings.add_charset << /^text\//
|
1833
1843
|
|
1834
1844
|
# explicitly generating a session secret eagerly to play nice with preforking
|