10. まずは...
require 'sinatra'
get '/users/:name' do # /users/hogeをGETしたら
name = params[:name] # hogeを取得し
@name = name.upcase # hogeを処理し
erb :show # レスポンスを返す
end
get '/users/' do
...
end
11. リクエスト
# 固定
get '/' do ... end
# POST
post '/' do ... end
# 名前付きパラメータ (params[:id])
get '/:id' do ... end
# ブロック引数 (paramsの代わりに常に使用可能)
get '/:id' do |id| ... end
# splat (params[:splat]で*の数だけ配列で取得)
get '/say/*/to/*' do ... end
# 正規表現 (params[:captures]でキャプチャ部分を取得)
get %r|/hello/(w+)| do ... end
12. 今度は...
require 'sinatra'
get '/users/:name' do # /users/hogeをGETしたら
name = params[:name] # hogeを取得し
@name = name.upcase # hogeを処理し
erb :show # レスポンスを返す
end
get '/users/' do
...
end
13. レスポンス(テンプレート)
# ERB
get '/' do
@greed = 'Hello world'
erb :index # views/index.erb
end
# HAML
get '/' do
@greed = 'Hello world'
haml :'greed/index' # views/greed/index.haml
end
# Erubis, Builder, 鋸(nokogiri), Sass, Scss, Less, Liquid, Markdown,
# Textile, RDoc, Radius, Markaby, Slim, Creole, CoffeeScript
... READMEを読め!
14. レスポンス(その他)
# 文字列
get '/' do
content_type 'text/plain'
'Hello world!'
end
# ステータスコード
get '/' do
404
end
# eachメソッドを持つオブジェクトによるストリーミング
class Stream
def each
100.times { |i| yield "#{i}n" }
end
end
get('/') { Stream.new }