sinatra 1.4.6 → 1.4.7

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.

@@ -2,7 +2,7 @@
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
- A Sinatra egy [DSL](http://en.wikipedia.org/wiki/Domain-specific_language)
5
+ A Sinatra egy [DSL](https://en.wikipedia.org/wiki/Domain-specific_language)
6
6
  webalkalmazások Ruby nyelven történő fejlesztéséhez, minimális
7
7
  energiabefektetéssel:
8
8
 
@@ -21,7 +21,7 @@ Telepítsd a gem-et és indítsd el az alkalmazást a következőképpen:
21
21
  ruby myapp.rb
22
22
  ```
23
23
 
24
- Az alkalmazás elérhető lesz itt: `http://localhost:4567`
24
+ Az alkalmazás elérhető lesz itt: [http://localhost:4567](http://localhost:4567)
25
25
 
26
26
  ## Útvonalak (routes)
27
27
 
@@ -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://rubydoc.info/github/rack/rack/master/Rack/Builder) DSL-ben
521
+ [Rack::Builder](http://www.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:
@@ -621,7 +621,7 @@ alkalmazás átalakítható Sinatra::Base alapú komponensekké két lépésben:
621
621
  A `Sinatra::Base` osztály igazából egy üres lap: a legtöbb funkció
622
622
  alapból ki van kapcsolva, beleértve a beépített szervert is. A
623
623
  beállításokkal és az egyes kapcsolók hatásával az
624
- [Options and Configuration](http://sinatra.github.com/configuration.html) lap
624
+ [Options and Configuration](http://www.sinatrarb.com/configuration.html) lap
625
625
  foglalkozik.
626
626
 
627
627
  Széljegyzet: A Sinatra felső szintű DSL-je egy egyszerű delegációs
@@ -684,11 +684,11 @@ A Sinatra frissítését később így végezheted el:
684
684
 
685
685
  ## További információk
686
686
 
687
- * [A projekt weboldala](http://sinatra.github.com/) - Kiegészítő dokumentáció,
687
+ * [A projekt weboldala](http://www.sinatrarb.com/) - Kiegészítő dokumentáció,
688
688
  hírek, hasznos linkek
689
- * [Közreműködés](http://sinatra.github.com/contributing.html) - Hibát találtál?
689
+ * [Közreműködés](http://www.sinatrarb.com/contributing.html) - Hibát találtál?
690
690
  Segítségre van szükséged? Foltot küldenél be?
691
691
  * [Lighthouse](http://sinatra.lighthouseapp.com) - Hibakövetés és kiadások
692
- * [Twitter](http://twitter.com/sinatra)
692
+ * [Twitter](https://twitter.com/sinatra)
693
693
  * [Levelezőlista](http://groups.google.com/group/sinatrarb)
694
694
  * [IRC: #sinatra](irc://chat.freenode.net/#sinatra) a http://freenode.net címen
@@ -3,9 +3,9 @@
3
3
  *注)
4
4
  本文書は英語から翻訳したものであり、その内容が最新でない場合もあります。最新の情報はオリジナルの英語版を参照して下さい。*
5
5
 
6
- Sinatraは最小の労力でRubyによるWebアプリケーションを手早く作るための[DSL](http://ja.wikipedia.org/wiki/ドメイン固有言語)です。
6
+ Sinatraは最小の労力でRubyによるWebアプリケーションを手早く作るための[DSL](https://ja.wikipedia.org/wiki/メインページドメイン固有言語)です。
7
7
 
8
- ``` ruby
8
+ ```ruby
9
9
  # myapp.rb
10
10
  require 'sinatra'
11
11
 
@@ -16,17 +16,17 @@ end
16
16
 
17
17
  gemをインストールし、
18
18
 
19
- ``` shell
19
+ ```shell
20
20
  gem install sinatra
21
21
  ```
22
22
 
23
23
  次のように実行します。
24
24
 
25
- ``` shell
25
+ ```shell
26
26
  ruby myapp.rb
27
27
  ```
28
28
 
29
- [localhost:4567](http://localhost:4567) を開きます。
29
+ [http://localhost:4567](http://localhost:4567) を開きます。
30
30
 
31
31
  ThinがあればSinatraはこれを利用するので、`gem install thin`することをお薦めします。
32
32
 
@@ -109,6 +109,7 @@ ThinがあればSinatraはこれを利用するので、`gem install thin`する
109
109
  * [リクエスト/インスタンスのスコープ](#リクエストインスタンスのスコープ)
110
110
  * [デリゲートスコープ](#デリゲートスコープ)
111
111
  * [コマンドライン](#コマンドライン)
112
+ * [マルチスレッド](#マルチスレッド)
112
113
  * [必要環境](#必要環境)
113
114
  * [最新開発版](#最新開発版)
114
115
  * [Bundlerを使う場合](#bundlerを使う場合)
@@ -122,7 +123,7 @@ ThinがあればSinatraはこれを利用するので、`gem install thin`する
122
123
  Sinatraでは、ルーティングはHTTPメソッドとURLマッチングパターンがペアになっています。
123
124
  ルーティングはブロックに結び付けられています。
124
125
 
125
- ``` ruby
126
+ ```ruby
126
127
  get '/' do
127
128
  .. 何か見せる ..
128
129
  end
@@ -162,7 +163,7 @@ end
162
163
  ルーティングのパターンは名前付きパラメータを含むことができ、
163
164
  `params`ハッシュで取得できます。
164
165
 
165
- ``` ruby
166
+ ```ruby
166
167
  get '/hello/:name' do
167
168
  # "GET /hello/foo" と "GET /hello/bar" にマッチ
168
169
  # params['name'] は 'foo' か 'bar'
@@ -172,7 +173,7 @@ end
172
173
 
173
174
  また、ブロックパラメータで名前付きパラメータにアクセスすることもできます。
174
175
 
175
- ``` ruby
176
+ ```ruby
176
177
  get '/hello/:name' do |n|
177
178
  # "GET /hello/foo" と "GET /hello/bar" にマッチ
178
179
  # params['name'] は 'foo' か 'bar'
@@ -184,7 +185,7 @@ end
184
185
  ルーティングパターンはアスタリスク(すなわちワイルドカード)を含むこともでき、
185
186
  `params['splat']` で取得できます。
186
187
 
187
- ``` ruby
188
+ ```ruby
188
189
  get '/say/*/to/*' do
189
190
  # /say/hello/to/world にマッチ
190
191
  params['splat'] # => ["hello", "world"]
@@ -198,7 +199,7 @@ end
198
199
 
199
200
  ここで、ブロックパラメータを使うこともできます。
200
201
 
201
- ``` ruby
202
+ ```ruby
202
203
  get '/download/*.*' do |path, ext|
203
204
  [path, ext] # => ["path/to/file", "xml"]
204
205
  end
@@ -206,7 +207,7 @@ end
206
207
 
207
208
  ルーティングを正規表現にマッチさせることもできます。
208
209
 
209
- ``` ruby
210
+ ```ruby
210
211
  get /\A\/hello\/([\w]+)\z/ do
211
212
  "Hello, #{params['captures'].first}!"
212
213
  end
@@ -214,7 +215,7 @@ end
214
215
 
215
216
  ここでも、ブロックパラメータが使えます。
216
217
 
217
- ``` ruby
218
+ ```ruby
218
219
  get %r{/hello/([\w]+)} do |c|
219
220
  "Hello, #{c}!"
220
221
  end
@@ -222,9 +223,9 @@ end
222
223
 
223
224
  ルーティングパターンは、オプショナルパラメータを取ることもできます。
224
225
 
225
- ``` ruby
226
- get '/posts.?:format?' do
227
- # "GET /posts" と "GET /posts.json", "GET /posts.xml" の拡張子などにマッチ
226
+ ```ruby
227
+ get '/posts/:format?' do
228
+ # "GET /posts/" と "GET /posts/json", "GET /posts/xml" の拡張子などにマッチ
228
229
  end
229
230
  ```
230
231
 
@@ -235,7 +236,7 @@ end
235
236
 
236
237
  ルーティングにはユーザエージェントのようなさまざまな条件を含めることができます。
237
238
 
238
- ``` ruby
239
+ ```ruby
239
240
  get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
240
241
  "Songbirdのバージョン #{params['agent'][0]}を使ってます。"
241
242
  end
@@ -247,7 +248,7 @@ end
247
248
 
248
249
  ほかに`host_name`と`provides`条件が利用可能です。
249
250
 
250
- ``` ruby
251
+ ```ruby
251
252
  get '/', :host_name => /^admin\./ do
252
253
  "Adminエリアです。アクセスを拒否します!"
253
254
  end
@@ -263,7 +264,7 @@ end
263
264
 
264
265
  独自の条件を定義することも簡単にできます。
265
266
 
266
- ``` ruby
267
+ ```ruby
267
268
  set(:probability) { |value| condition { rand <= value } }
268
269
 
269
270
  get '/win_a_car', :probability => 0.1 do
@@ -277,7 +278,7 @@ end
277
278
 
278
279
  複数の値を取る条件には、アスタリスクを使います。
279
280
 
280
- ``` ruby
281
+ ```ruby
281
282
  set(:auth) do |*roles| # <- ここでアスタリスクを使う
282
283
  condition do
283
284
  unless logged_in? && roles.any? {|role| current_user.in_role? role }
@@ -313,7 +314,7 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
313
314
 
314
315
  これにより、例えばストリーミングを簡単に実装することができます。
315
316
 
316
- ``` ruby
317
+ ```ruby
317
318
  class Stream
318
319
  def each
319
320
  100.times { |i| yield "#{i}\n" }
@@ -329,7 +330,7 @@ get('/') { Stream.new }
329
330
 
330
331
  先述のようにSinatraはルーティングマッチャーとして、文字列パターンと正規表現を使うことをビルトインでサポートしています。しかしこれに留まらず、独自のマッチャーを簡単に定義することもできるのです。
331
332
 
332
- ``` ruby
333
+ ```ruby
333
334
  class AllButPattern
334
335
  Match = Struct.new(:captures)
335
336
 
@@ -354,7 +355,7 @@ end
354
355
 
355
356
  ノート: この例はオーバースペックであり、以下のようにも書くことができます。
356
357
 
357
- ``` ruby
358
+ ```ruby
358
359
  get // do
359
360
  pass if request.path_info == "/index"
360
361
  # ...
@@ -363,7 +364,7 @@ end
363
364
 
364
365
  または、否定先読みを使って:
365
366
 
366
- ``` ruby
367
+ ```ruby
367
368
  get %r{^(?!/index$)} do
368
369
  # ...
369
370
  end
@@ -375,7 +376,7 @@ end
375
376
  静的ファイルは`./public`ディレクトリから配信されます。
376
377
  `:public_folder`オプションを指定することで別の場所を指定することができます。
377
378
 
378
- ``` ruby
379
+ ```ruby
379
380
  set :public_folder, File.dirname(__FILE__) + '/static'
380
381
  ```
381
382
 
@@ -388,7 +389,7 @@ set :public_folder, File.dirname(__FILE__) + '/static'
388
389
 
389
390
  各テンプレート言語はそれ自身のレンダリングメソッドを通して展開されます。それらのメソッドは単に文字列を返します。
390
391
 
391
- ``` ruby
392
+ ```ruby
392
393
  get '/' do
393
394
  erb :index
394
395
  end
@@ -398,7 +399,7 @@ end
398
399
 
399
400
  テンプレート名を渡す代わりに、直接そのテンプレートの中身を渡すこともできます。
400
401
 
401
- ``` ruby
402
+ ```ruby
402
403
  get '/' do
403
404
  code = "<%= Time.now %>"
404
405
  erb code
@@ -407,7 +408,7 @@ end
407
408
 
408
409
  テンプレートのレイアウトは第2引数のハッシュ形式のオプションをもとに表示されます。
409
410
 
410
- ``` ruby
411
+ ```ruby
411
412
  get '/' do
412
413
  erb :index, :layout => :post
413
414
  end
@@ -418,7 +419,7 @@ end
418
419
  Sinatraが理解できないオプションは、テンプレートエンジンに渡されることになります。
419
420
 
420
421
 
421
- ``` ruby
422
+ ```ruby
422
423
  get '/' do
423
424
  haml :index, :format => :html5
424
425
  end
@@ -426,7 +427,7 @@ end
426
427
 
427
428
  テンプレート言語ごとにオプションをセットすることもできます。
428
429
 
429
- ``` ruby
430
+ ```ruby
430
431
  set :haml, :format => :html5
431
432
 
432
433
  get '/' do
@@ -485,7 +486,7 @@ end
485
486
  テンプレートは`./views`ディレクトリ下に配置されています。
486
487
  他のディレクトリを使用する場合の例:
487
488
 
488
- ``` ruby
489
+ ```ruby
489
490
  set :views, settings.root + '/templates'
490
491
  ```
491
492
 
@@ -495,7 +496,7 @@ set :views, settings.root + '/templates'
495
496
 
496
497
  ### リテラルテンプレート(Literal Templates)
497
498
 
498
- ``` ruby
499
+ ```ruby
499
500
  get '/' do
500
501
  haml '%div.title Hello World'
501
502
  end
@@ -508,7 +509,7 @@ end
508
509
  いくつかの言語には複数の実装があります。使用する(そしてスレッドセーフにする)実装を指定するには、それを最初にrequireしてください。
509
510
 
510
511
 
511
- ``` ruby
512
+ ```ruby
512
513
  require 'rdiscount' # または require 'bluecloth'
513
514
  get('/') { markdown :index }
514
515
  ```
@@ -577,7 +578,7 @@ get('/') { markdown :index }
577
578
  <table>
578
579
  <tr>
579
580
  <td>依存</td>
580
- <td><a href="http://nokogiri.org/" title="nokogiri">nokogiri</a></td>
581
+ <td><a href="http://www.nokogiri.org/" title="nokogiri">nokogiri</a></td>
581
582
  </tr>
582
583
  <tr>
583
584
  <td>ファイル拡張子</td>
@@ -632,7 +633,7 @@ get('/') { markdown :index }
632
633
  <table>
633
634
  <tr>
634
635
  <td>依存</td>
635
- <td><a href="http://www.lesscss.org/" title="less">less</a></td>
636
+ <td><a href="http://lesscss.org/" title="less">less</a></td>
636
637
  </tr>
637
638
  <tr>
638
639
  <td>ファイル拡張子</td>
@@ -649,7 +650,7 @@ get('/') { markdown :index }
649
650
  <table>
650
651
  <tr>
651
652
  <td>依存</td>
652
- <td><a href="http://www.liquidmarkup.org/" title="liquid">liquid</a></td>
653
+ <td><a href="http://liquidmarkup.org/" title="liquid">liquid</a></td>
653
654
  </tr>
654
655
  <tr>
655
656
  <td>ファイル拡張子</td>
@@ -670,7 +671,7 @@ LiquidテンプレートからRubyのメソッド(`yield`を除く)を呼び出
670
671
  <td>依存</td>
671
672
  <td>
672
673
  次の何れか:
673
- <a href="https://github.com/rtomayko/rdiscount" title="RDiscount">RDiscount</a>,
674
+ <a href="https://github.com/davidfstr/rdiscount" title="RDiscount">RDiscount</a>,
674
675
  <a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>,
675
676
  <a href="http://deveiate.org/projects/BlueCloth" title="BlueCloth">BlueCloth</a>,
676
677
  <a href="http://kramdown.gettalong.org/" title="kramdown">kramdown</a>,
@@ -690,13 +691,13 @@ LiquidテンプレートからRubyのメソッド(`yield`を除く)を呼び出
690
691
  Markdownからメソッドを呼び出すことも、localsに変数を渡すこともできません。
691
692
  それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です。
692
693
 
693
- ``` ruby
694
+ ```ruby
694
695
  erb :overview, :locals => { :text => markdown(:introduction) }
695
696
  ```
696
697
 
697
698
  ノート: 他のテンプレート内で`markdown`メソッドを呼び出せます。
698
699
 
699
- ``` ruby
700
+ ```ruby
700
701
  %h1 Hello From Haml!
701
702
  %p= markdown(:greetings)
702
703
  ```
@@ -724,13 +725,13 @@ MarkdownからはRubyを呼ぶことができないので、Markdownで書かれ
724
725
  Textileからメソッドを呼び出すことも、localsに変数を渡すこともできません。
725
726
  それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です。
726
727
 
727
- ``` ruby
728
+ ```ruby
728
729
  erb :overview, :locals => { :text => textile(:introduction) }
729
730
  ```
730
731
 
731
732
  ノート: 他のテンプレート内で`textile`メソッドを呼び出せます。
732
733
 
733
- ``` ruby
734
+ ```ruby
734
735
  %h1 Hello From Haml!
735
736
  %p= textile(:greetings)
736
737
  ```
@@ -757,14 +758,14 @@ TexttileからはRubyを呼ぶことができないので、Textileで書かれ
757
758
  RDocからメソッドを呼び出すことも、localsに変数を渡すこともできません。
758
759
  それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です。
759
760
 
760
- ``` ruby
761
+ ```ruby
761
762
  erb :overview, :locals => { :text => rdoc(:introduction) }
762
763
  ```
763
764
 
764
765
  ノート: 他のテンプレート内で`rdoc`メソッドを呼び出せます。
765
766
 
766
767
 
767
- ``` ruby
768
+ ```ruby
768
769
  %h1 Hello From Haml!
769
770
  %p= rdoc(:greetings)
770
771
  ```
@@ -815,7 +816,7 @@ RadiusテンプレートからRubyのメソッドを直接呼び出すことが
815
816
  <table>
816
817
  <tr>
817
818
  <td>依存</td>
818
- <td><a href="http://markaby.github.com/" title="Markaby">Markaby</a></td>
819
+ <td><a href="http://markaby.github.io/" title="Markaby">Markaby</a></td>
819
820
  </tr>
820
821
  <tr>
821
822
  <td>ファイル拡張子</td>
@@ -883,13 +884,13 @@ RadiusテンプレートからRubyのメソッドを直接呼び出すことが
883
884
  Creoleからメソッドを呼び出すことも、localsに変数を渡すこともできません。
884
885
  それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です。
885
886
 
886
- ``` ruby
887
+ ```ruby
887
888
  erb :overview, :locals => { :text => creole(:introduction) }
888
889
  ```
889
890
 
890
891
  ノート: 他のテンプレート内で`creole`メソッドを呼び出せます。
891
892
 
892
- ``` ruby
893
+ ```ruby
893
894
  %h1 Hello From Haml!
894
895
  %p= creole(:greetings)
895
896
  ```
@@ -951,7 +952,7 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
951
952
  <tr>
952
953
  <td>依存</td>
953
954
  <td>
954
- <a href="https://github.com/lucasmazza/ruby-stylus" title="Ruby Stylus">
955
+ <a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
955
956
  Stylus
956
957
  </a> および
957
958
  <a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
@@ -971,7 +972,7 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
971
972
 
972
973
  Stylusテンプレートを使えるようにする前に、まず`stylus`と`stylus/tilt`を読み込む必要があります。
973
974
 
974
- ``` ruby
975
+ ```ruby
975
976
  require 'sinatra'
976
977
  require 'stylus'
977
978
  require 'stylus/tilt'
@@ -1008,14 +1009,14 @@ end
1008
1009
 
1009
1010
  テンプレートのソースはRubyの文字列として評価され、その結果のJSON変数は`#to_json`を使って変換されます。
1010
1011
 
1011
- ``` ruby
1012
+ ```ruby
1012
1013
  json = { :foo => 'bar' }
1013
1014
  json[:baz] = key
1014
1015
  ```
1015
1016
 
1016
1017
  `:callback`および`:variable`オプションは、レンダリングされたオブジェクトを装飾するために使うことができます。
1017
1018
 
1018
- ``` ruby
1019
+ ```ruby
1019
1020
  var resource = {"foo":"bar","baz":"qux"}; present(resource);
1020
1021
  ```
1021
1022
 
@@ -1042,7 +1043,7 @@ WLang内でのRubyメソッドの呼び出しは一般的ではないので、
1042
1043
 
1043
1044
  テンプレートはルーティングハンドラと同じコンテキストの中で評価されます。ルーティングハンドラでセットされたインスタンス変数はテンプレート内で直接使うことができます。
1044
1045
 
1045
- ``` ruby
1046
+ ```ruby
1046
1047
  get '/:id' do
1047
1048
  @foo = Foo.find(params['id'])
1048
1049
  haml '%h1= @foo.name'
@@ -1051,7 +1052,7 @@ end
1051
1052
 
1052
1053
  また、ローカル変数のハッシュで明示的に指定することもできます。
1053
1054
 
1054
- ``` ruby
1055
+ ```ruby
1055
1056
  get '/:id' do
1056
1057
  foo = Foo.find(params['id'])
1057
1058
  haml '%h1= bar.name', :locals => { :bar => foo }
@@ -1065,7 +1066,7 @@ end
1065
1066
  レイアウトは通常、`yield`を呼ぶ単なるテンプレートに過ぎません。
1066
1067
  そのようなテンプレートは、既に説明した`:template`オプションを通して使われるか、または次のようなブロックを伴ってレンダリングされます。
1067
1068
 
1068
- ``` ruby
1069
+ ```ruby
1069
1070
  erb :post, :layout => false do
1070
1071
  erb :index
1071
1072
  end
@@ -1075,7 +1076,7 @@ end
1075
1076
 
1076
1077
  レンダリングメソッドにブロックを渡すスタイルは、ネストしたレイアウトを作るために最も役立ちます。
1077
1078
 
1078
- ``` ruby
1079
+ ```ruby
1079
1080
  erb :main_layout, :layout => false do
1080
1081
  erb :admin_layout do
1081
1082
  erb :user
@@ -1085,7 +1086,7 @@ end
1085
1086
 
1086
1087
  これはまた次のより短いコードでも達成できます。
1087
1088
 
1088
- ``` ruby
1089
+ ```ruby
1089
1090
  erb :admin_layout, :layout => :main_layout do
1090
1091
  erb :user
1091
1092
  end
@@ -1100,7 +1101,7 @@ end
1100
1101
 
1101
1102
  テンプレートはソースファイルの最後で定義することもできます。
1102
1103
 
1103
- ``` ruby
1104
+ ```ruby
1104
1105
  require 'sinatra'
1105
1106
 
1106
1107
  get '/' do
@@ -1123,7 +1124,7 @@ __END__
1123
1124
 
1124
1125
  テンプレートはトップレベルの`template`メソッドで定義することもできます。
1125
1126
 
1126
- ``` ruby
1127
+ ```ruby
1127
1128
  template :layout do
1128
1129
  "%html\n =yield\n"
1129
1130
  end
@@ -1139,7 +1140,7 @@ end
1139
1140
 
1140
1141
  「layout」というテンプレートが存在する場合、そのテンプレートファイルは他のテンプレートがレンダリングされる度に使用されます。`:layout => false`で個別に、または`set :haml, :layout => false`でデフォルトとして、レイアウトを無効にすることができます。
1141
1142
 
1142
- ``` ruby
1143
+ ```ruby
1143
1144
  get '/' do
1144
1145
  haml :index, :layout => !request.xhr?
1145
1146
  end
@@ -1149,7 +1150,7 @@ end
1149
1150
 
1150
1151
  任意のテンプレートエンジンにファイル拡張子を関連付ける場合は、`Tilt.register`を使います。例えば、Textileテンプレートに`tt`というファイル拡張子を使いたい場合は、以下のようにします。
1151
1152
 
1152
- ``` ruby
1153
+ ```ruby
1153
1154
  Tilt.register :tt, Tilt[:textile]
1154
1155
  ```
1155
1156
 
@@ -1157,7 +1158,7 @@ Tilt.register :tt, Tilt[:textile]
1157
1158
 
1158
1159
  まず、Tiltでそのエンジンを登録し、次にレンダリングメソッドを作ります。
1159
1160
 
1160
- ``` ruby
1161
+ ```ruby
1161
1162
  Tilt.register :myat, MyAwesomeTemplateEngine
1162
1163
 
1163
1164
  helpers do
@@ -1175,7 +1176,7 @@ end
1175
1176
 
1176
1177
  beforeフィルタは、リクエストのルーティングと同じコンテキストで各リクエストの前に評価され、それによってリクエストとレスポンスを変更可能にします。フィルタ内でセットされたインスタンス変数はルーティングとテンプレートからアクセスすることができます。
1177
1178
 
1178
- ``` ruby
1179
+ ```ruby
1179
1180
  before do
1180
1181
  @note = 'Hi!'
1181
1182
  request.path_info = '/foo/bar/baz'
@@ -1189,7 +1190,7 @@ end
1189
1190
 
1190
1191
  afterフィルタは、リクエストのルーティングと同じコンテキストで各リクエストの後に評価され、それによってこれもリクエストとレスポンスを変更可能にします。beforeフィルタとルーティング内でセットされたインスタンス変数はafterフィルタからアクセスすることができます。
1191
1192
 
1192
- ``` ruby
1193
+ ```ruby
1193
1194
  after do
1194
1195
  puts response.status
1195
1196
  end
@@ -1199,7 +1200,7 @@ end
1199
1200
 
1200
1201
  フィルタにはオプションとしてパターンを渡すことができ、この場合はリクエストのパスがパターンにマッチした場合にのみフィルタが評価されるようになります。
1201
1202
 
1202
- ``` ruby
1203
+ ```ruby
1203
1204
  before '/protected/*' do
1204
1205
  authenticate!
1205
1206
  end
@@ -1211,7 +1212,7 @@ end
1211
1212
 
1212
1213
  ルーティング同様、フィルタもまた条件を取ることができます。
1213
1214
 
1214
- ``` ruby
1215
+ ```ruby
1215
1216
  before :agent => /Songbird/ do
1216
1217
  # ...
1217
1218
  end
@@ -1225,7 +1226,7 @@ end
1225
1226
 
1226
1227
  トップレベルの`helpers`メソッドを使用してルーティングハンドラやテンプレートで使うヘルパーメソッドを定義できます。
1227
1228
 
1228
- ``` ruby
1229
+ ```ruby
1229
1230
  helpers do
1230
1231
  def bar(name)
1231
1232
  "#{name}bar"
@@ -1239,7 +1240,7 @@ end
1239
1240
 
1240
1241
  あるいは、ヘルパーメソッドをモジュール内で個別に定義することもできます。
1241
1242
 
1242
- ``` ruby
1243
+ ```ruby
1243
1244
  module FooUtils
1244
1245
  def foo(name) "#{name}foo" end
1245
1246
  end
@@ -1258,7 +1259,7 @@ helpers FooUtils, BarUtils
1258
1259
 
1259
1260
  セッションはリクエスト間での状態維持のために使用されます。その起動により、ユーザセッションごとに一つのセッションハッシュが与えられます。
1260
1261
 
1261
- ``` ruby
1262
+ ```ruby
1262
1263
  enable :sessions
1263
1264
 
1264
1265
  get '/' do
@@ -1272,7 +1273,7 @@ end
1272
1273
 
1273
1274
  ノート: `enable :sessions`は実際にはすべてのデータをクッキーに保持します。これは必ずしも期待通りのものにならないかもしれません(例えば、大量のデータを保持することでトラフィックが増大するなど)。Rackセッションミドルウェアの利用が可能であり、その場合は`enable :sessions`を呼ばずに、選択したミドルウェアを他のミドルウェアのときと同じようにして取り込んでください。
1274
1275
 
1275
- ``` ruby
1276
+ ```ruby
1276
1277
  use Rack::Session::Pool, :expire_after => 2592000
1277
1278
 
1278
1279
  get '/' do
@@ -1286,19 +1287,19 @@ end
1286
1287
 
1287
1288
  セキュリティ向上のため、クッキー内のセッションデータはセッション秘密鍵(session secret)で署名されます。Sinatraによりランダムな秘密鍵が個別に生成されます。しかし、この秘密鍵はアプリケーションの立ち上げごとに変わってしまうので、すべてのアプリケーションのインスタンスで共有できる秘密鍵をセットしたくなるかもしれません。
1288
1289
 
1289
- ``` ruby
1290
+ ```ruby
1290
1291
  set :session_secret, 'super secret'
1291
1292
  ```
1292
1293
 
1293
1294
  更に、設定変更をしたい場合は、`sessions`の設定においてオプションハッシュを保持することもできます。
1294
1295
 
1295
- ``` ruby
1296
+ ```ruby
1296
1297
  set :sessions, :domain => 'foo.com'
1297
1298
  ```
1298
1299
 
1299
1300
  foo.comのサブドメイン上のアプリ間でセッションを共有化したいときは、代わりにドメインの前に *.* を付けます。
1300
1301
 
1301
- ``` ruby
1302
+ ```ruby
1302
1303
  set :sessions, :domain => '.foo.com'
1303
1304
  ```
1304
1305
 
@@ -1306,37 +1307,37 @@ set :sessions, :domain => '.foo.com'
1306
1307
 
1307
1308
  フィルタまたはルーティング内で直ちにリクエストを止める場合
1308
1309
 
1309
- ``` ruby
1310
+ ```ruby
1310
1311
  halt
1311
1312
  ```
1312
1313
 
1313
1314
  この際、ステータスを指定することもできます。
1314
1315
 
1315
- ``` ruby
1316
+ ```ruby
1316
1317
  halt 410
1317
1318
  ```
1318
1319
 
1319
1320
  body部を指定することも、
1320
1321
 
1321
- ``` ruby
1322
+ ```ruby
1322
1323
  halt 'ここにbodyを書く'
1323
1324
  ```
1324
1325
 
1325
1326
  ステータスとbody部を指定することも、
1326
1327
 
1327
- ``` ruby
1328
+ ```ruby
1328
1329
  halt 401, '立ち去れ!'
1329
1330
  ```
1330
1331
 
1331
1332
  ヘッダを付けることもできます。
1332
1333
 
1333
- ``` ruby
1334
+ ```ruby
1334
1335
  halt 402, {'Content-Type' => 'text/plain'}, 'リベンジ'
1335
1336
  ```
1336
1337
 
1337
1338
  もちろん、テンプレートを`halt`に結びつけることも可能です。
1338
1339
 
1339
- ``` ruby
1340
+ ```ruby
1340
1341
  halt erb(:error)
1341
1342
  ```
1342
1343
 
@@ -1344,7 +1345,7 @@ halt erb(:error)
1344
1345
 
1345
1346
  ルーティングは`pass`を使って次のルーティングに飛ばすことができます。
1346
1347
 
1347
- ``` ruby
1348
+ ```ruby
1348
1349
  get '/guess/:who' do
1349
1350
  pass unless params['who'] == 'Frank'
1350
1351
  "見つかっちゃった!"
@@ -1361,7 +1362,7 @@ end
1361
1362
 
1362
1363
  `pass`を使ってルーティングを飛ばすのではなく、他のルーティングを呼んだ結果を得たいというときがあります。これを実現するには`call`を使えばいいです。
1363
1364
 
1364
- ``` ruby
1365
+ ```ruby
1365
1366
  get '/foo' do
1366
1367
  status, headers, body = call env.merge("PATH_INFO" => '/bar')
1367
1368
  [status, headers, body.map(&:upcase)]
@@ -1383,7 +1384,7 @@ end
1383
1384
 
1384
1385
  ステータスコードおよびレスポンスボディを、ルーティングブロックの戻り値にセットすることが可能であり、これは推奨されています。しかし、あるケースでは実行フローの任意のタイミングでボディをセットしたくなるかもしれません。`body`ヘルパーメソッドを使えばそれができます。そうすると、それ以降、ボディにアクセスするためにそのメソッドを使うことができるようになります。
1385
1386
 
1386
- ``` ruby
1387
+ ```ruby
1387
1388
  get '/foo' do
1388
1389
  body "bar"
1389
1390
  end
@@ -1397,7 +1398,7 @@ end
1397
1398
 
1398
1399
  ボディと同様に、ステータスコードおよびヘッダもセットできます。
1399
1400
 
1400
- ``` ruby
1401
+ ```ruby
1401
1402
  get '/foo' do
1402
1403
  status 418
1403
1404
  headers \
@@ -1413,7 +1414,7 @@ end
1413
1414
 
1414
1415
  レスポンスボディの部分を未だ生成している段階で、データを送り出したいということがあります。極端な例では、クライアントがコネクションを閉じるまでデータを送り続けたいことがあります。`stream`ヘルパーを使えば、独自ラッパーを作る必要はありません。
1415
1416
 
1416
- ``` ruby
1417
+ ```ruby
1417
1418
  get '/' do
1418
1419
  stream do |out|
1419
1420
  out << "それは伝 -\n"
@@ -1425,13 +1426,13 @@ get '/' do
1425
1426
  end
1426
1427
  ```
1427
1428
 
1428
- これはストリーミングAPI、[Server Sent Events](http://dev.w3.org/html5/eventsource/)の実装を可能にし、[WebSockets](http://en.wikipedia.org/wiki/WebSocket)の土台に使うことができます。また、一部のコンテンツが遅いリソースに依存しているときに、スループットを上げるために使うこともできます。
1429
+ これはストリーミングAPI、[Server Sent Events](https://w3c.github.io/eventsource/)の実装を可能にし、[WebSockets](https://en.wikipedia.org/wiki/WebSocket)の土台に使うことができます。また、一部のコンテンツが遅いリソースに依存しているときに、スループットを上げるために使うこともできます。
1429
1430
 
1430
- ノート: ストリーミングの挙動、特に並行リクエスト(cuncurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。WEBRickを含むいくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。
1431
+ ノート: ストリーミングの挙動、特に並行リクエスト(cuncurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。いくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。
1431
1432
 
1432
1433
  オプション引数が`keep_open`にセットされている場合、ストリームオブジェクト上で`close`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはThinやRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。
1433
1434
 
1434
- ``` ruby
1435
+ ```ruby
1435
1436
  # ロングポーリング
1436
1437
 
1437
1438
  set :server, :thin
@@ -1465,7 +1466,7 @@ end
1465
1466
  リクエストスコープにおいて、`logger`ヘルパーは`Logger`インスタンスを作り出します。
1466
1467
 
1467
1468
 
1468
- ``` ruby
1469
+ ```ruby
1469
1470
  get '/' do
1470
1471
  logger.info "loading data"
1471
1472
  # ...
@@ -1476,7 +1477,7 @@ end
1476
1477
 
1477
1478
  ノート: ロギングは、`Sinatra::Application`に対してのみデフォルトで有効にされているので、`Sinatra::Base`を継承している場合は、ユーザがこれを有効化する必要があります。
1478
1479
 
1479
- ``` ruby
1480
+ ```ruby
1480
1481
  class MyApp < Sinatra::Base
1481
1482
  configure :production, :development do
1482
1483
  enable :logging
@@ -1490,7 +1491,7 @@ end
1490
1491
 
1491
1492
  `send_file`か静的ファイルを使う時、SinatraがMIMEタイプを理解できない場合があります。その時は `mime_type` を使ってファイル拡張子毎に登録して下さい。
1492
1493
 
1493
- ``` ruby
1494
+ ```ruby
1494
1495
  configure do
1495
1496
  mime_type :foo, 'text/foo'
1496
1497
  end
@@ -1498,7 +1499,7 @@ end
1498
1499
 
1499
1500
  これは`content_type`ヘルパーで利用することができます:
1500
1501
 
1501
- ``` ruby
1502
+ ```ruby
1502
1503
  get '/' do
1503
1504
  content_type :foo
1504
1505
  "foo foo foo"
@@ -1509,7 +1510,7 @@ end
1509
1510
 
1510
1511
  URLを生成するためには`url`ヘルパーメソッドが使えます。Hamlではこのようにします。
1511
1512
 
1512
- ``` ruby
1513
+ ```ruby
1513
1514
  %a{:href => url('/foo')} foo
1514
1515
  ```
1515
1516
 
@@ -1521,7 +1522,7 @@ URLを生成するためには`url`ヘルパーメソッドが使えます。Ham
1521
1522
 
1522
1523
  `redirect` ヘルパーメソッドを使うことで、ブラウザをリダイレクトさせることができます。
1523
1524
 
1524
- ``` ruby
1525
+ ```ruby
1525
1526
  get '/foo' do
1526
1527
  redirect to('/bar')
1527
1528
  end
@@ -1529,14 +1530,14 @@ end
1529
1530
 
1530
1531
  他に追加されるパラメータは、`halt`に渡される引数と同様に取り扱われます。
1531
1532
 
1532
- ``` ruby
1533
+ ```ruby
1533
1534
  redirect to('/bar'), 303
1534
- redirect 'http://google.com', 'wrong place, buddy'
1535
+ redirect 'http://www.google.com/', 'wrong place, buddy'
1535
1536
  ```
1536
1537
 
1537
1538
  また、`redirect back`を使えば、簡単にユーザが来たページへ戻るリダイレクトを作れます。
1538
1539
 
1539
- ``` ruby
1540
+ ```ruby
1540
1541
  get '/foo' do
1541
1542
  "<a href='/bar'>do something</a>"
1542
1543
  end
@@ -1550,13 +1551,13 @@ end
1550
1551
  redirectに引数を渡すには、それをクエリーに追加するか、
1551
1552
 
1552
1553
 
1553
- ``` ruby
1554
+ ```ruby
1554
1555
  redirect to('/bar?sum=42')
1555
1556
  ```
1556
1557
 
1557
1558
  または、セッションを使います。
1558
1559
 
1559
- ``` ruby
1560
+ ```ruby
1560
1561
  enable :sessions
1561
1562
 
1562
1563
  get '/foo' do
@@ -1575,7 +1576,7 @@ end
1575
1576
 
1576
1577
  キャッシュ制御ヘッダ(Cache-Control header)は、次のように簡単に設定できます。
1577
1578
 
1578
- ``` ruby
1579
+ ```ruby
1579
1580
  get '/' do
1580
1581
  cache_control :public
1581
1582
  "キャッシュしました!"
@@ -1584,7 +1585,7 @@ end
1584
1585
 
1585
1586
  ヒント: キャッシングをbeforeフィルタ内で設定します。
1586
1587
 
1587
- ``` ruby
1588
+ ```ruby
1588
1589
  before do
1589
1590
  cache_control :public, :must_revalidate, :max_age => 60
1590
1591
  end
@@ -1592,7 +1593,7 @@ end
1592
1593
 
1593
1594
  `expires`ヘルパーを対応するヘッダに使っている場合は、キャッシュ制御は自動で設定されます。
1594
1595
 
1595
- ``` ruby
1596
+ ```ruby
1596
1597
  before do
1597
1598
  expires 500, :public, :must_revalidate
1598
1599
  end
@@ -1600,7 +1601,7 @@ end
1600
1601
 
1601
1602
  キャッシュを適切に使うために、`etag`または`last_modified`を使うことを検討してください。これらのヘルパーを、重い仕事をさせる *前* に呼ぶことを推奨します。そうすれば、クライアントが既にキャッシュに最新版を持っている場合はレスポンスを直ちに破棄するようになります。
1602
1603
 
1603
- ``` ruby
1604
+ ```ruby
1604
1605
  get '/article/:id' do
1605
1606
  @article = Article.find params['id']
1606
1607
  last_modified @article.updated_at
@@ -1609,16 +1610,16 @@ get '/article/:id' do
1609
1610
  end
1610
1611
  ```
1611
1612
 
1612
- また、[weak ETag](http://ja.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation)を使うこともできます。
1613
+ また、[weak ETag](https://ja.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation)を使うこともできます。
1613
1614
 
1614
- ``` ruby
1615
+ ```ruby
1615
1616
  etag @article.sha1, :weak
1616
1617
  ```
1617
1618
 
1618
1619
  これらのヘルパーは、キャッシングをしてくれませんが、必要な情報をキャッシュに与えてくれます。もし手早いリバースプロキシキャッシングの解決策をお探しなら、 [rack-cache](https://github.com/rtomayko/rack-cache)を試してください。
1619
1620
 
1620
1621
 
1621
- ``` ruby
1622
+ ```ruby
1622
1623
  require "rack/cache"
1623
1624
  require "sinatra"
1624
1625
 
@@ -1635,7 +1636,7 @@ end
1635
1636
 
1636
1637
  RFC 2616によれば、アプリケーションは、If-MatchまたはIf-None-Matchヘッダが`*`に設定されている場合には、要求されたリソースが既に存在するか否かに応じて、異なる振る舞いをすべきとなっています。Sinatraは、getのような安全なリクエストおよびputのような冪等なリクエストは既に存在しているものとして仮定し、一方で、他のリソース(例えば、postリクエスト)は新たなリソースとして取り扱われるよう仮定します。この振る舞いは、`:new_resource`オプションを渡すことで変更できます。
1637
1638
 
1638
- ``` ruby
1639
+ ```ruby
1639
1640
  get '/create' do
1640
1641
  etag '', :new_resource => true
1641
1642
  Article.create
@@ -1645,7 +1646,7 @@ end
1645
1646
 
1646
1647
  ここでもWeak ETagを使いたい場合は、`:kind`オプションを渡してください。
1647
1648
 
1648
- ``` ruby
1649
+ ```ruby
1649
1650
  etag '', :new_resource => true, :kind => :weak
1650
1651
  ```
1651
1652
 
@@ -1653,7 +1654,7 @@ etag '', :new_resource => true, :kind => :weak
1653
1654
 
1654
1655
  ファイルを送信するには、`send_file`ヘルパーメソッドを使います。
1655
1656
 
1656
- ``` ruby
1657
+ ```ruby
1657
1658
  get '/' do
1658
1659
  send_file 'foo.png'
1659
1660
  end
@@ -1661,7 +1662,7 @@ end
1661
1662
 
1662
1663
  これはオプションを取ることもできます。
1663
1664
 
1664
- ``` ruby
1665
+ ```ruby
1665
1666
  send_file 'foo.png', :type => :jpg
1666
1667
  ```
1667
1668
 
@@ -1699,7 +1700,7 @@ send_file 'foo.png', :type => :jpg
1699
1700
 
1700
1701
  受信するリクエストオブジェクトは、`request`メソッドを通じてリクエストレベル(フィルタ、ルーティング、エラーハンドラ)からアクセスすることができます。
1701
1702
 
1702
- ``` ruby
1703
+ ```ruby
1703
1704
  # アプリケーションが http://example.com/example で動作している場合
1704
1705
  get '/foo' do
1705
1706
  t = %w[text/css text/html application/javascript]
@@ -1734,7 +1735,7 @@ end
1734
1735
 
1735
1736
  `script_name`や`path_info`などのオプションは次のように利用することもできます。
1736
1737
 
1737
- ``` ruby
1738
+ ```ruby
1738
1739
  before { request.path_info = "/" }
1739
1740
 
1740
1741
  get "/" do
@@ -1744,7 +1745,7 @@ end
1744
1745
 
1745
1746
  `request.body`はIOまたはStringIOのオブジェクトです。
1746
1747
 
1747
- ``` ruby
1748
+ ```ruby
1748
1749
  post "/api" do
1749
1750
  request.body.rewind # 既に読まれているときのため
1750
1751
  data = JSON.parse request.body.read
@@ -1756,7 +1757,7 @@ end
1756
1757
 
1757
1758
  `attachment`ヘルパーを使って、レスポンスがブラウザに表示されるのではなく、ディスクに保存されることをブラウザに対し通知することができます。
1758
1759
 
1759
- ``` ruby
1760
+ ```ruby
1760
1761
  get '/' do
1761
1762
  attachment
1762
1763
  "保存しました!"
@@ -1765,7 +1766,7 @@ end
1765
1766
 
1766
1767
  ファイル名を渡すこともできます。
1767
1768
 
1768
- ``` ruby
1769
+ ```ruby
1769
1770
  get '/' do
1770
1771
  attachment "info.txt"
1771
1772
  "保存しました!"
@@ -1776,7 +1777,7 @@ end
1776
1777
 
1777
1778
  Sinatraは`time_for`ヘルパーメソッドを提供しており、それは与えられた値からTimeオブジェクトを生成します。これはまた`DateTime`、`Date`および類似のクラスを変換できます。
1778
1779
 
1779
- ``` ruby
1780
+ ```ruby
1780
1781
  get '/' do
1781
1782
  pass if Time.now > time_for('Dec 23, 2012')
1782
1783
  "まだ時間がある"
@@ -1785,7 +1786,7 @@ end
1785
1786
 
1786
1787
  このメソッドは、`expires`、`last_modified`といった種類のものの内部で使われています。そのため、アプリケーションにおいて、`time_for`をオーバーライドすることでそれらのメソッドの挙動を簡単に拡張できます。
1787
1788
 
1788
- ``` ruby
1789
+ ```ruby
1789
1790
  helpers do
1790
1791
  def time_for(value)
1791
1792
  case value
@@ -1807,7 +1808,7 @@ end
1807
1808
 
1808
1809
  `find_template`ヘルパーは、レンダリングのためのテンプレートファイルを見つけるために使われます。
1809
1810
 
1810
- ``` ruby
1811
+ ```ruby
1811
1812
  find_template settings.views, 'foo', Tilt[:haml] do |file|
1812
1813
  puts "could be #{file}"
1813
1814
  end
@@ -1816,7 +1817,7 @@ end
1816
1817
  この例はあまり有益ではありません。しかし、このメソッドを、独自の探索機構で働くようオーバーライドするなら有益になります。例えば、複数のビューディレクトリを使えるようにしたいときがあります。
1817
1818
 
1818
1819
 
1819
- ``` ruby
1820
+ ```ruby
1820
1821
  set :views, ['views', 'templates']
1821
1822
 
1822
1823
  helpers do
@@ -1828,7 +1829,7 @@ end
1828
1829
 
1829
1830
  他の例としては、異なるエンジン用の異なるディレクトリを使う場合です。
1830
1831
 
1831
- ``` ruby
1832
+ ```ruby
1832
1833
  set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'
1833
1834
 
1834
1835
  helpers do
@@ -1848,7 +1849,7 @@ end
1848
1849
 
1849
1850
  どの環境でも起動時に1回だけ実行されます。
1850
1851
 
1851
- ``` ruby
1852
+ ```ruby
1852
1853
  configure do
1853
1854
  # 1つのオプションをセット
1854
1855
  set :option, 'value'
@@ -1869,7 +1870,7 @@ end
1869
1870
 
1870
1871
  環境設定(`RACK_ENV`環境変数)が`:production`に設定されている時だけ実行する方法:
1871
1872
 
1872
- ``` ruby
1873
+ ```ruby
1873
1874
  configure :production do
1874
1875
  ...
1875
1876
  end
@@ -1877,7 +1878,7 @@ end
1877
1878
 
1878
1879
  環境設定が`:production`か`:test`に設定されている時だけ実行する方法:
1879
1880
 
1880
- ``` ruby
1881
+ ```ruby
1881
1882
  configure :production, :test do
1882
1883
  ...
1883
1884
  end
@@ -1885,7 +1886,7 @@ end
1885
1886
 
1886
1887
  設定したオプションには`settings`からアクセスできます:
1887
1888
 
1888
- ``` ruby
1889
+ ```ruby
1889
1890
  configure do
1890
1891
  set :foo, 'bar'
1891
1892
  end
@@ -1899,26 +1900,26 @@ end
1899
1900
 
1900
1901
  ### 攻撃防御に対する設定
1901
1902
 
1902
- Sinatraは、[Rack::Protection](https://github.com/rkh/rack-protection#readme)を使って、アプリケーションを多発する日和見的攻撃から守っています。この挙動は簡単に無効化できます(これはアプリケーションを大量の脆弱性攻撃に晒すことになります)。
1903
+ Sinatraは、[Rack::Protection](https://github.com/sinatra/rack-protection#readme)を使って、アプリケーションを多発する日和見的攻撃から守っています。この挙動は簡単に無効化できます(これはアプリケーションを大量の脆弱性攻撃に晒すことになります)。
1903
1904
 
1904
- ``` ruby
1905
+ ```ruby
1905
1906
  disable :protection
1906
1907
  ```
1907
1908
 
1908
1909
  単一の防御層を外すためには、`protection`をオプションハッシュにセットします。
1909
1910
 
1910
- ``` ruby
1911
+ ```ruby
1911
1912
  set :protection, :except => :path_traversal
1912
1913
  ```
1913
1914
  また配列を渡して、複数の防御を無効にすることもできます。
1914
1915
 
1915
- ``` ruby
1916
+ ```ruby
1916
1917
  set :protection, :except => [:path_traversal, :session_hijacking]
1917
1918
  ```
1918
1919
 
1919
1920
  デフォルトでSinatraは、`:sessions`が有効になっている場合、セッションベースの防御だけを設定します。しかし、自身でセッションを設定したい場合があります。その場合は、`:session`オプションを渡すことにより、セッションベースの防御を設定することができます。
1920
1921
 
1921
- ``` ruby
1922
+ ```ruby
1922
1923
  use Rack::Session::Pool
1923
1924
  set :protection, :session => true
1924
1925
  ```
@@ -2073,13 +2074,13 @@ set :protection, :session => true
2073
2074
 
2074
2075
  異なる環境を走らせるには、`RACK_ENV`環境変数を設定します。
2075
2076
 
2076
- ``` shell
2077
+ ```shell
2077
2078
  RACK_ENV=production ruby my_app.rb
2078
2079
  ```
2079
2080
 
2080
2081
  既定メソッド、`development?`、`test?`および`production?`を、現在の環境設定を確認するために使えます。
2081
2082
 
2082
- ``` ruby
2083
+ ```ruby
2083
2084
  get '/' do
2084
2085
  if settings.development?
2085
2086
  "development!"
@@ -2097,7 +2098,7 @@ end
2097
2098
 
2098
2099
  `Sinatra::NotFound`例外が発生したとき、またはレスポンスのステータスコードが404のときに、`not_found`ハンドラが発動します。
2099
2100
 
2100
- ``` ruby
2101
+ ```ruby
2101
2102
  not_found do
2102
2103
  'ファイルが存在しません'
2103
2104
  end
@@ -2107,7 +2108,7 @@ end
2107
2108
 
2108
2109
  `error`ハンドラはルーティングブロックまたはフィルタ内で例外が発生したときはいつでも発動します。例外オブジェクトはRack変数`sinatra.error`から取得できます。
2109
2110
 
2110
- ``` ruby
2111
+ ```ruby
2111
2112
  error do
2112
2113
  'エラーが発生しました。 - ' + env['sinatra.error'].message
2113
2114
  end
@@ -2115,7 +2116,7 @@ end
2115
2116
 
2116
2117
  エラーをカスタマイズする場合は、
2117
2118
 
2118
- ``` ruby
2119
+ ```ruby
2119
2120
  error MyCustomError do
2120
2121
  'エラーメッセージ...' + env['sinatra.error'].message
2121
2122
  end
@@ -2123,7 +2124,7 @@ end
2123
2124
 
2124
2125
  と書いておいて、下記のように呼び出します。
2125
2126
 
2126
- ``` ruby
2127
+ ```ruby
2127
2128
  get '/' do
2128
2129
  raise MyCustomError, '何かがまずかったようです'
2129
2130
  end
@@ -2137,7 +2138,7 @@ end
2137
2138
 
2138
2139
  あるいは、ステータスコードに対応するエラーハンドラを設定することもできます。
2139
2140
 
2140
- ``` ruby
2141
+ ```ruby
2141
2142
  error 403 do
2142
2143
  'Access forbidden'
2143
2144
  end
@@ -2149,7 +2150,7 @@ end
2149
2150
 
2150
2151
  範囲指定もできます。
2151
2152
 
2152
- ``` ruby
2153
+ ```ruby
2153
2154
  error 400..510 do
2154
2155
  'Boom'
2155
2156
  end
@@ -2164,7 +2165,7 @@ SinatraはRuby製Webフレームワークのミニマルな標準的インタフ
2164
2165
 
2165
2166
  Sinatraはトップレベルの`use`メソッドを通して、Rackミドルウェアパイプラインの構築を楽にします。
2166
2167
 
2167
- ``` ruby
2168
+ ```ruby
2168
2169
  require 'sinatra'
2169
2170
  require 'my_custom_middleware'
2170
2171
 
@@ -2176,9 +2177,9 @@ get '/hello' do
2176
2177
  end
2177
2178
  ```
2178
2179
 
2179
- `use`の文法は、[Rack::Builder](http://rubydoc.info/github/rack/rack/master/Rack/Builder)DSLで定義されているそれ(rackupファイルで最もよく使われる)と同じです。例えば `use`メソッドは複数の引数、そしてブロックも取ることができます。
2180
+ `use`の文法は、[Rack::Builder](http://www.rubydoc.info/github/rack/rack/master/Rack/Builder)DSLで定義されているそれ(rackupファイルで最もよく使われる)と同じです。例えば `use`メソッドは複数の引数、そしてブロックも取ることができます。
2180
2181
 
2181
- ``` ruby
2182
+ ```ruby
2182
2183
  use Rack::Auth::Basic do |username, password|
2183
2184
  username == 'admin' && password == 'secret'
2184
2185
  end
@@ -2194,9 +2195,9 @@ Rackは、ロギング、デバッギング、URLルーティング、認証、
2194
2195
 
2195
2196
  ## テスト(Testing)
2196
2197
 
2197
- SinatraでのテストはRackベースのテストライブラリまたはフレームワークを使って書くことができます。[Rack::Test](http://rdoc.info/github/brynary/rack-test/master/frames)をお薦めします。
2198
+ SinatraでのテストはRackベースのテストライブラリまたはフレームワークを使って書くことができます。[Rack::Test](http://www.rubydoc.info/github/brynary/rack-test/master/frames)をお薦めします。
2198
2199
 
2199
- ``` ruby
2200
+ ```ruby
2200
2201
  require 'my_sinatra_app'
2201
2202
  require 'minitest/autorun'
2202
2203
  require 'rack/test'
@@ -2231,7 +2232,7 @@ end
2231
2232
 
2232
2233
  軽量なアプリケーションであれば、トップレベルでアプリケーションを定義していくことはうまくいきますが、再利用性可能なコンポーネント、例えばRackミドルウェア、RailsのMetal、サーバコンポーネントを含むシンプルなライブラリ、あるいはSinatraの拡張プログラムを構築するような場合、これは無視できない欠点を持つものとなります。トップレベルは、軽量なアプリケーションのスタイルにおける設定(例えば、単一のアプリケーションファイル、`./public`および`./views`ディレクトリ、ロギング、例外詳細ページなど)を仮定しています。そこで`Sinatra::Base`の出番です。
2233
2234
 
2234
- ``` ruby
2235
+ ```ruby
2235
2236
  require 'sinatra/base'
2236
2237
 
2237
2238
  class MyApp < Sinatra::Base
@@ -2250,7 +2251,7 @@ end
2250
2251
  (そうしない場合、SinatraのDSLメソッドの全てがmainの名前空間にインポートされます)
2251
2252
  * ルーティング、エラーハンドラ、フィルタ、オプションを`Sinatra::Base`のサブクラスに書く
2252
2253
 
2253
- `Sinatra::Base`はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルトで無効になっています。利用可能なオプションとその挙動の詳細については[Configuring Settings](http://sinatra.github.com/configuration.html)(英語)をご覧下さい。
2254
+ `Sinatra::Base`はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルトで無効になっています。利用可能なオプションとその挙動の詳細については[Configuring Settings](http://www.sinatrarb.com/configuration.html)(英語)をご覧下さい。
2254
2255
 
2255
2256
  もしもクラシックスタイルと同じような挙動のアプリケーションをトップレベルで定義させる必要があれば、`Sinatra::Application`をサブクラス化させてください。
2256
2257
 
@@ -2318,7 +2319,7 @@ end
2318
2319
  <tr>
2319
2320
  <td>static</td>
2320
2321
  <td>true</td>
2321
- <td>false</td>
2322
+ <td>File.exist?(public_folder)</td>
2322
2323
  <td>true</td>
2323
2324
  </tr>
2324
2325
  </table>
@@ -2327,7 +2328,7 @@ end
2327
2328
 
2328
2329
  モジュラーアプリケーションを開始、つまり`run!`を使って開始させる二種類のやり方があります。
2329
2330
 
2330
- ``` ruby
2331
+ ```ruby
2331
2332
  # my_app.rb
2332
2333
  require 'sinatra/base'
2333
2334
 
@@ -2341,13 +2342,13 @@ end
2341
2342
 
2342
2343
  として、次のように起動するか、
2343
2344
 
2344
- ``` shell
2345
+ ```shell
2345
2346
  ruby my_app.rb
2346
2347
  ```
2347
2348
 
2348
2349
  または、Rackハンドラを使えるようにする`config.ru`ファイルを書いて、
2349
2350
 
2350
- ``` ruby
2351
+ ```ruby
2351
2352
  # config.ru (rackupで起動)
2352
2353
  require './my_app'
2353
2354
  run MyApp
@@ -2355,7 +2356,7 @@ run MyApp
2355
2356
 
2356
2357
  起動します。
2357
2358
 
2358
- ``` shell
2359
+ ```shell
2359
2360
  rackup -p 4567
2360
2361
  ```
2361
2362
 
@@ -2363,7 +2364,7 @@ rackup -p 4567
2363
2364
 
2364
2365
  アプリケーションファイルと、
2365
2366
 
2366
- ``` ruby
2367
+ ```ruby
2367
2368
  # app.rb
2368
2369
  require 'sinatra'
2369
2370
 
@@ -2374,7 +2375,7 @@ end
2374
2375
 
2375
2376
  対応する`config.ru`を書きます。
2376
2377
 
2377
- ``` ruby
2378
+ ```ruby
2378
2379
  require './app'
2379
2380
  run Sinatra::Application
2380
2381
  ```
@@ -2396,7 +2397,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
2396
2397
 
2397
2398
  このエンドポイントには、別のSinatraアプリケーションまたは他のRackベースのアプリケーション(Rails/Ramaze/Camping/…)が用いられるでしょう。
2398
2399
 
2399
- ``` ruby
2400
+ ```ruby
2400
2401
  require 'sinatra/base'
2401
2402
 
2402
2403
  class LoginScreen < Sinatra::Base
@@ -2431,7 +2432,7 @@ end
2431
2432
 
2432
2433
  新しいアプリケーションを実行時に、定数に割り当てることなく生成したくなる場合があるでしょう。`Sinatra.new`を使えばそれができます。
2433
2434
 
2434
- ``` ruby
2435
+ ```ruby
2435
2436
  require 'sinatra/base'
2436
2437
  my_app = Sinatra.new { get('/') { "hi" } }
2437
2438
  my_app.run!
@@ -2461,7 +2462,7 @@ end
2461
2462
 
2462
2463
  これはまた、Sinatraをミドルウェアとして利用することを極めて簡単にします。
2463
2464
 
2464
- ``` ruby
2465
+ ```ruby
2465
2466
  require 'sinatra/base'
2466
2467
 
2467
2468
  use Sinatra do
@@ -2485,7 +2486,7 @@ run RailsProject::Application
2485
2486
 
2486
2487
  `set`によって作られたオプションはクラスレベルのメソッドです。
2487
2488
 
2488
- ``` ruby
2489
+ ```ruby
2489
2490
  class MyApp < Sinatra::Base
2490
2491
  # アプリケーションスコープの中だよ!
2491
2492
  set :foo, 42
@@ -2516,7 +2517,7 @@ end
2516
2517
  このスコープの内側からは`request`や`session`オブジェクトにアクセスすることができ、`erb`や`haml`のようなレンダリングメソッドを呼び出すことができます。
2517
2518
  リクエストスコープの内側からは、`settings`ヘルパーによってアプリケーションスコープにアクセスすることができます。
2518
2519
 
2519
- ``` ruby
2520
+ ```ruby
2520
2521
  class MyApp < Sinatra::Base
2521
2522
  # アプリケーションスコープの中だよ!
2522
2523
  get '/define_route/:name' do
@@ -2560,7 +2561,7 @@ mixin](https://github.com/sinatra/sinatra/blob/ca06364/lib/sinatra/base.rb#L1609
2560
2561
 
2561
2562
  Sinatraアプリケーションは直接実行できます。
2562
2563
 
2563
- ``` shell
2564
+ ```shell
2564
2565
  ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
2565
2566
  ```
2566
2567
 
@@ -2575,6 +2576,37 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
2575
2576
  -x # mutex lockを付ける (デフォルトはoff)
2576
2577
  ```
2577
2578
 
2579
+ ### マルチスレッド
2580
+
2581
+ _この[StackOverflow][so-answer]でのKonstantinによる回答を言い換えています。_
2582
+
2583
+ Sinatraでは同時実行モデルを負わせることはできませんが、根本的な部分であるThinやPuma、WebrickのようなRackハンドラ(サーバー)部分に委ねることができます。
2584
+ Sinatra自身はスレッドセーフであり、もしRackハンドラが同時実行モデルのスレッドを使用していても問題はありません。
2585
+ つまり、これはサーバーを起動させる時、特定のRackハンドラに対して正しい起動処理を特定することが出来ます。
2586
+ この例はThinサーバーをマルチスレッドで起動する方法のデモです。
2587
+
2588
+ ```ruby
2589
+ # app.rb
2590
+
2591
+ require 'sinatra/base'
2592
+
2593
+ class App < Sinatra::Base
2594
+ get '/' do
2595
+ "Hello, World"
2596
+ end
2597
+ end
2598
+
2599
+ App.run!
2600
+ ```
2601
+
2602
+ サーバーを開始するコマンドです。
2603
+
2604
+ ```
2605
+ thin --threaded start
2606
+ ```
2607
+
2608
+ [so-answer]: http://stackoverflow.com/questions/6278817/is-sinatra-multi-threaded/6282999#6282999)
2609
+
2578
2610
  ## 必要環境
2579
2611
 
2580
2612
  次のRubyバージョンが公式にサポートされています。
@@ -2636,7 +2668,7 @@ Sinatraは現在、Cardinal、SmallRuby、BlueRubyまたは1.8.7以前のバー
2636
2668
 
2637
2669
  Sinatraの最新開発版のコードを使いたい場合は、マスターブランチに対してアプリケーションを走らせて構いません。ある程度安定しています。また、適宜プレリリース版gemをpushしているので、
2638
2670
 
2639
- ``` shell
2671
+ ```shell
2640
2672
  gem install sinatra --pre
2641
2673
  ```
2642
2674
 
@@ -2644,11 +2676,11 @@ gem install sinatra --pre
2644
2676
 
2645
2677
  ### Bundlerを使う場合
2646
2678
 
2647
- 最新のSinatraでアプリケーションを動作させたい場合には、[Bundler](http://gembundler.com/)を使うのがお薦めのやり方です。
2679
+ 最新のSinatraでアプリケーションを動作させたい場合には、[Bundler](http://bundler.io)を使うのがお薦めのやり方です。
2648
2680
 
2649
2681
  まず、Bundlerがなければそれをインストールします。
2650
2682
 
2651
- ``` shell
2683
+ ```shell
2652
2684
  gem install bundler
2653
2685
  ```
2654
2686
 
@@ -2667,7 +2699,7 @@ gem 'activerecord', '~> 3.0' # ActiveRecord 3.xが必要かもしれません
2667
2699
 
2668
2700
  これで、以下のようにしてアプリケーションを起動することができます。
2669
2701
 
2670
- ``` shell
2702
+ ```shell
2671
2703
  bundle exec ruby myapp.rb
2672
2704
  ```
2673
2705
 
@@ -2675,7 +2707,7 @@ bundle exec ruby myapp.rb
2675
2707
 
2676
2708
  ローカルにクローンを作って、`sinatra/lib`ディレクトリを`$LOAD_PATH`に追加してアプリケーションを起動します。
2677
2709
 
2678
- ``` shell
2710
+ ```shell
2679
2711
  cd myapp
2680
2712
  git clone git://github.com/sinatra/sinatra.git
2681
2713
  ruby -I sinatra/lib myapp.rb
@@ -2683,7 +2715,7 @@ ruby -I sinatra/lib myapp.rb
2683
2715
 
2684
2716
  追ってSinatraのソースを更新する方法。
2685
2717
 
2686
- ``` shell
2718
+ ```shell
2687
2719
  cd myapp/sinatra
2688
2720
  git pull
2689
2721
  ```
@@ -2692,7 +2724,7 @@ git pull
2692
2724
 
2693
2725
  Sinatraのgemを自身でビルドすることもできます。
2694
2726
 
2695
- ``` shell
2727
+ ```shell
2696
2728
  git clone git://github.com/sinatra/sinatra.git
2697
2729
  cd sinatra
2698
2730
  rake sinatra.gemspec
@@ -2701,7 +2733,7 @@ rake install
2701
2733
 
2702
2734
  gemをルートとしてインストールする場合は、最後のステップはこうなります。
2703
2735
 
2704
- ``` shell
2736
+ ```shell
2705
2737
  sudo rake install
2706
2738
  ```
2707
2739
 
@@ -2711,14 +2743,14 @@ Sinatraは、[Semantic Versioning](http://semver.org/)におけるSemVerおよ
2711
2743
 
2712
2744
  ## 参考文献
2713
2745
 
2714
- * [プロジェクトサイト](http://sinatra.github.com/) - ドキュメント、ニュース、他のリソースへのリンクがあります。
2715
- * [プロジェクトに参加(貢献)する](http://sinatra.github.com/contributing.html) - バグレポート パッチの送信、サポートなど
2716
- * [Issue tracker](http://github.com/sinatra/sinatra/issues)
2717
- * [Twitter](http://twitter.com/sinatra)
2746
+ * [プロジェクトサイト](http://www.sinatrarb.com/) - ドキュメント、ニュース、他のリソースへのリンクがあります。
2747
+ * [プロジェクトに参加(貢献)する](http://www.sinatrarb.com/contributing.html) - バグレポート パッチの送信、サポートなど
2748
+ * [Issue tracker](https://github.com/sinatra/sinatra/issues)
2749
+ * [Twitter](https://twitter.com/sinatra)
2718
2750
  * [メーリングリスト](http://groups.google.com/group/sinatrarb/topics)
2719
2751
  * http://freenode.net上のIRC: [#sinatra](irc://chat.freenode.net/#sinatra)
2720
2752
  * [Sinatra Book](https://github.com/sinatra/sinatra-book/) クックブック、チュートリアル
2721
2753
  * [Sinatra Recipes](http://recipes.sinatrarb.com/) コミュニティによるレシピ集
2722
- * http://rubydoc.info上のAPIドキュメント: [最新版(latest release)用](http://rubydoc.info/gems/sinatra)または[現在のHEAD用](http://rubydoc.info/github/sinatra/sinatra)
2723
- * [CIサーバ](http://travis-ci.org/sinatra/sinatra)
2754
+ * http://www.rubydoc.info/上のAPIドキュメント: [最新版(latest release)用](http://www.rubydoc.info/gems/sinatra)または[現在のHEAD用](http://www.rubydoc.info/github/sinatra/sinatra)
2755
+ * [CIサーバ](https://travis-ci.org/sinatra/sinatra)
2724
2756
  * [Greenbear Laboratory Rack日本語マニュアル](http://route477.net/w/RackReferenceJa.html)