sinatra

root@pentaho# gem install sinatra                                           [~]
Successfully installed rack-1.0.0
Successfully installed sinatra-0.9.2
2 gems installed
Installing ri documentation for rack-1.0.0...
Installing ri documentation for sinatra-0.9.2...
Installing RDoc documentation for rack-1.0.0...
Installing RDoc documentation for sinatra-0.9.2...
hao@pentaho% cat hello.rb                               [~/public_html/sinatra]
#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'

get 'hi' do
"Hello, World"
end
hao@pentaho% ruby ./hello.rb                            [~/public_html/sinatra]
/var/lib/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:930:in `detect_rack_handler': Server handler (thin,mongrel,webrick) not found. (RuntimeError)
from /var/lib/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:862:in `run!'
from /var/lib/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/main.rb:34
from ./hello.rb:5

http://d.hatena.ne.jp/unageanu/20090525/1243268383 の教えに従うと、無事動く。
それで引数は?

get '/hi/:name' do
"Hello #{params[:name]}"
end

いや、そりゃいいけど、普通?name=xxxだろ。あ、QueryStringならいきなり取れるのか?

get '/hi' do
"Hello #{params[:name]}"
end

あ、取れた。
セッションは?

get '/' do
session[:value] = 0 unless session[:value]
"count : #{session[:value]+=1}"
end

こんなんでおっけー。これを動かすためには、libopenssl-ruby1.8が必要。
フォーム使う簡単なAPとかすぐできちゃうじゃん。HDDレコーダの予約APとか。ほら、もうできた。

get '/form' do
'
<form action="confirm" method="POST">
<input name="month"   type="text">月
<input name="day"   type="text">日&lt;br&gt;
<input name="ch"   type="text">チャンネル
<input name="start"   type="text">〜
<input name="end"   type="text">&lt;br&gt;
<input name="submit"  type="submit" value="送信">
</form>
'
end
post '/confirm' do
%(
以下の予約を実行します。&lt;br&gt;

#{params[:month]}月 #{params[:day]}日
#{params[:ch]}チャンネル #{params[:start]}〜#{params[:end]}
<form action="confirm" method="POST">
<input name="month"   type="hidden">
<input name="day"   type="hidden">
<input name="start"   type="hidden">
<input name="end"   type="hidden">
<input name="submit"  type="submit" value="予約">
</form>
)
end

railsのコントローラは、ApplicationControllerを継承したclass定義をすることで、そのメソッド定義がページ名と言うか、パスの名前になってたわけだけど、classもdefも無しにいきなりgetとかpostとか書けちゃうのは、いかにも直感的。DSL恐るべし。
こりゃ、惚れるわ、確かに。