CGIにGETメソッドで渡されたデータをすべて表示してみる

GETメソッドで渡されたデータをすべて表示するCGIを書いてみます。
また併せて、RubyCGIライブラリを使ってヘッダとかも簡単に書く方法をメモしておきます。

まずは、リファレンスマニュアルの真似をしてコーディングしてみます。

#!ruby

require 'cgi'
cgi = CGI.new( "html3" )	# html3.2

cgi.out {
  cgi.html {
    cgi.head{ cgi.title{"[TEST CGI]"} } +
    cgi.body{
      cgi_get_data = "GET .. "
      cgi.keys.each {|k|
        cgi_get_data += "[\"#{k}\"=>\"#{cgi[k]}\"]"
      }
      
      # ↓これを出力.
      cgi_get_data
    }
  }
}

例えば、上記のコードをtest.cgiとして保存して、

http://example.com/test.cgi??t=dddd&s=Button

のように実行したら、以下のように表示されるはずです。

GET .. ["s"=>"Button"]["t"=>"dddd"]

CGIライブラリの内容を把握しつつコーディング

上記のコードでは、いまいちどういうデータの流れが起きているのか分かりにくいのですが、cgi.out や cgi.html、cgi.bodyなどは、ブロックにStringを渡す感じで書くようです。
ブロック内に式があるときには最後のStringが評価されるので、上記コードのhtml_bodyを生成しているコードでは、最後のcgi_get_dataが出力されるわけです。

次に、いちいち変数に代入しつつ、CGI.pretty()というクラスメソッドで、最終出力のHTMLも読みやすいコードにしてみます。

#!ruby

require 'cgi'
cgi = CGI.new( "html3" )	# html3.2

html_head = cgi.head{ cgi.title{"[TEST CGI]"} }

html_body = cgi.body{
  cgi_get_data = "GET .. "
  cgi.keys.each {|k|
    cgi_get_data += "[\"#{k}\"=>\"#{cgi[k]}\"]"
  }
  
  # ↓これを出力.
  cgi_get_data
}

html_html =  cgi.html {
  html_head +
  html_body
}

cgi.out {
  CGI.pretty( html_html, "\t" )
}

ブラウザ上では変わりませんが、ソースを見てみると読みやすくなっています。

参考URL

リファレンスマニュアルはちょっと分かりにくい。