試行錯誤中。PStore による session 情報の保持と、erb による描画を追加してみた。puts の出力先をコンソールにしたかったんだけど。
gup.cgi
#!/usr/bin/ruby -Ku require 'cgi' require 'cgi/session' require 'cgi/session/pstore' require 'erb' def puts(msg) $stderr.puts msg end def render(src) ERB.new(open(src){|f| f.read}).result(binding) end cgi = CGI.new session = CGI::Session::new( cgi , { "database_manager" => CGI::Session::PStore , "prefix" => "gup_" , "tmpdir" => "/tmp" }) info = cgi.path_info.split("/") info[2] = "index" if info.length < 3 || !info[2] load info[1] + ".rb" app = eval(info[1].capitalize + ".new") app.instance_variable_set("@params" , cgi.params) app.instance_variable_set("@session" , session) cgi.out({ "type" => "text/html", "charset" => "utf-8", "connection" => "close", }){ app.__send__(info[2]) } exit
test.rb
class Test def index @name = @session["name"] ||= "" render "test.rhtml" end def list @session["name"] = @params["name"][0] CGI.escapeHTML "こんにちは #{@params['name']} さん" end end
test.rhtml
<html> <head></head> <body> <form action="/gup/test/list" method="post"> 名前をどうぞ <input type="text" name="name" value="<%= CGI.escapeHTML(@name) %>"> <input type="submit"> </form> </body> </html>
機能実装していくほどに重くなって rails でいいじゃんとかなるんだろうな。どちらにしろ久々の勉強ネタとして継続したい。