mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
Apply syntax highlight to README.jp.md
This commit is contained in:
parent
326b60169b
commit
66a583b86a
1 changed files with 531 additions and 375 deletions
156
README.jp.md
156
README.jp.md
|
@ -5,11 +5,13 @@
|
|||
|
||||
[DSL](http://ja.wikipedia.org/wiki/ドメイン固有言語)です。
|
||||
|
||||
``` ruby
|
||||
# myapp.rb
|
||||
require 'sinatra'
|
||||
get '/' do
|
||||
'Hello world!'
|
||||
end
|
||||
```
|
||||
|
||||
gemをインストールして動かしてみる。
|
||||
|
||||
|
@ -136,6 +138,7 @@ end
|
|||
|
||||
ルートにはユーザエージェントのようなさまざまな条件を含めることができます。
|
||||
|
||||
``` ruby
|
||||
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
|
||||
"You're using Songbird version #{params[:agent][0]}"
|
||||
end
|
||||
|
@ -143,9 +146,11 @@ end
|
|||
get '/foo' do
|
||||
# Matches non-songbird browsers
|
||||
end
|
||||
```
|
||||
|
||||
ほかに`host_name`と`provides`条件が利用可能です:
|
||||
|
||||
``` ruby
|
||||
get '/', :host_name => /^admin\./ do
|
||||
"Admin Area, Access denied!"
|
||||
end
|
||||
|
@ -157,9 +162,11 @@ end
|
|||
get '/', :provides => ['rss', 'atom', 'xml'] do
|
||||
builder :feed
|
||||
end
|
||||
```
|
||||
|
||||
独自の条件を定義することも簡単にできます:
|
||||
|
||||
``` ruby
|
||||
set(:probability) { |value| condition { rand <= value } }
|
||||
|
||||
get '/win_a_car', :probability => 0.1 do
|
||||
|
@ -169,6 +176,7 @@ end
|
|||
get '/win_a_car' do
|
||||
"Sorry, you lost."
|
||||
end
|
||||
```
|
||||
|
||||
### 戻り値
|
||||
|
||||
|
@ -191,6 +199,7 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
|
|||
|
||||
そのように、例えばストリーミングの例を簡単に実装することができます:
|
||||
|
||||
``` ruby
|
||||
class Stream
|
||||
def each
|
||||
100.times { |i| yield "#{i}\n" }
|
||||
|
@ -198,13 +207,16 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
|
|||
end
|
||||
|
||||
get('/') { Stream.new }
|
||||
```
|
||||
|
||||
## 静的ファイル
|
||||
|
||||
静的ファイルは`./public`ディレクトリから配信されます。
|
||||
`:public_folder`オプションを指定することで別の場所を指定することができます。
|
||||
|
||||
``` ruby
|
||||
set :public_folder, File.dirname(__FILE__) + '/static'
|
||||
```
|
||||
|
||||
注意: この静的ファイル用のディレクトリ名はURL中に含まれません。
|
||||
例えば、`./public/css/style.css`は`http://example.com/css/style.css`でアクセスできます。
|
||||
|
@ -214,7 +226,9 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
|
|||
テンプレートは`./views`ディレクトリ下に配置されています。
|
||||
他のディレクトリを使用する場合の例:
|
||||
|
||||
``` ruby
|
||||
set :views, File.dirname(__FILE__) + '/templates'
|
||||
```
|
||||
|
||||
テンプレートはシンボルを使用して参照させることを覚えておいて下さい。
|
||||
サブデレクトリでもこの場合は`:'subdir/template'`のようにします。
|
||||
|
@ -224,12 +238,14 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
|
|||
|
||||
hamlを使うにはhamlライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# hamlを読み込みます
|
||||
require 'haml'
|
||||
|
||||
get '/' do
|
||||
haml :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.haml`を表示します。
|
||||
|
||||
|
@ -239,20 +255,24 @@ options](http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options)
|
|||
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||
を参照してそれぞれ設定を上書きして下さい。
|
||||
|
||||
``` ruby
|
||||
set :haml, {:format => :html5 } # デフォルトのフォーマットは:xhtml
|
||||
|
||||
get '/' do
|
||||
haml :index, :haml_options => {:format => :html4 } # 上書き
|
||||
end
|
||||
```
|
||||
|
||||
### Erb テンプレート
|
||||
|
||||
``` ruby
|
||||
# erbを読み込みます
|
||||
require 'erb'
|
||||
|
||||
get '/' do
|
||||
erb :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.erb`を表示します。
|
||||
|
||||
|
@ -260,12 +280,14 @@ Configurations](http://www.sinatrarb.com/configuration.html),
|
|||
|
||||
erubisテンプレートを表示するには、erubisライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# erubisを読み込みます
|
||||
require 'erubis'
|
||||
|
||||
get '/' do
|
||||
erubis :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.erubis`を表示します。
|
||||
|
||||
|
@ -286,12 +308,14 @@ builderを使うにはbuilderライブラリが必要です:
|
|||
|
||||
鋸を使うには鋸ライブラリが必要です:
|
||||
|
||||
```
|
||||
# 鋸を読み込みます
|
||||
require 'nokogiri'
|
||||
|
||||
get '/' do
|
||||
nokogiri :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.nokogiri`を表示します。
|
||||
|
||||
|
@ -299,12 +323,14 @@ builderを使うにはbuilderライブラリが必要です:
|
|||
|
||||
Sassテンプレートを使うにはsassライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# hamlかsassを読み込みます
|
||||
require 'sass'
|
||||
|
||||
get '/stylesheet.css' do
|
||||
sass :stylesheet
|
||||
end
|
||||
```
|
||||
|
||||
`./views/stylesheet.sass`を表示します。
|
||||
|
||||
|
@ -314,22 +340,26 @@ options](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
|||
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||
を参照してそれぞれ設定を上書きして下さい。
|
||||
|
||||
``` ruby
|
||||
set :sass, {:style => :compact } # デフォルトのSass styleは :nested
|
||||
|
||||
get '/stylesheet.css' do
|
||||
sass :stylesheet, :sass_options => {:style => :expanded } # 上書き
|
||||
end
|
||||
```
|
||||
|
||||
### Scss テンプレート
|
||||
|
||||
Scssテンプレートを使うにはsassライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# hamlかsassを読み込みます
|
||||
require 'sass'
|
||||
|
||||
get '/stylesheet.css' do
|
||||
scss :stylesheet
|
||||
end
|
||||
```
|
||||
|
||||
`./views/stylesheet.scss`を表示します。
|
||||
|
||||
|
@ -339,22 +369,26 @@ options](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
|||
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||
を参照してそれぞれ設定を上書きして下さい。
|
||||
|
||||
``` ruby
|
||||
set :scss, :style => :compact # デフォルトのScss styleは:nested
|
||||
|
||||
get '/stylesheet.css' do
|
||||
scss :stylesheet, :style => :expanded # 上書き
|
||||
end
|
||||
```
|
||||
|
||||
### Less テンプレート
|
||||
|
||||
Lessテンプレートを使うにはlessライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# lessを読み込みます
|
||||
require 'less'
|
||||
|
||||
get '/stylesheet.css' do
|
||||
less :stylesheet
|
||||
end
|
||||
```
|
||||
|
||||
`./views/stylesheet.less`を表示します。
|
||||
|
||||
|
@ -362,70 +396,87 @@ Lessテンプレートを使うにはlessライブラリが必要です:
|
|||
|
||||
Liquidテンプレートを使うにはliquidライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# liquidを読み込みます
|
||||
require 'liquid'
|
||||
|
||||
get '/' do
|
||||
liquid :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.liquid`を表示します。
|
||||
|
||||
LiquidテンプレートからRubyのメソッド(`yield`を除く)を呼び出すことができないため、
|
||||
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
||||
|
||||
``` ruby
|
||||
liquid :index, :locals => { :key => 'value' }
|
||||
```
|
||||
|
||||
### Markdown テンプレート
|
||||
|
||||
Markdownテンプレートを使うにはrdiscountライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# rdiscountを読み込みます
|
||||
require "rdiscount"
|
||||
|
||||
get '/' do
|
||||
markdown :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.markdown`を表示します。(`md`と`mkd`も妥当な拡張子です)
|
||||
|
||||
markdownからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||
|
||||
``` ruby
|
||||
erb :overview, :locals => { :text => markdown(:introduction) }
|
||||
```
|
||||
|
||||
他のテンプレートからmarkdownメソッドを呼び出してもよいことに注意してください:
|
||||
|
||||
``` haml
|
||||
%h1 Hello From Haml!
|
||||
%p= markdown(:greetings)
|
||||
```
|
||||
|
||||
### Textile テンプレート
|
||||
|
||||
Textileテンプレートを使うにはRedClothライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# redclothを読み込みます
|
||||
require "redcloth"
|
||||
|
||||
get '/' do
|
||||
textile :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.textile`を表示します。
|
||||
|
||||
textileからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||
|
||||
``` ruby
|
||||
erb :overview, :locals => { :text => textile(:introduction) }
|
||||
```
|
||||
|
||||
他のテンプレートからtextileメソッドを呼び出してもよいことに注意してください:
|
||||
|
||||
``` haml
|
||||
%h1 Hello From Haml!
|
||||
%p= textile(:greetings)
|
||||
```
|
||||
|
||||
### RDoc テンプレート
|
||||
|
||||
RDocテンプレートを使うにはRDocライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# rdoc/markup/to_htmlを読み込みます
|
||||
require "rdoc"
|
||||
require "rdoc/markup/to_html"
|
||||
|
@ -433,47 +484,58 @@ RDocテンプレートを使うにはRDocライブラリが必要です:
|
|||
get '/' do
|
||||
rdoc :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.rdoc`を表示します。
|
||||
|
||||
rdocからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||
|
||||
``` ruby
|
||||
erb :overview, :locals => { :text => rdoc(:introduction) }
|
||||
```
|
||||
|
||||
他のテンプレートからrdocメソッドを呼び出してもよいことに注意してください:
|
||||
|
||||
``` haml
|
||||
%h1 Hello From Haml!
|
||||
%p= rdoc(:greetings)
|
||||
```
|
||||
|
||||
### Radius テンプレート
|
||||
|
||||
Radiusテンプレートを使うにはradiusライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# radiusを読み込みます
|
||||
require 'radius'
|
||||
|
||||
get '/' do
|
||||
radius :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.radius`を表示します。
|
||||
|
||||
RadiusテンプレートからRubyのメソッド(`yield`を除く)を呼び出すことができないため、
|
||||
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
||||
|
||||
``` ruby
|
||||
radius :index, :locals => { :key => 'value' }
|
||||
```
|
||||
|
||||
### Markaby テンプレート
|
||||
|
||||
Markabyテンプレートを使うにはmarkabyライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# markabyを読み込みます
|
||||
require 'markaby'
|
||||
|
||||
get '/' do
|
||||
markaby :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.mab`を表示します。
|
||||
|
||||
|
@ -481,12 +543,14 @@ Markabyテンプレートを使うにはmarkabyライブラリが必要です:
|
|||
|
||||
RABLテンプレートを使うにはrablライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# rablを読み込みます
|
||||
require 'rabl'
|
||||
|
||||
get '/' do
|
||||
rabl :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.rabl`を表示します。
|
||||
|
||||
|
@ -494,12 +558,14 @@ RABLテンプレートを使うにはrablライブラリが必要です:
|
|||
|
||||
Slimテンプレートを使うにはslimライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# slimを読み込みます
|
||||
require 'slim'
|
||||
|
||||
get '/' do
|
||||
slim :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.slim`を表示します。
|
||||
|
||||
|
@ -507,12 +573,14 @@ Slimテンプレートを使うにはslimライブラリが必要です:
|
|||
|
||||
Creoleテンプレートを使うにはcreoleライブラリが必要です:
|
||||
|
||||
``` ruby
|
||||
# creoleを読み込みます
|
||||
require 'creole'
|
||||
|
||||
get '/' do
|
||||
creole :index
|
||||
end
|
||||
```
|
||||
|
||||
`./views/index.creole`を表示します。
|
||||
|
||||
|
@ -520,20 +588,24 @@ Creoleテンプレートを使うにはcreoleライブラリが必要です:
|
|||
|
||||
CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリと\`coffee\`バイナリが必要です:
|
||||
|
||||
``` ruby
|
||||
# coffee-scriptを読み込みます
|
||||
require 'coffee-script'
|
||||
|
||||
get '/application.js' do
|
||||
coffee :application
|
||||
end
|
||||
```
|
||||
|
||||
`./views/application.coffee`を表示します。
|
||||
|
||||
### インラインテンプレート
|
||||
|
||||
``` ruby
|
||||
get '/' do
|
||||
haml '%div.title Hello World'
|
||||
end
|
||||
```
|
||||
|
||||
文字列をテンプレートとして表示します。
|
||||
|
||||
|
@ -543,17 +615,21 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
|||
ルートハンドラでセットされたインスタンス変数は
|
||||
テンプレート内で直接使うことができます。
|
||||
|
||||
``` ruby
|
||||
get '/:id' do
|
||||
@foo = Foo.find(params[:id])
|
||||
haml '%h1= @foo.name'
|
||||
end
|
||||
```
|
||||
|
||||
ローカル変数を明示的に定義することもできます。
|
||||
|
||||
``` ruby
|
||||
get '/:id' do
|
||||
foo = Foo.find(params[:id])
|
||||
haml '%h1= foo.name', :locals => { :foo => foo }
|
||||
end
|
||||
```
|
||||
|
||||
このやり方は他のテンプレート内で部分テンプレートとして表示する時に典型的に使用されます。
|
||||
|
||||
|
@ -561,6 +637,7 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
|||
|
||||
テンプレートはソースファイルの最後で定義することもできます。
|
||||
|
||||
``` ruby
|
||||
require 'rubygems'
|
||||
require 'sinatra'
|
||||
|
||||
|
@ -576,6 +653,7 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
|||
|
||||
@@ index
|
||||
%div.title Hello world!!!!!
|
||||
```
|
||||
|
||||
注意:
|
||||
sinatraをrequireするファイル内で定義されたファイル内テンプレートは自動的に読み込まれます。
|
||||
|
@ -586,6 +664,7 @@ sinatraをrequireするファイル内で定義されたファイル内テンプ
|
|||
|
||||
テンプレートはトップレベルの`template`メソッドで定義することができます。
|
||||
|
||||
``` ruby
|
||||
template :layout do
|
||||
"%html\n =yield\n"
|
||||
end
|
||||
|
@ -597,19 +676,23 @@ sinatraをrequireするファイル内で定義されたファイル内テンプ
|
|||
get '/' do
|
||||
haml :index
|
||||
end
|
||||
```
|
||||
|
||||
「layout」というテンプレートが存在する場合、そのテンプレートファイルは他のテンプレートが
|
||||
表示される度に使用されます。`:layout => false`することでlayoutsを無効にできます。
|
||||
|
||||
``` ruby
|
||||
get '/' do
|
||||
haml :index, :layout => !request.xhr?
|
||||
end
|
||||
```
|
||||
|
||||
## ヘルパー
|
||||
|
||||
トップレベルの`helpers`を使用してルートハンドラやテンプレートで使うヘルパメソッドを
|
||||
定義できます。
|
||||
|
||||
``` ruby
|
||||
helpers do
|
||||
def bar(name)
|
||||
"#{name}bar"
|
||||
|
@ -619,6 +702,7 @@ sinatraをrequireするファイル内で定義されたファイル内テンプ
|
|||
get '/:name' do
|
||||
bar(params[:name])
|
||||
end
|
||||
```
|
||||
|
||||
## フィルタ
|
||||
|
||||
|
@ -626,6 +710,7 @@ beforeフィルタはリクエストされたコンテキストを実行する
|
|||
リクエストとレスポンスを変更することができます。フィルタ内でセットされた
|
||||
インスタンス変数はルーティングとテンプレートで使用できます。
|
||||
|
||||
``` ruby
|
||||
before do
|
||||
@note = 'Hi!'
|
||||
request.path_info = '/foo/bar/baz'
|
||||
|
@ -635,19 +720,23 @@ beforeフィルタはリクエストされたコンテキストを実行する
|
|||
@note #=> 'Hi!'
|
||||
params[:splat] #=> 'bar/baz'
|
||||
end
|
||||
```
|
||||
|
||||
afterフィルタは同じコンテキストにあるリクエストの後に評価され、
|
||||
同じくリクエストとレスポンスを変更することができます。
|
||||
beforeフィルタとルートで設定されたインスタンス変数は、
|
||||
afterフィルタからアクセスすることができます:
|
||||
|
||||
``` ruby
|
||||
after do
|
||||
puts response.status
|
||||
end
|
||||
```
|
||||
|
||||
フィルタにはオプションとしてパターンを渡すことができ、
|
||||
この場合はリクエストのパスがパターンにマッチした場合のみフィルタが評価されます:
|
||||
|
||||
``` ruby
|
||||
before '/protected/*' do
|
||||
authenticate!
|
||||
end
|
||||
|
@ -655,33 +744,45 @@ afterフィルタからアクセスすることができます:
|
|||
after '/create/:slug' do |slug|
|
||||
session[:last_slug] = slug
|
||||
end
|
||||
```
|
||||
|
||||
## 強制終了
|
||||
|
||||
ルートかbeforeフィルタ内で直ちに実行を終了する方法:
|
||||
|
||||
``` ruby
|
||||
halt
|
||||
```
|
||||
|
||||
ステータスを指定することができます:
|
||||
|
||||
``` ruby
|
||||
halt 410
|
||||
```
|
||||
|
||||
body部を指定することもできます …
|
||||
|
||||
``` ruby
|
||||
halt 'ここにbodyを書く'
|
||||
```
|
||||
|
||||
ステータスとbody部を指定する …
|
||||
|
||||
``` ruby
|
||||
halt 401, '立ち去れ!'
|
||||
```
|
||||
|
||||
ヘッダを指定:
|
||||
|
||||
``` ruby
|
||||
halt 402, {'Content-Type' => 'text/plain'}, 'リベンジ'
|
||||
```
|
||||
|
||||
## パッシング(Passing)
|
||||
|
||||
ルートは`pass`を使って次のルートに飛ばすことができます:
|
||||
|
||||
``` ruby
|
||||
get '/guess/:who' do
|
||||
pass unless params[:who] == 'Frank'
|
||||
"見つかっちゃった!"
|
||||
|
@ -690,6 +791,7 @@ body部を指定することもできます …
|
|||
get '/guess/*' do
|
||||
"はずれです!"
|
||||
end
|
||||
```
|
||||
|
||||
ルートブロックからすぐに抜け出し、次にマッチするルートを実行します。
|
||||
マッチするルートが見当たらない場合は404が返されます。
|
||||
|
@ -698,6 +800,7 @@ body部を指定することもできます …
|
|||
|
||||
受信するリクエストオブジェクトは、\`request\`メソッドを通じてリクエストレベル(フィルタ、ルート、エラーハンドラ)からアクセスすることができます:
|
||||
|
||||
``` ruby
|
||||
# アプリケーションが http://example.com/example で動作している場合
|
||||
get '/foo' do
|
||||
request.body # クライアントによって送信されたリクエストボディ(下記参照)
|
||||
|
@ -723,42 +826,53 @@ body部を指定することもできます …
|
|||
request.secure? # false
|
||||
request.env # Rackによって渡された生のenvハッシュ
|
||||
end
|
||||
```
|
||||
|
||||
`script_name`や`path_info`などのオプションは次のように利用することもできます:
|
||||
|
||||
``` ruby
|
||||
before { request.path_info = "/" }
|
||||
|
||||
get "/" do
|
||||
"全てのリクエストはここに来る"
|
||||
end
|
||||
```
|
||||
|
||||
`request.body`はIOまたはStringIOのオブジェクトです:
|
||||
|
||||
``` ruby
|
||||
post "/api" do
|
||||
request.body.rewind # 既に読まれているときのため
|
||||
data = JSON.parse request.body.read
|
||||
"Hello #{data['name']}!"
|
||||
end
|
||||
```
|
||||
|
||||
## 設定
|
||||
|
||||
どの環境でも起動時に1回だけ実行されます。
|
||||
|
||||
``` ruby
|
||||
configure do
|
||||
...
|
||||
end
|
||||
```
|
||||
|
||||
環境(RACK\_ENV環境変数)が`:production`に設定されている時だけ実行する方法:
|
||||
|
||||
``` ruby
|
||||
configure :production do
|
||||
...
|
||||
end
|
||||
```
|
||||
|
||||
環境が`:production`か`:test`の場合に設定する方法:
|
||||
|
||||
``` ruby
|
||||
configure :production, :test do
|
||||
...
|
||||
end
|
||||
```
|
||||
|
||||
## エラーハンドリング
|
||||
|
||||
|
@ -770,9 +884,11 @@ body部を指定することもできます …
|
|||
`Sinatra::NotFound`が起きた時か レスポンスのステータスコードが
|
||||
404の時に`not_found`ハンドラーが発動します。
|
||||
|
||||
``` ruby
|
||||
not_found do
|
||||
'ファイルが存在しません'
|
||||
end
|
||||
```
|
||||
|
||||
### エラー
|
||||
|
||||
|
@ -780,28 +896,37 @@ body部を指定することもできます …
|
|||
ハンドラーはルートブロックかbeforeフィルタ内で例外が発生した時はいつでも発動します。
|
||||
例外オブジェクトはRack変数`sinatra.error`から取得できます。
|
||||
|
||||
``` ruby
|
||||
error do
|
||||
'エラーが発生しました。 - ' + env['sinatra.error'].name
|
||||
end
|
||||
```
|
||||
|
||||
エラーをカスタマイズする場合は、
|
||||
|
||||
``` ruby
|
||||
error MyCustomError do
|
||||
'エラーメッセージ...' + env['sinatra.error'].message
|
||||
end
|
||||
```
|
||||
|
||||
と書いておいて,下記のように呼び出します。
|
||||
|
||||
``` ruby
|
||||
get '/' do
|
||||
raise MyCustomError, '何かがまずかったようです'
|
||||
end
|
||||
```
|
||||
|
||||
そうするとこうなります:
|
||||
|
||||
```
|
||||
エラーメッセージ... 何かがまずかったようです
|
||||
```
|
||||
|
||||
あるいは、ステータスコードに対応するエラーハンドラを設定することもできます:
|
||||
|
||||
``` ruby
|
||||
error 403 do
|
||||
'Access forbidden'
|
||||
end
|
||||
|
@ -809,12 +934,15 @@ body部を指定することもできます …
|
|||
get '/secret' do
|
||||
403
|
||||
end
|
||||
```
|
||||
|
||||
範囲指定もできます:
|
||||
|
||||
``` ruby
|
||||
error 400..510 do
|
||||
'Boom'
|
||||
end
|
||||
```
|
||||
|
||||
開発環境として実行している場合、Sinatraは特別な`not_found`と`error`ハンドラーを
|
||||
インストールしています。
|
||||
|
@ -824,11 +952,15 @@ body部を指定することもできます …
|
|||
`send_file`か静的ファイルを使う時、Sinatraが理解でいないMIMEタイプがある場合があります。
|
||||
その時は `mime_type` を使ってファイル拡張子毎に登録して下さい。
|
||||
|
||||
``` ruby
|
||||
mime_type :foo, 'text/foo'
|
||||
```
|
||||
|
||||
これはcontent\_typeヘルパで利用することができます:
|
||||
|
||||
``` ruby
|
||||
content_type :foo
|
||||
```
|
||||
|
||||
## Rackミドルウェア
|
||||
|
||||
|
@ -841,6 +973,7 @@ body部を指定することもできます …
|
|||
Sinatraではトップレベルの`use`
|
||||
メソッドを使ってRackにパイプラインを構築します。
|
||||
|
||||
``` ruby
|
||||
require 'sinatra'
|
||||
require 'my_custom_middleware'
|
||||
|
||||
|
@ -850,15 +983,18 @@ Sinatraではトップレベルの`use`
|
|||
get '/hello' do
|
||||
'Hello World'
|
||||
end
|
||||
```
|
||||
|
||||
`use`
|
||||
[Rack::Builder](http://rack.rubyforge.org/doc/classes/Rack/Builder.html)
|
||||
DSLで定義されていることと全て一致します。 例えば `use`
|
||||
メソッドはブロック構文のように複数の引数を受け取ることができます。
|
||||
|
||||
``` ruby
|
||||
use Rack::Auth::Basic do |username, password|
|
||||
username == 'admin' && password == 'secret'
|
||||
end
|
||||
```
|
||||
|
||||
Rackはログ、デバッギング、URLルーティング、認証、セッションなどいろいろな機能を備えた標準的ミドルウェアです。
|
||||
Sinatraはその多くのコンポーネントを自動で使うよう基本設定されているため、`use`で明示的に指定する必要はありません。
|
||||
|
@ -869,6 +1005,7 @@ SinatraでのテストはRack-basedのテストライブラリかフレームワ
|
|||
[Rack::Test](http://gitrdoc.com/brynary/rack-test)
|
||||
をおすすめします。やり方:
|
||||
|
||||
``` ruby
|
||||
require 'my_sinatra_app'
|
||||
require 'rack/test'
|
||||
|
||||
|
@ -894,6 +1031,7 @@ SinatraでのテストはRack-basedのテストライブラリかフレームワ
|
|||
assert_equal "あなたはSongbirdを使ってますね!", last_response.body
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
注意: ビルトインのSinatra::TestモジュールとSinatra::TestHarnessクラスは
|
||||
0.9.2リリース以降、廃止予定になっています。
|
||||
|
@ -906,6 +1044,7 @@ RackミドルウェアやRails metal、サーバのコンポーネントを含
|
|||
トップレベルのDSLがネームスペースを汚染したり、設定を変えてしまうこと(例:./publicや./view)がありえます。
|
||||
そこでSinatra::Baseの出番です。
|
||||
|
||||
``` ruby
|
||||
require 'sinatra/base'
|
||||
|
||||
class MyApp < Sinatra::Base
|
||||
|
@ -916,13 +1055,16 @@ RackミドルウェアやRails metal、サーバのコンポーネントを含
|
|||
'Hello world!'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
このMyAppは独立したRackコンポーネントで、RackミドルウェアやRackアプリケーション
|
||||
Rails metalとして使用することができます。`config.ru`ファイル内で `use`
|
||||
か、または `run`
|
||||
でこのクラスを指定するか、ライブラリとしてサーバコンポーネントをコントロールします。
|
||||
|
||||
``` ruby
|
||||
MyApp.run! :host => 'localhost', :port => 9090
|
||||
```
|
||||
|
||||
Sinatra::Baseのサブクラスで使えるメソッドはトップレベルのDSLを経由して確実に使うことができます。
|
||||
ほとんどのトップレベルで記述されたアプリは、以下の2点を修正することでSinatra::Baseコンポーネントに変えることができます。
|
||||
|
@ -956,6 +1098,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
|
||||
このエンドポイントには、別のSinatraアプリケーションまたは他のRackベースのアプリケーション(Rails/Ramaze/Camping/…)が用いられるでしょう。
|
||||
|
||||
``` ruby
|
||||
require 'sinatra/base'
|
||||
|
||||
class LoginScreen < Sinatra::Base
|
||||
|
@ -984,6 +1127,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
|
||||
get('/') { "Hello #{session['user_name']}." }
|
||||
end
|
||||
```
|
||||
|
||||
## スコープとバインディング
|
||||
|
||||
|
@ -999,6 +1143,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
|
||||
\`set\`によって作られたオプションはクラスレベルのメソッドです:
|
||||
|
||||
``` ruby
|
||||
class MyApp < Sinatra::Base
|
||||
# Hey, I'm in the application scope!
|
||||
set :foo, 42
|
||||
|
@ -1008,6 +1153,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
# Hey, I'm no longer in the application scope!
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
次の場所ではアプリケーションスコープバインディングを持ちます:
|
||||
|
||||
|
@ -1031,6 +1177,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
このスコープの内側からは\`request\`や\`session\`オブジェクトにアクセスすることができ、\`erb\`や\`haml\`のような表示メソッドを呼び出すことができます。
|
||||
リクエストスコープの内側からは、\`settings\`ヘルパによってアプリケーションスコープにアクセスすることができます。
|
||||
|
||||
``` ruby
|
||||
class MyApp < Sinatra::Base
|
||||
# Hey, I'm in the application scope!
|
||||
get '/define_route/:name' do
|
||||
|
@ -1045,6 +1192,7 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
|||
"Route defined!"
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
次の場所ではリクエストスコープバインディングを持ちます:
|
||||
|
||||
|
@ -1079,7 +1227,9 @@ mixin](http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606
|
|||
|
||||
Sinatraアプリケーションは直接実行できます。
|
||||
|
||||
``` shell
|
||||
ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
|
||||
```
|
||||
|
||||
オプション:
|
||||
|
||||
|
@ -1095,12 +1245,15 @@ Sinatraアプリケーションは直接実行できます。
|
|||
Sinatraの開発版を使いたい場合は、ローカルに開発版を落として、
|
||||
`LOAD_PATH`の`sinatra/lib`ディレクトリを指定して実行して下さい。
|
||||
|
||||
``` shell
|
||||
cd myapp
|
||||
git clone git://github.com/sinatra/sinatra.git
|
||||
ruby -Isinatra/lib myapp.rb
|
||||
```
|
||||
|
||||
`sinatra/lib`ディレクトリをアプリケーションの`LOAD_PATH`に追加する方法もあります。
|
||||
|
||||
``` ruby
|
||||
$LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
|
||||
require 'rubygems'
|
||||
require 'sinatra'
|
||||
|
@ -1108,11 +1261,14 @@ Sinatraの開発版を使いたい場合は、ローカルに開発版を落と
|
|||
get '/about' do
|
||||
"今使ってるバージョンは" + Sinatra::VERSION
|
||||
end
|
||||
```
|
||||
|
||||
Sinatraのソースを更新する方法:
|
||||
|
||||
``` shell
|
||||
cd myproject/sinatra
|
||||
git pull
|
||||
```
|
||||
|
||||
## その他
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue