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">日<br> <input name="ch" type="text">チャンネル <input name="start" type="text">〜 <input name="end" type="text"><br> <input name="submit" type="submit" value="送信"> </form> ' end post '/confirm' do %( 以下の予約を実行します。<br> #{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恐るべし。
こりゃ、惚れるわ、確かに。