Sinatra READMEには次のように書かれています。
request["SOME_HEADER"] # value of SOME_HEADER header
このアプリの場合:
require 'sinatra'
post '/env' do
env['HTTP_X_FOO']
end
post '/request' do
request['X-Foo']
end
post '/request_rack_http_format' do
request['HTTP_X_FOO']
end
最初の仕様はパスします。次の 2 つは失敗します。
describe "Sinatra should place the header in" do
before(:all) do
header 'X-Foo', 'Bar'
end
example "env" do
post '/env'
last_response.body.should == 'Bar' #pass
end
example "request[]" do
post '/request'
last_response.body.should == 'Bar' #fail; got ""
end
example "request[] (rack format)" do
post '/request_rack_http_format'
last_response.body.should == 'Bar' #fail; got ""
end
end
ソースを見ると、シナトラは実際には何もしていません[]
。GET
との和集合として Rack に実装されていPOST
ます。そしてPOST
、フォーム hash を返すだけです。それGET
はクエリハッシュです。3 つのルートすべてで、request.params
空です。
私の質問:これはドキュメントのバグですか、それとも使い方を誤解していますrequest[]
か? 今のところ、私のアプリケーションはこのenv[]
メソッドで問題なく動作しています。でも「ちゃんと」やりたい。