mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
First convert.
This commit is contained in:
parent
c8ba0cc42d
commit
abf2c659ab
1 changed files with 644 additions and 598 deletions
402
README.jp.rdoc
402
README.jp.rdoc
|
@ -1,7 +1,9 @@
|
||||||
= Sinatra
|
# Sinatra
|
||||||
<i>注) 本文書は英語から翻訳したものであり、その内容が最新でない場合もあります。最新の情報はオリジナルの英語版を参照して下さい。</i>
|
|
||||||
|
|
||||||
SinatraはRubyで下記のような最小労力で手早くウェブアプリケーションを作成するための{DSL}[http://ja.wikipedia.org/wiki/ドメイン固有言語]です。
|
*注)
|
||||||
|
本文書は英語から翻訳したものであり、その内容が最新でない場合もあります。最新の情報はオリジナルの英語版を参照して下さい。*
|
||||||
|
|
||||||
|
[DSL](http://ja.wikipedia.org/wiki/ドメイン固有言語)です。
|
||||||
|
|
||||||
# myapp.rb
|
# myapp.rb
|
||||||
require 'sinatra'
|
require 'sinatra'
|
||||||
|
@ -14,9 +16,9 @@ gemをインストールして動かしてみる。
|
||||||
gem install sinatra
|
gem install sinatra
|
||||||
ruby myapp.rb
|
ruby myapp.rb
|
||||||
|
|
||||||
http://localhost:4567 を見る。
|
[localhost:4567](http://localhost:4567) を見る。
|
||||||
|
|
||||||
== ルート
|
## ルート
|
||||||
|
|
||||||
Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンがペアになっています。
|
Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンがペアになっています。
|
||||||
ルートはブロックに結び付けられています。
|
ルートはブロックに結び付けられています。
|
||||||
|
@ -37,10 +39,11 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
.. 何か削除する ..
|
.. 何か削除する ..
|
||||||
end
|
end
|
||||||
|
|
||||||
ルートは定義された順番にマッチします。 リクエストに最初にマッチしたルートが呼び出されます。
|
ルートは定義された順番にマッチします。
|
||||||
|
リクエストに最初にマッチしたルートが呼び出されます。
|
||||||
|
|
||||||
ルートのパターンは名前付きパラメータを含むことができ、
|
ルートのパターンは名前付きパラメータを含むことができ、
|
||||||
<tt>params</tt>ハッシュで取得できます。
|
`params`ハッシュで取得できます。
|
||||||
|
|
||||||
get '/hello/:name' do
|
get '/hello/:name' do
|
||||||
# matches "GET /hello/foo" and "GET /hello/bar"
|
# matches "GET /hello/foo" and "GET /hello/bar"
|
||||||
|
@ -55,7 +58,7 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
end
|
end
|
||||||
|
|
||||||
ルートパターンはsplat(またはワイルドカード)を含むこともでき、
|
ルートパターンはsplat(またはワイルドカード)を含むこともでき、
|
||||||
<tt>params[:splat]</tt> で取得できます。
|
`params[:splat]` で取得できます。
|
||||||
|
|
||||||
get '/say/*/to/*' do
|
get '/say/*/to/*' do
|
||||||
# matches /say/hello/to/world
|
# matches /say/hello/to/world
|
||||||
|
@ -85,8 +88,7 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
"Hello, #{c}!"
|
"Hello, #{c}!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
### 条件
|
||||||
=== 条件
|
|
||||||
|
|
||||||
ルートにはユーザエージェントのようなさまざまな条件を含めることができます。
|
ルートにはユーザエージェントのようなさまざまな条件を含めることができます。
|
||||||
|
|
||||||
|
@ -98,7 +100,7 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
# Matches non-songbird browsers
|
# Matches non-songbird browsers
|
||||||
end
|
end
|
||||||
|
|
||||||
ほかに+host_name+と+provides+条件が利用可能です:
|
ほかに`host_name`と`provides`条件が利用可能です:
|
||||||
|
|
||||||
get '/', :host_name => /^admin\./ do
|
get '/', :host_name => /^admin\./ do
|
||||||
"Admin Area, Access denied!"
|
"Admin Area, Access denied!"
|
||||||
|
@ -124,8 +126,7 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
"Sorry, you lost."
|
"Sorry, you lost."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
### 戻り値
|
||||||
=== 戻り値
|
|
||||||
|
|
||||||
ルートブロックの戻り値は、HTTPクライアントまたはRackスタックでの次のミドルウェアに渡されるレスポンスボディを決定します。
|
ルートブロックの戻り値は、HTTPクライアントまたはRackスタックでの次のミドルウェアに渡されるレスポンスボディを決定します。
|
||||||
|
|
||||||
|
@ -134,10 +135,15 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
|
||||||
Rackレスポンス、Rackボディオブジェクト、HTTPステータスコードのいずれかとして
|
Rackレスポンス、Rackボディオブジェクト、HTTPステータスコードのいずれかとして
|
||||||
妥当なオブジェクトであればどのようなオブジェクトでも返すことができます:
|
妥当なオブジェクトであればどのようなオブジェクトでも返すことができます:
|
||||||
|
|
||||||
* 3要素の配列: <tt>[ステータス(Fixnum), ヘッダ(Hash), レスポンスボディ(#eachに応答する)]</tt>
|
- 3要素の配列:
|
||||||
* 2要素の配列: <tt>[ステータス(Fixnum), レスポンスボディ(#eachに応答する)]</tt>
|
`[ステータス(Fixnum), ヘッダ(Hash), レスポンスボディ(#eachに応答する)]`
|
||||||
* <tt>#each</tt>に応答し、与えられたブロックに文字列を渡すオブジェクト
|
|
||||||
* ステータスコードを表現するFixnum
|
- 2要素の配列:
|
||||||
|
`[ステータス(Fixnum), レスポンスボディ(#eachに応答する)]`
|
||||||
|
|
||||||
|
- `#each`に応答し、与えられたブロックに文字列を渡すオブジェクト
|
||||||
|
|
||||||
|
- ステータスコードを表現するFixnum
|
||||||
|
|
||||||
そのように、例えばストリーミングの例を簡単に実装することができます:
|
そのように、例えばストリーミングの例を簡単に実装することができます:
|
||||||
|
|
||||||
|
@ -149,29 +155,28 @@ Rackレスポンス、Rackボディオブジェクト、HTTPステータスコ
|
||||||
|
|
||||||
get('/') { Stream.new }
|
get('/') { Stream.new }
|
||||||
|
|
||||||
|
## 静的ファイル
|
||||||
|
|
||||||
== 静的ファイル
|
静的ファイルは`./public`ディレクトリから配信されます。
|
||||||
|
`:public_folder`オプションを指定することで別の場所を指定することができます。
|
||||||
静的ファイルは<tt>./public</tt>ディレクトリから配信されます。
|
|
||||||
<tt>:public_folder</tt>オプションを指定することで別の場所を指定することができます。
|
|
||||||
|
|
||||||
set :public_folder, File.dirname(__FILE__) + '/static'
|
set :public_folder, File.dirname(__FILE__) + '/static'
|
||||||
|
|
||||||
注意: この静的ファイル用のディレクトリ名はURL中に含まれません。
|
注意: この静的ファイル用のディレクトリ名はURL中に含まれません。
|
||||||
例えば、<tt>./public/css/style.css</tt>は<tt>http://example.com/css/style.css</tt>でアクセスできます。
|
例えば、`./public/css/style.css`は`http://example.com/css/style.css`でアクセスできます。
|
||||||
|
|
||||||
== ビュー / テンプレート
|
## ビュー / テンプレート
|
||||||
|
|
||||||
テンプレートは<tt>./views</tt>ディレクトリ下に配置されています。
|
テンプレートは`./views`ディレクトリ下に配置されています。
|
||||||
他のディレクトリを使用する場合の例:
|
他のディレクトリを使用する場合の例:
|
||||||
|
|
||||||
set :views, File.dirname(__FILE__) + '/templates'
|
set :views, File.dirname(__FILE__) + '/templates'
|
||||||
|
|
||||||
テンプレートはシンボルを使用して参照させることを覚えておいて下さい。
|
テンプレートはシンボルを使用して参照させることを覚えておいて下さい。
|
||||||
サブデレクトリでもこの場合は<tt>:'subdir/template'</tt>のようにします。
|
サブデレクトリでもこの場合は`:'subdir/template'`のようにします。
|
||||||
レンダリングメソッドは文字列が渡されると、そのまま文字列を出力します。
|
レンダリングメソッドは文字列が渡されると、そのまま文字列を出力します。
|
||||||
|
|
||||||
=== Haml テンプレート
|
### Haml テンプレート
|
||||||
|
|
||||||
hamlを使うにはhamlライブラリが必要です:
|
hamlを使うにはhamlライブラリが必要です:
|
||||||
|
|
||||||
|
@ -182,11 +187,12 @@ hamlを使うにはhamlライブラリが必要です:
|
||||||
haml :index
|
haml :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.haml</tt>を表示します。
|
`./views/index.haml`を表示します。
|
||||||
|
|
||||||
{Haml's options}[http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options]
|
[Haml’s
|
||||||
はSinatraの設定でグローバルに設定することができます。
|
options](http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options)
|
||||||
{Options and Configurations}[http://www.sinatrarb.com/configuration.html],
|
はSinatraの設定でグローバルに設定することができます。 [Options and
|
||||||
|
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||||
を参照してそれぞれ設定を上書きして下さい。
|
を参照してそれぞれ設定を上書きして下さい。
|
||||||
|
|
||||||
set :haml, {:format => :html5 } # デフォルトのフォーマットは:xhtml
|
set :haml, {:format => :html5 } # デフォルトのフォーマットは:xhtml
|
||||||
|
@ -195,8 +201,7 @@ hamlを使うにはhamlライブラリが必要です:
|
||||||
haml :index, :haml_options => {:format => :html4 } # 上書き
|
haml :index, :haml_options => {:format => :html4 } # 上書き
|
||||||
end
|
end
|
||||||
|
|
||||||
|
### Erb テンプレート
|
||||||
=== Erb テンプレート
|
|
||||||
|
|
||||||
# erbを読み込みます
|
# erbを読み込みます
|
||||||
require 'erb'
|
require 'erb'
|
||||||
|
@ -205,9 +210,9 @@ hamlを使うにはhamlライブラリが必要です:
|
||||||
erb :index
|
erb :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.erb</tt>を表示します。
|
`./views/index.erb`を表示します。
|
||||||
|
|
||||||
=== Erubis
|
### Erubis
|
||||||
|
|
||||||
erubisテンプレートを表示するには、erubisライブラリが必要です:
|
erubisテンプレートを表示するには、erubisライブラリが必要です:
|
||||||
|
|
||||||
|
@ -218,9 +223,9 @@ erubisテンプレートを表示するには、erubisライブラリが必要
|
||||||
erubis :index
|
erubis :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.erubis</tt>を表示します。
|
`./views/index.erubis`を表示します。
|
||||||
|
|
||||||
=== Builder テンプレート
|
### Builder テンプレート
|
||||||
|
|
||||||
builderを使うにはbuilderライブラリが必要です:
|
builderを使うにはbuilderライブラリが必要です:
|
||||||
|
|
||||||
|
@ -231,9 +236,9 @@ builderを使うにはbuilderライブラリが必要です:
|
||||||
builder :index
|
builder :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.builder</tt>を表示します。
|
`./views/index.builder`を表示します。
|
||||||
|
|
||||||
=== 鋸 テンプレート
|
### 鋸 テンプレート
|
||||||
|
|
||||||
鋸を使うには鋸ライブラリが必要です:
|
鋸を使うには鋸ライブラリが必要です:
|
||||||
|
|
||||||
|
@ -244,9 +249,9 @@ builderを使うにはbuilderライブラリが必要です:
|
||||||
nokogiri :index
|
nokogiri :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.nokogiri</tt>を表示します。
|
`./views/index.nokogiri`を表示します。
|
||||||
|
|
||||||
=== Sass テンプレート
|
### Sass テンプレート
|
||||||
|
|
||||||
Sassテンプレートを使うにはsassライブラリが必要です:
|
Sassテンプレートを使うにはsassライブラリが必要です:
|
||||||
|
|
||||||
|
@ -257,11 +262,12 @@ Sassテンプレートを使うにはsassライブラリが必要です:
|
||||||
sass :stylesheet
|
sass :stylesheet
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/stylesheet.sass</tt>を表示します。
|
`./views/stylesheet.sass`を表示します。
|
||||||
|
|
||||||
{Sass' options}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
[Sass’
|
||||||
はSinatraの設定でグローバルに設定することができます。
|
options](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
||||||
see {Options and Configurations}[http://www.sinatrarb.com/configuration.html],
|
はSinatraの設定でグローバルに設定することができます。 see [Options and
|
||||||
|
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||||
を参照してそれぞれ設定を上書きして下さい。
|
を参照してそれぞれ設定を上書きして下さい。
|
||||||
|
|
||||||
set :sass, {:style => :compact } # デフォルトのSass styleは :nested
|
set :sass, {:style => :compact } # デフォルトのSass styleは :nested
|
||||||
|
@ -270,7 +276,7 @@ see {Options and Configurations}[http://www.sinatrarb.com/configuration.html],
|
||||||
sass :stylesheet, :sass_options => {:style => :expanded } # 上書き
|
sass :stylesheet, :sass_options => {:style => :expanded } # 上書き
|
||||||
end
|
end
|
||||||
|
|
||||||
=== Scss テンプレート
|
### Scss テンプレート
|
||||||
|
|
||||||
Scssテンプレートを使うにはsassライブラリが必要です:
|
Scssテンプレートを使うにはsassライブラリが必要です:
|
||||||
|
|
||||||
|
@ -281,11 +287,12 @@ Scssテンプレートを使うにはsassライブラリが必要です:
|
||||||
scss :stylesheet
|
scss :stylesheet
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/stylesheet.scss</tt>を表示します。
|
`./views/stylesheet.scss`を表示します。
|
||||||
|
|
||||||
{Sass' options}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
[Sass’
|
||||||
はSinatraの設定でグローバルに設定することができます。
|
options](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
|
||||||
see {Options and Configurations}[http://www.sinatrarb.com/configuration.html],
|
はSinatraの設定でグローバルに設定することができます。 see [Options and
|
||||||
|
Configurations](http://www.sinatrarb.com/configuration.html),
|
||||||
を参照してそれぞれ設定を上書きして下さい。
|
を参照してそれぞれ設定を上書きして下さい。
|
||||||
|
|
||||||
set :scss, :style => :compact # デフォルトのScss styleは:nested
|
set :scss, :style => :compact # デフォルトのScss styleは:nested
|
||||||
|
@ -294,7 +301,7 @@ see {Options and Configurations}[http://www.sinatrarb.com/configuration.html],
|
||||||
scss :stylesheet, :style => :expanded # 上書き
|
scss :stylesheet, :style => :expanded # 上書き
|
||||||
end
|
end
|
||||||
|
|
||||||
=== Less テンプレート
|
### Less テンプレート
|
||||||
|
|
||||||
Lessテンプレートを使うにはlessライブラリが必要です:
|
Lessテンプレートを使うにはlessライブラリが必要です:
|
||||||
|
|
||||||
|
@ -305,9 +312,9 @@ Lessテンプレートを使うにはlessライブラリが必要です:
|
||||||
less :stylesheet
|
less :stylesheet
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/stylesheet.less</tt>を表示します。
|
`./views/stylesheet.less`を表示します。
|
||||||
|
|
||||||
=== Liquid テンプレート
|
### Liquid テンプレート
|
||||||
|
|
||||||
Liquidテンプレートを使うにはliquidライブラリが必要です:
|
Liquidテンプレートを使うにはliquidライブラリが必要です:
|
||||||
|
|
||||||
|
@ -318,14 +325,14 @@ Liquidテンプレートを使うにはliquidライブラリが必要です:
|
||||||
liquid :index
|
liquid :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.liquid</tt>を表示します。
|
`./views/index.liquid`を表示します。
|
||||||
|
|
||||||
LiquidテンプレートからRubyのメソッド(+yield+を除く)を呼び出すことができないため、
|
LiquidテンプレートからRubyのメソッド(`yield`を除く)を呼び出すことができないため、
|
||||||
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
||||||
|
|
||||||
liquid :index, :locals => { :key => 'value' }
|
liquid :index, :locals => { :key => 'value' }
|
||||||
|
|
||||||
=== Markdown テンプレート
|
### Markdown テンプレート
|
||||||
|
|
||||||
Markdownテンプレートを使うにはrdiscountライブラリが必要です:
|
Markdownテンプレートを使うにはrdiscountライブラリが必要です:
|
||||||
|
|
||||||
|
@ -336,7 +343,7 @@ Markdownテンプレートを使うにはrdiscountライブラリが必要です
|
||||||
markdown :index
|
markdown :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.markdown</tt>を表示します。(+md+と+mkd+も妥当な拡張子です)
|
`./views/index.markdown`を表示します。(`md`と`mkd`も妥当な拡張子です)
|
||||||
|
|
||||||
markdownからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
markdownからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||||
|
@ -348,7 +355,7 @@ markdownからメソッドを呼び出すことも、localsに変数を渡すこ
|
||||||
%h1 Hello From Haml!
|
%h1 Hello From Haml!
|
||||||
%p= markdown(:greetings)
|
%p= markdown(:greetings)
|
||||||
|
|
||||||
=== Textile テンプレート
|
### Textile テンプレート
|
||||||
|
|
||||||
Textileテンプレートを使うにはRedClothライブラリが必要です:
|
Textileテンプレートを使うにはRedClothライブラリが必要です:
|
||||||
|
|
||||||
|
@ -359,7 +366,7 @@ Textileテンプレートを使うにはRedClothライブラリが必要です:
|
||||||
textile :index
|
textile :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.textile</tt>を表示します。
|
`./views/index.textile`を表示します。
|
||||||
|
|
||||||
textileからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
textileからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||||
|
@ -371,7 +378,7 @@ textileからメソッドを呼び出すことも、localsに変数を渡すこ
|
||||||
%h1 Hello From Haml!
|
%h1 Hello From Haml!
|
||||||
%p= textile(:greetings)
|
%p= textile(:greetings)
|
||||||
|
|
||||||
=== RDoc テンプレート
|
### RDoc テンプレート
|
||||||
|
|
||||||
RDocテンプレートを使うにはRDocライブラリが必要です:
|
RDocテンプレートを使うにはRDocライブラリが必要です:
|
||||||
|
|
||||||
|
@ -383,7 +390,7 @@ RDocテンプレートを使うにはRDocライブラリが必要です:
|
||||||
rdoc :index
|
rdoc :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.rdoc</tt>を表示します。
|
`./views/index.rdoc`を表示します。
|
||||||
|
|
||||||
rdocからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
rdocからメソッドを呼び出すことも、localsに変数を渡すこともできません。
|
||||||
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
それゆえ、他のレンダリングエンジンとの組み合わせで使うのが普通です:
|
||||||
|
@ -395,7 +402,7 @@ rdocからメソッドを呼び出すことも、localsに変数を渡すこと
|
||||||
%h1 Hello From Haml!
|
%h1 Hello From Haml!
|
||||||
%p= rdoc(:greetings)
|
%p= rdoc(:greetings)
|
||||||
|
|
||||||
=== Radius テンプレート
|
### Radius テンプレート
|
||||||
|
|
||||||
Radiusテンプレートを使うにはradiusライブラリが必要です:
|
Radiusテンプレートを使うにはradiusライブラリが必要です:
|
||||||
|
|
||||||
|
@ -406,14 +413,14 @@ Radiusテンプレートを使うにはradiusライブラリが必要です:
|
||||||
radius :index
|
radius :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.radius</tt>を表示します。
|
`./views/index.radius`を表示します。
|
||||||
|
|
||||||
RadiusテンプレートからRubyのメソッド(+yield+を除く)を呼び出すことができないため、
|
RadiusテンプレートからRubyのメソッド(`yield`を除く)を呼び出すことができないため、
|
||||||
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
ほぼ全ての場合にlocalsを指定する必要があるでしょう:
|
||||||
|
|
||||||
radius :index, :locals => { :key => 'value' }
|
radius :index, :locals => { :key => 'value' }
|
||||||
|
|
||||||
=== Markaby テンプレート
|
### Markaby テンプレート
|
||||||
|
|
||||||
Markabyテンプレートを使うにはmarkabyライブラリが必要です:
|
Markabyテンプレートを使うにはmarkabyライブラリが必要です:
|
||||||
|
|
||||||
|
@ -424,9 +431,9 @@ Markabyテンプレートを使うにはmarkabyライブラリが必要です:
|
||||||
markaby :index
|
markaby :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.mab</tt>を表示します。
|
`./views/index.mab`を表示します。
|
||||||
|
|
||||||
=== RABL テンプレート
|
### RABL テンプレート
|
||||||
|
|
||||||
RABLテンプレートを使うにはrablライブラリが必要です:
|
RABLテンプレートを使うにはrablライブラリが必要です:
|
||||||
|
|
||||||
|
@ -437,9 +444,9 @@ RABLテンプレートを使うにはrablライブラリが必要です:
|
||||||
rabl :index
|
rabl :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.rabl</tt>を表示します。
|
`./views/index.rabl`を表示します。
|
||||||
|
|
||||||
=== Slim テンプレート
|
### Slim テンプレート
|
||||||
|
|
||||||
Slimテンプレートを使うにはslimライブラリが必要です:
|
Slimテンプレートを使うにはslimライブラリが必要です:
|
||||||
|
|
||||||
|
@ -450,9 +457,9 @@ Slimテンプレートを使うにはslimライブラリが必要です:
|
||||||
slim :index
|
slim :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.slim</tt>を表示します。
|
`./views/index.slim`を表示します。
|
||||||
|
|
||||||
=== Creole テンプレート
|
### Creole テンプレート
|
||||||
|
|
||||||
Creoleテンプレートを使うにはcreoleライブラリが必要です:
|
Creoleテンプレートを使うにはcreoleライブラリが必要です:
|
||||||
|
|
||||||
|
@ -463,11 +470,11 @@ Creoleテンプレートを使うにはcreoleライブラリが必要です:
|
||||||
creole :index
|
creole :index
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/index.creole</tt>を表示します。
|
`./views/index.creole`を表示します。
|
||||||
|
|
||||||
=== CoffeeScript テンプレート
|
### CoffeeScript テンプレート
|
||||||
|
|
||||||
CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリと`coffee`バイナリが必要です:
|
CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリと\`coffee\`バイナリが必要です:
|
||||||
|
|
||||||
# coffee-scriptを読み込みます
|
# coffee-scriptを読み込みます
|
||||||
require 'coffee-script'
|
require 'coffee-script'
|
||||||
|
@ -476,9 +483,9 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
coffee :application
|
coffee :application
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>./views/application.coffee</tt>を表示します。
|
`./views/application.coffee`を表示します。
|
||||||
|
|
||||||
=== インラインテンプレート
|
### インラインテンプレート
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
haml '%div.title Hello World'
|
haml '%div.title Hello World'
|
||||||
|
@ -486,9 +493,10 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
|
|
||||||
文字列をテンプレートとして表示します。
|
文字列をテンプレートとして表示します。
|
||||||
|
|
||||||
=== テンプレート内で変数にアクセスする
|
### テンプレート内で変数にアクセスする
|
||||||
|
|
||||||
テンプレートはルートハンドラと同じコンテキストの中で評価されます。. ルートハンドラでセットされたインスタンス変数は
|
テンプレートはルートハンドラと同じコンテキストの中で評価されます。.
|
||||||
|
ルートハンドラでセットされたインスタンス変数は
|
||||||
テンプレート内で直接使うことができます。
|
テンプレート内で直接使うことができます。
|
||||||
|
|
||||||
get '/:id' do
|
get '/:id' do
|
||||||
|
@ -505,7 +513,7 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
|
|
||||||
このやり方は他のテンプレート内で部分テンプレートとして表示する時に典型的に使用されます。
|
このやり方は他のテンプレート内で部分テンプレートとして表示する時に典型的に使用されます。
|
||||||
|
|
||||||
=== ファイル内テンプレート
|
### ファイル内テンプレート
|
||||||
|
|
||||||
テンプレートはソースファイルの最後で定義することもできます。
|
テンプレートはソースファイルの最後で定義することもできます。
|
||||||
|
|
||||||
|
@ -525,12 +533,14 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
@@ index
|
@@ index
|
||||||
%div.title Hello world!!!!!
|
%div.title Hello world!!!!!
|
||||||
|
|
||||||
注意: sinatraをrequireするファイル内で定義されたファイル内テンプレートは自動的に読み込まれます。
|
注意:
|
||||||
他のファイルで定義されているテンプレートを使うには <tt>enable :inline_templates</tt>を明示的に呼んでください。
|
sinatraをrequireするファイル内で定義されたファイル内テンプレートは自動的に読み込まれます。
|
||||||
|
他のファイルで定義されているテンプレートを使うには
|
||||||
|
`enable :inline_templates`を明示的に呼んでください。
|
||||||
|
|
||||||
=== 名前付きテンプレート
|
### 名前付きテンプレート
|
||||||
|
|
||||||
テンプレートはトップレベルの<tt>template</tt>メソッドで定義することができます。
|
テンプレートはトップレベルの`template`メソッドで定義することができます。
|
||||||
|
|
||||||
template :layout do
|
template :layout do
|
||||||
"%html\n =yield\n"
|
"%html\n =yield\n"
|
||||||
|
@ -545,15 +555,15 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
end
|
end
|
||||||
|
|
||||||
「layout」というテンプレートが存在する場合、そのテンプレートファイルは他のテンプレートが
|
「layout」というテンプレートが存在する場合、そのテンプレートファイルは他のテンプレートが
|
||||||
表示される度に使用されます。<tt>:layout => false</tt>することでlayoutsを無効にできます。
|
表示される度に使用されます。`:layout => false`することでlayoutsを無効にできます。
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
haml :index, :layout => !request.xhr?
|
haml :index, :layout => !request.xhr?
|
||||||
end
|
end
|
||||||
|
|
||||||
== ヘルパー
|
## ヘルパー
|
||||||
|
|
||||||
トップレベルの<tt>helpers</tt>を使用してルートハンドラやテンプレートで使うヘルパメソッドを
|
トップレベルの`helpers`を使用してルートハンドラやテンプレートで使うヘルパメソッドを
|
||||||
定義できます。
|
定義できます。
|
||||||
|
|
||||||
helpers do
|
helpers do
|
||||||
|
@ -566,7 +576,7 @@ CoffeeScriptテンプレートを表示するにはcoffee-scriptライブラリ
|
||||||
bar(params[:name])
|
bar(params[:name])
|
||||||
end
|
end
|
||||||
|
|
||||||
== フィルタ
|
## フィルタ
|
||||||
|
|
||||||
beforeフィルタはリクエストされたコンテキストを実行する前に評価され、
|
beforeフィルタはリクエストされたコンテキストを実行する前に評価され、
|
||||||
リクエストとレスポンスを変更することができます。フィルタ内でセットされた
|
リクエストとレスポンスを変更することができます。フィルタ内でセットされた
|
||||||
|
@ -602,7 +612,7 @@ afterフィルタからアクセスすることができます:
|
||||||
session[:last_slug] = slug
|
session[:last_slug] = slug
|
||||||
end
|
end
|
||||||
|
|
||||||
== 強制終了
|
## 強制終了
|
||||||
|
|
||||||
ルートかbeforeフィルタ内で直ちに実行を終了する方法:
|
ルートかbeforeフィルタ内で直ちに実行を終了する方法:
|
||||||
|
|
||||||
|
@ -612,11 +622,11 @@ afterフィルタからアクセスすることができます:
|
||||||
|
|
||||||
halt 410
|
halt 410
|
||||||
|
|
||||||
body部を指定することもできます ...
|
body部を指定することもできます …
|
||||||
|
|
||||||
halt 'ここにbodyを書く'
|
halt 'ここにbodyを書く'
|
||||||
|
|
||||||
ステータスとbody部を指定する ...
|
ステータスとbody部を指定する …
|
||||||
|
|
||||||
halt 401, '立ち去れ!'
|
halt 401, '立ち去れ!'
|
||||||
|
|
||||||
|
@ -624,9 +634,9 @@ body部を指定することもできます ...
|
||||||
|
|
||||||
halt 402, {'Content-Type' => 'text/plain'}, 'リベンジ'
|
halt 402, {'Content-Type' => 'text/plain'}, 'リベンジ'
|
||||||
|
|
||||||
== パッシング(Passing)
|
## パッシング(Passing)
|
||||||
|
|
||||||
ルートは<tt>pass</tt>を使って次のルートに飛ばすことができます:
|
ルートは`pass`を使って次のルートに飛ばすことができます:
|
||||||
|
|
||||||
get '/guess/:who' do
|
get '/guess/:who' do
|
||||||
pass unless params[:who] == 'Frank'
|
pass unless params[:who] == 'Frank'
|
||||||
|
@ -640,9 +650,9 @@ body部を指定することもできます ...
|
||||||
ルートブロックからすぐに抜け出し、次にマッチするルートを実行します。
|
ルートブロックからすぐに抜け出し、次にマッチするルートを実行します。
|
||||||
マッチするルートが見当たらない場合は404が返されます。
|
マッチするルートが見当たらない場合は404が返されます。
|
||||||
|
|
||||||
== リクエストオブジェクトへのアクセス
|
## リクエストオブジェクトへのアクセス
|
||||||
|
|
||||||
受信するリクエストオブジェクトは、`request`メソッドを通じてリクエストレベル(フィルタ、ルート、エラーハンドラ)からアクセスすることができます:
|
受信するリクエストオブジェクトは、\`request\`メソッドを通じてリクエストレベル(フィルタ、ルート、エラーハンドラ)からアクセスすることができます:
|
||||||
|
|
||||||
# アプリケーションが http://example.com/example で動作している場合
|
# アプリケーションが http://example.com/example で動作している場合
|
||||||
get '/foo' do
|
get '/foo' do
|
||||||
|
@ -670,7 +680,7 @@ body部を指定することもできます ...
|
||||||
request.env # Rackによって渡された生のenvハッシュ
|
request.env # Rackによって渡された生のenvハッシュ
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>script_name</tt>や<tt>path_info</tt>などのオプションは次のように利用することもできます:
|
`script_name`や`path_info`などのオプションは次のように利用することもできます:
|
||||||
|
|
||||||
before { request.path_info = "/" }
|
before { request.path_info = "/" }
|
||||||
|
|
||||||
|
@ -678,7 +688,7 @@ body部を指定することもできます ...
|
||||||
"全てのリクエストはここに来る"
|
"全てのリクエストはここに来る"
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>request.body</tt>はIOまたはStringIOのオブジェクトです:
|
`request.body`はIOまたはStringIOのオブジェクトです:
|
||||||
|
|
||||||
post "/api" do
|
post "/api" do
|
||||||
request.body.rewind # 既に読まれているときのため
|
request.body.rewind # 既に読まれているときのため
|
||||||
|
@ -686,8 +696,7 @@ body部を指定することもできます ...
|
||||||
"Hello #{data['name']}!"
|
"Hello #{data['name']}!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
## 設定
|
||||||
== 設定
|
|
||||||
|
|
||||||
どの環境でも起動時に1回だけ実行されます。
|
どの環境でも起動時に1回だけ実行されます。
|
||||||
|
|
||||||
|
@ -695,36 +704,37 @@ body部を指定することもできます ...
|
||||||
...
|
...
|
||||||
end
|
end
|
||||||
|
|
||||||
環境(RACK_ENV環境変数)が<tt>:production</tt>に設定されている時だけ実行する方法:
|
環境(RACK\_ENV環境変数)が`:production`に設定されている時だけ実行する方法:
|
||||||
|
|
||||||
configure :production do
|
configure :production do
|
||||||
...
|
...
|
||||||
end
|
end
|
||||||
|
|
||||||
環境が<tt>:production</tt>か<tt>:test</tt>の場合に設定する方法:
|
環境が`:production`か`:test`の場合に設定する方法:
|
||||||
|
|
||||||
configure :production, :test do
|
configure :production, :test do
|
||||||
...
|
...
|
||||||
end
|
end
|
||||||
|
|
||||||
== エラーハンドリング
|
## エラーハンドリング
|
||||||
|
|
||||||
エラーハンドラーはルートコンテキストとbeforeフィルタ内で実行します。
|
エラーハンドラーはルートコンテキストとbeforeフィルタ内で実行します。
|
||||||
<tt>haml</tt>、<tt>erb</tt>、<tt>halt</tt>などを使うこともできます。
|
`haml`、`erb`、`halt`などを使うこともできます。
|
||||||
|
|
||||||
=== Not Found
|
### Not Found
|
||||||
|
|
||||||
<tt>Sinatra::NotFound</tt>が起きた時か レスポンスのステータスコードが
|
`Sinatra::NotFound`が起きた時か レスポンスのステータスコードが
|
||||||
404の時に<tt>not_found</tt>ハンドラーが発動します。
|
404の時に`not_found`ハンドラーが発動します。
|
||||||
|
|
||||||
not_found do
|
not_found do
|
||||||
'ファイルが存在しません'
|
'ファイルが存在しません'
|
||||||
end
|
end
|
||||||
|
|
||||||
=== エラー
|
### エラー
|
||||||
|
|
||||||
+error+ ハンドラーはルートブロックかbeforeフィルタ内で例外が発生した時はいつでも発動します。
|
`error`
|
||||||
例外オブジェクトはRack変数<tt>sinatra.error</tt>から取得できます。
|
ハンドラーはルートブロックかbeforeフィルタ内で例外が発生した時はいつでも発動します。
|
||||||
|
例外オブジェクトはRack変数`sinatra.error`から取得できます。
|
||||||
|
|
||||||
error do
|
error do
|
||||||
'エラーが発生しました。 - ' + env['sinatra.error'].name
|
'エラーが発生しました。 - ' + env['sinatra.error'].name
|
||||||
|
@ -762,29 +772,30 @@ body部を指定することもできます ...
|
||||||
'Boom'
|
'Boom'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
開発環境として実行している場合、Sinatraは特別な`not_found`と`error`ハンドラーを
|
||||||
開発環境として実行している場合、Sinatraは特別な<tt>not_found</tt>と<tt>error</tt>ハンドラーを
|
|
||||||
インストールしています。
|
インストールしています。
|
||||||
|
|
||||||
== MIMEタイプ
|
## MIMEタイプ
|
||||||
|
|
||||||
<tt>send_file</tt>か静的ファイルを使う時、Sinatraが理解でいないMIMEタイプがある場合があります。
|
`send_file`か静的ファイルを使う時、Sinatraが理解でいないMIMEタイプがある場合があります。
|
||||||
その時は +mime_type+ を使ってファイル拡張子毎に登録して下さい。
|
その時は `mime_type` を使ってファイル拡張子毎に登録して下さい。
|
||||||
|
|
||||||
mime_type :foo, 'text/foo'
|
mime_type :foo, 'text/foo'
|
||||||
|
|
||||||
これはcontent_typeヘルパで利用することができます:
|
これはcontent\_typeヘルパで利用することができます:
|
||||||
|
|
||||||
content_type :foo
|
content_type :foo
|
||||||
|
|
||||||
== Rackミドルウェア
|
## Rackミドルウェア
|
||||||
|
|
||||||
SinatraはRack[http://rack.rubyforge.org/]というRubyのWEBフレームワーク用の
|
[SinatraはRack](http://rack.rubyforge.org/)フレームワーク用の
|
||||||
最小限の標準インターフェース 上で動作しています。Rack中でもアプリケーションデベロッパー
|
最小限の標準インターフェース
|
||||||
|
上で動作しています。Rack中でもアプリケーションデベロッパー
|
||||||
向けに一番興味深い機能はミドルウェア(サーバとアプリケーション間に介在し、モニタリング、HTTPリクエストとレスポンス
|
向けに一番興味深い機能はミドルウェア(サーバとアプリケーション間に介在し、モニタリング、HTTPリクエストとレスポンス
|
||||||
の手動操作ができるなど、一般的な機能のいろいろなことを提供するもの)をサポートすることです。
|
の手動操作ができるなど、一般的な機能のいろいろなことを提供するもの)をサポートすることです。
|
||||||
|
|
||||||
Sinatraではトップレベルの+use+ メソッドを使ってRackにパイプラインを構築します。
|
Sinatraではトップレベルの`use`
|
||||||
|
メソッドを使ってRackにパイプラインを構築します。
|
||||||
|
|
||||||
require 'sinatra'
|
require 'sinatra'
|
||||||
require 'my_custom_middleware'
|
require 'my_custom_middleware'
|
||||||
|
@ -796,20 +807,23 @@ Sinatraではトップレベルの+use+ メソッドを使ってRackにパイプ
|
||||||
'Hello World'
|
'Hello World'
|
||||||
end
|
end
|
||||||
|
|
||||||
<tt>use</tt> の意味は{Rack::Builder}[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSLで定義されていることと全て一致します。
|
`use`
|
||||||
例えば +use+ メソッドはブロック構文のように複数の引数を受け取ることができます。
|
[Rack::Builder](http://rack.rubyforge.org/doc/classes/Rack/Builder.html)
|
||||||
|
DSLで定義されていることと全て一致します。 例えば `use`
|
||||||
|
メソッドはブロック構文のように複数の引数を受け取ることができます。
|
||||||
|
|
||||||
use Rack::Auth::Basic do |username, password|
|
use Rack::Auth::Basic do |username, password|
|
||||||
username == 'admin' && password == 'secret'
|
username == 'admin' && password == 'secret'
|
||||||
end
|
end
|
||||||
|
|
||||||
Rackはログ、デバッギング、URLルーティング、認証、セッションなどいろいろな機能を備えた標準的ミドルウェアです。
|
Rackはログ、デバッギング、URLルーティング、認証、セッションなどいろいろな機能を備えた標準的ミドルウェアです。
|
||||||
Sinatraはその多くのコンポーネントを自動で使うよう基本設定されているため、+use+で明示的に指定する必要はありません。
|
Sinatraはその多くのコンポーネントを自動で使うよう基本設定されているため、`use`で明示的に指定する必要はありません。
|
||||||
|
|
||||||
== テスト
|
## テスト
|
||||||
|
|
||||||
SinatraでのテストはRack-basedのテストライブラリかフレームワークを使って書くことができます。
|
SinatraでのテストはRack-basedのテストライブラリかフレームワークを使って書くことができます。
|
||||||
{Rack::Test}[http://gitrdoc.com/brynary/rack-test] をおすすめします。やり方:
|
[Rack::Test](http://gitrdoc.com/brynary/rack-test)
|
||||||
|
をおすすめします。やり方:
|
||||||
|
|
||||||
require 'my_sinatra_app'
|
require 'my_sinatra_app'
|
||||||
require 'rack/test'
|
require 'rack/test'
|
||||||
|
@ -840,7 +854,7 @@ SinatraでのテストはRack-basedのテストライブラリかフレームワ
|
||||||
注意: ビルトインのSinatra::TestモジュールとSinatra::TestHarnessクラスは
|
注意: ビルトインのSinatra::TestモジュールとSinatra::TestHarnessクラスは
|
||||||
0.9.2リリース以降、廃止予定になっています。
|
0.9.2リリース以降、廃止予定になっています。
|
||||||
|
|
||||||
== Sinatra::Base - ミドルウェア、ライブラリ、 モジュラーアプリ
|
## Sinatra::Base - ミドルウェア、ライブラリ、 モジュラーアプリ
|
||||||
|
|
||||||
トップレベル(グローバル領域)上でいろいろ定義していくのは軽量アプリならうまくいきますが、
|
トップレベル(グローバル領域)上でいろいろ定義していくのは軽量アプリならうまくいきますが、
|
||||||
RackミドルウェアやRails metal、サーバのコンポーネントを含んだシンプルな
|
RackミドルウェアやRails metal、サーバのコンポーネントを含んだシンプルな
|
||||||
|
@ -860,35 +874,43 @@ RackミドルウェアやRails metal、サーバのコンポーネントを含
|
||||||
end
|
end
|
||||||
|
|
||||||
このMyAppは独立したRackコンポーネントで、RackミドルウェアやRackアプリケーション
|
このMyAppは独立したRackコンポーネントで、RackミドルウェアやRackアプリケーション
|
||||||
Rails metalとして使用することができます。<tt>config.ru</tt>ファイル内で +use+ か、または
|
Rails metalとして使用することができます。`config.ru`ファイル内で `use`
|
||||||
+run+ でこのクラスを指定するか、ライブラリとしてサーバコンポーネントをコントロールします。
|
か、または `run`
|
||||||
|
でこのクラスを指定するか、ライブラリとしてサーバコンポーネントをコントロールします。
|
||||||
|
|
||||||
MyApp.run! :host => 'localhost', :port => 9090
|
MyApp.run! :host => 'localhost', :port => 9090
|
||||||
|
|
||||||
Sinatra::Baseのサブクラスで使えるメソッドはトップレベルのDSLを経由して確実に使うことができます。
|
Sinatra::Baseのサブクラスで使えるメソッドはトップレベルのDSLを経由して確実に使うことができます。
|
||||||
ほとんどのトップレベルで記述されたアプリは、以下の2点を修正することでSinatra::Baseコンポーネントに変えることができます。
|
ほとんどのトップレベルで記述されたアプリは、以下の2点を修正することでSinatra::Baseコンポーネントに変えることができます。
|
||||||
|
|
||||||
* +sinatra+の代わりに<tt>sinatra/base</tt>を読み込む
|
- `sinatra`の代わりに`sinatra/base`を読み込む
|
||||||
(そうしない場合、SinatraのDSLメソッドの全てがメインネームスペースにインポートされます)
|
|
||||||
* ルート、エラーハンドラー、フィルター、オプションをSinatra::Baseのサブクラスに書く
|
|
||||||
|
|
||||||
<tt>Sinatra::Base</tt> はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルト
|
(そうしない場合、SinatraのDSLメソッドの全てがメインネームスペースにインポートされます)
|
||||||
で無効になっています。オプション詳細については{Options and Configuration}[http://sinatra.github.com/configuration.html]
|
|
||||||
|
- ルート、エラーハンドラー、フィルター、オプションをSinatra::Baseのサブクラスに書く
|
||||||
|
|
||||||
|
`Sinatra::Base`
|
||||||
|
はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルト
|
||||||
|
で無効になっています。オプション詳細については[Options and
|
||||||
|
Configuration](http://sinatra.github.com/configuration.html)
|
||||||
をご覧下さい。
|
をご覧下さい。
|
||||||
|
|
||||||
補足: SinatraのトップレベルDSLはシンプルな委譲(delgation)システムで実装されています。
|
補足:
|
||||||
<tt>Sinatra::Application</tt>クラス(Sinatra::Baseの特別なサブクラス)は、トップレベルに送られる
|
SinatraのトップレベルDSLはシンプルな委譲(delgation)システムで実装されています。
|
||||||
:get、 :put、 :post、:delete、 :before、:error、:not_found、 :configure、:set messagesのこれら
|
`Sinatra::Application`クラス(Sinatra::Baseの特別なサブクラス)は、トップレベルに送られる
|
||||||
全てを受け取ります。 詳細を閲覧されたい方はこちら(英語):
|
:get、 :put、 :post、:delete、 :before、:error、:not\_found、
|
||||||
{Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064]
|
:configure、:set messagesのこれら 全てを受け取ります。
|
||||||
{included into the main namespace}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
|
詳細を閲覧されたい方はこちら(英語): [Sinatra::Delegator
|
||||||
|
mixin](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064)
|
||||||
|
[included into the main
|
||||||
|
namespace](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25).
|
||||||
|
|
||||||
=== Sinatraをミドルウェアとして利用する
|
### Sinatraをミドルウェアとして利用する
|
||||||
|
|
||||||
Sinatraは他のRackミドルウェアを利用することができるだけでなく、
|
Sinatraは他のRackミドルウェアを利用することができるだけでなく、
|
||||||
全てのSinatraアプリケーションは、それ自体ミドルウェアとして別のRackエンドポイントの前に追加することが可能です。
|
全てのSinatraアプリケーションは、それ自体ミドルウェアとして別のRackエンドポイントの前に追加することが可能です。
|
||||||
|
|
||||||
このエンドポイントには、別のSinatraアプリケーションまたは他のRackベースのアプリケーション(Rails/Ramaze/Camping/...)が用いられるでしょう。
|
このエンドポイントには、別のSinatraアプリケーションまたは他のRackベースのアプリケーション(Rails/Ramaze/Camping/…)が用いられるでしょう。
|
||||||
|
|
||||||
require 'sinatra/base'
|
require 'sinatra/base'
|
||||||
|
|
||||||
|
@ -919,19 +941,19 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
||||||
get('/') { "Hello #{session['user_name']}." }
|
get('/') { "Hello #{session['user_name']}." }
|
||||||
end
|
end
|
||||||
|
|
||||||
== スコープとバインディング
|
## スコープとバインディング
|
||||||
|
|
||||||
現在のスコープはどのメソッドや変数が利用可能かを決定します。
|
現在のスコープはどのメソッドや変数が利用可能かを決定します。
|
||||||
|
|
||||||
=== アプリケーション/クラスのスコープ
|
### アプリケーション/クラスのスコープ
|
||||||
|
|
||||||
全てのSinatraアプリケーションはSinatra::Baseのサブクラスに相当します。
|
全てのSinatraアプリケーションはSinatra::Baseのサブクラスに相当します。
|
||||||
もしトップレベルDSLを利用しているならば(<tt>require 'sinatra'</tt>)このクラスはSinatra::Applicationであり、
|
もしトップレベルDSLを利用しているならば(`require 'sinatra'`)このクラスはSinatra::Applicationであり、
|
||||||
そうでなければ、あなたが明示的に作成したサブクラスです。
|
そうでなければ、あなたが明示的に作成したサブクラスです。
|
||||||
クラスレベルでは`get`や`before`のようなメソッドを持っています。
|
クラスレベルでは\`get\`や\`before\`のようなメソッドを持っています。
|
||||||
しかし`request`オブジェクトや`session`には、全てのリクエストのために1つのアプリケーションクラスが存在するためアクセスできません。
|
しかし\`request\`オブジェクトや\`session\`には、全てのリクエストのために1つのアプリケーションクラスが存在するためアクセスできません。
|
||||||
|
|
||||||
`set`によって作られたオプションはクラスレベルのメソッドです:
|
\`set\`によって作られたオプションはクラスレベルのメソッドです:
|
||||||
|
|
||||||
class MyApp < Sinatra::Base
|
class MyApp < Sinatra::Base
|
||||||
# Hey, I'm in the application scope!
|
# Hey, I'm in the application scope!
|
||||||
|
@ -945,21 +967,25 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
||||||
|
|
||||||
次の場所ではアプリケーションスコープバインディングを持ちます:
|
次の場所ではアプリケーションスコープバインディングを持ちます:
|
||||||
|
|
||||||
* アプリケーションのクラス本体
|
- アプリケーションのクラス本体
|
||||||
* 拡張によって定義されたメソッド
|
|
||||||
* `helpers`に渡されたブロック
|
- 拡張によって定義されたメソッド
|
||||||
* `set`の値として使われるProcまたはブロック
|
|
||||||
|
- \`helpers\`に渡されたブロック
|
||||||
|
|
||||||
|
- \`set\`の値として使われるProcまたはブロック
|
||||||
|
|
||||||
このスコープオブジェクト(クラス)は次のように利用できます:
|
このスコープオブジェクト(クラス)は次のように利用できます:
|
||||||
|
|
||||||
* configureブロックに渡されたオブジェクト経由(<tt>configure { |c| ... }</tt>)
|
- configureブロックに渡されたオブジェクト経由(`configure { |c| ... }`)
|
||||||
* リクエストスコープの中での`settings`
|
|
||||||
|
|
||||||
=== リクエスト/インスタンスのスコープ
|
- リクエストスコープの中での\`settings\`
|
||||||
|
|
||||||
|
### リクエスト/インスタンスのスコープ
|
||||||
|
|
||||||
やってくるリクエストごとに、あなたのアプリケーションクラスの新しいインスタンスが作成され、全てのハンドラブロックがそのスコープで実行されます。
|
やってくるリクエストごとに、あなたのアプリケーションクラスの新しいインスタンスが作成され、全てのハンドラブロックがそのスコープで実行されます。
|
||||||
このスコープの内側からは`request`や`session`オブジェクトにアクセスすることができ、`erb`や`haml`のような表示メソッドを呼び出すことができます。
|
このスコープの内側からは\`request\`や\`session\`オブジェクトにアクセスすることができ、\`erb\`や\`haml\`のような表示メソッドを呼び出すことができます。
|
||||||
リクエストスコープの内側からは、`settings`ヘルパによってアプリケーションスコープにアクセスすることができます。
|
リクエストスコープの内側からは、\`settings\`ヘルパによってアプリケーションスコープにアクセスすることができます。
|
||||||
|
|
||||||
class MyApp < Sinatra::Base
|
class MyApp < Sinatra::Base
|
||||||
# Hey, I'm in the application scope!
|
# Hey, I'm in the application scope!
|
||||||
|
@ -978,28 +1004,34 @@ Sinatraは他のRackミドルウェアを利用することができるだけで
|
||||||
|
|
||||||
次の場所ではリクエストスコープバインディングを持ちます:
|
次の場所ではリクエストスコープバインディングを持ちます:
|
||||||
|
|
||||||
* get/head/post/put/delete ブロック
|
- get/head/post/put/delete ブロック
|
||||||
* before/after フィルタ
|
|
||||||
* helper メソッド
|
|
||||||
* テンプレート/ビュー
|
|
||||||
|
|
||||||
=== デリゲートスコープ
|
- before/after フィルタ
|
||||||
|
|
||||||
|
- helper メソッド
|
||||||
|
|
||||||
|
- テンプレート/ビュー
|
||||||
|
|
||||||
|
### デリゲートスコープ
|
||||||
|
|
||||||
デリゲートスコープは、単にクラススコープにメソッドを転送します。
|
デリゲートスコープは、単にクラススコープにメソッドを転送します。
|
||||||
しかしながら、クラスのバインディングを持っていないため、クラススコープと全く同じふるまいをするわけではありません:
|
しかしながら、クラスのバインディングを持っていないため、クラススコープと全く同じふるまいをするわけではありません:
|
||||||
委譲すると明示的に示されたメソッドのみが利用可能であり、またクラススコープと変数/状態を共有することはできません(注: 異なった`self`を持っています)。
|
委譲すると明示的に示されたメソッドのみが利用可能であり、またクラススコープと変数/状態を共有することはできません(注:
|
||||||
<tt>Sinatra::Delegator.delegate :method_name</tt>を呼び出すことによってデリゲートするメソッドを明示的に追加することができます。
|
異なった\`self\`を持っています)。
|
||||||
|
`Sinatra::Delegator.delegate :method_name`を呼び出すことによってデリゲートするメソッドを明示的に追加することができます。
|
||||||
|
|
||||||
次の場所ではデリゲートスコープを持ちます:
|
次の場所ではデリゲートスコープを持ちます:
|
||||||
|
|
||||||
* もし<tt>require "sinatra"</tt>しているならば、トップレベルバインディング
|
- もし`require "sinatra"`しているならば、トップレベルバインディング
|
||||||
* `Sinatra::Delegator` mixinでextendされたオブジェクト
|
|
||||||
|
|
||||||
コードをご覧ください: ここでは
|
- \`Sinatra::Delegator\` mixinでextendされたオブジェクト
|
||||||
{Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
|
|
||||||
は{main 名前空間にincludeされています}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28].
|
|
||||||
|
|
||||||
== コマンドライン
|
コードをご覧ください: ここでは [Sinatra::Delegator
|
||||||
|
mixin](http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128)
|
||||||
|
は[main
|
||||||
|
名前空間にincludeされています](http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28).
|
||||||
|
|
||||||
|
## コマンドライン
|
||||||
|
|
||||||
Sinatraアプリケーションは直接実行できます。
|
Sinatraアプリケーションは直接実行できます。
|
||||||
|
|
||||||
|
@ -1014,16 +1046,16 @@ Sinatraアプリケーションは直接実行できます。
|
||||||
-s # rackserver/handlerを指定 (デフォルトはthin)
|
-s # rackserver/handlerを指定 (デフォルトはthin)
|
||||||
-x # mutex lockを付ける (デフォルトはoff)
|
-x # mutex lockを付ける (デフォルトはoff)
|
||||||
|
|
||||||
== 最新開発版について
|
## 最新開発版について
|
||||||
|
|
||||||
Sinatraの開発版を使いたい場合は、ローカルに開発版を落として、
|
Sinatraの開発版を使いたい場合は、ローカルに開発版を落として、
|
||||||
<tt>LOAD_PATH</tt>の<tt>sinatra/lib</tt>ディレクトリを指定して実行して下さい。
|
`LOAD_PATH`の`sinatra/lib`ディレクトリを指定して実行して下さい。
|
||||||
|
|
||||||
cd myapp
|
cd myapp
|
||||||
git clone git://github.com/sinatra/sinatra.git
|
git clone git://github.com/sinatra/sinatra.git
|
||||||
ruby -Isinatra/lib myapp.rb
|
ruby -Isinatra/lib myapp.rb
|
||||||
|
|
||||||
<tt>sinatra/lib</tt>ディレクトリをアプリケーションの<tt>LOAD_PATH</tt>に追加する方法もあります。
|
`sinatra/lib`ディレクトリをアプリケーションの`LOAD_PATH`に追加する方法もあります。
|
||||||
|
|
||||||
$LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
|
$LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
|
||||||
require 'rubygems'
|
require 'rubygems'
|
||||||
|
@ -1038,19 +1070,33 @@ Sinatraのソースを更新する方法:
|
||||||
cd myproject/sinatra
|
cd myproject/sinatra
|
||||||
git pull
|
git pull
|
||||||
|
|
||||||
== その他
|
## その他
|
||||||
|
|
||||||
日本語サイト
|
日本語サイト
|
||||||
|
|
||||||
* {Greenbear Laboratory Rack日本語マニュアル}[http://mono.kmc.gr.jp/~yhara/w/?RackReferenceJa] - Rackの日本語マニュアル
|
- [Greenbear Laboratory
|
||||||
|
Rack日本語マニュアル](http://mono.kmc.gr.jp/~yhara/w/?RackReferenceJa)
|
||||||
|
- Rackの日本語マニュアル
|
||||||
|
|
||||||
英語サイト
|
英語サイト
|
||||||
|
|
||||||
* {プロジェクトサイト}[http://sinatra.github.com/] - ドキュメント、
|
- [プロジェクトサイト](http://sinatra.github.com/) - ドキュメント、
|
||||||
ニュース、他のリソースへのリンクがあります。
|
ニュース、他のリソースへのリンクがあります。
|
||||||
* {プロジェクトに参加(貢献)する}[http://sinatra.github.com/contributing.html] - バグレポート
|
|
||||||
パッチの送信、サポートなど
|
- [プロジェクトに参加(貢献)する](http://sinatra.github.com/contributing.html)
|
||||||
* {Issue tracker}[http://github.com/sinatra/sinatra/issues] - チケット管理とリリース計画
|
- バグレポート パッチの送信、サポートなど
|
||||||
* {Twitter}[http://twitter.com/sinatra]
|
|
||||||
* {メーリングリスト}[http://groups.google.com/group/sinatrarb]
|
- [Issue tracker](http://github.com/sinatra/sinatra/issues) -
|
||||||
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net
|
チケット管理とリリース計画
|
||||||
|
|
||||||
|
- [Twitter](http://twitter.com/sinatra)
|
||||||
|
|
||||||
|
- [メーリングリスト](http://groups.google.com/group/sinatrarb)
|
||||||
|
|
||||||
|
- [IRC: \#sinatra](irc://chat.freenode.net/#sinatra) on
|
||||||
|
[freenode.net](http://freenode.net)
|
||||||
|
|
||||||
|
[[Validate]](http://validator.w3.org/check/referer)
|
||||||
|
|
||||||
|
Generated with the [Darkfish Rdoc
|
||||||
|
Generator](http://deveiate.org/projects/Darkfish-Rdoc/) 2.
|
||||||
|
|
Loading…
Add table
Reference in a new issue