青山です。

1.7 以降の話しですが、CGI, HTML について、どのようなインターフェイスが
使いやすいか、という話しでもあるので、-dev ではなく、より一般的な -list
に送ります。

ようやく cgi.rb の見直しに取り掛かりました。そして、まず、最大の課題で
ある HTML 生成機能の分離を行ってみました。これにより、インスタンス生成
時にメソッドの生成を行う、という処理から逃れ、require による使い分けが
可能になり、mod_ruby 上ではより高速になったと思われます。

# ruby_lib/cgi.rb
# ruby_lib/html/common.rb  # form 等、html3,4 共通の拡張部分。直接は利用しない。
# ruby_lib/html/html3.rb
# ruby_lib/html/html4.rb
# ruby_lib/html/html4tr.rb
# ruby_lib/html/html4fr.rb

この段階で一度出そうかと思ったのですが、ruby_lib/html/ の追加という事
になるので、そうなると、HTML 生成ライブラリも、単に cgi.rb から分離し
た物ではなく、見直した物の方が良さそうに思えました。

そこで、各MLなどを見直してみましたが、やはり、オブジェクト指向、という
より、現在の String ベースというか、コードから容易に HTML ソースを想像
できる、というインターフェイスが扱いやすそうなので、次のようなタイプを
試しています。

require "html/html3"
html = HTML::Html3.new
html.html() do
  html.head{ html.title{"TITLE"} }
  html.body() do
    html.h1{"head 1"}
    html.p() do
      "paragraph"
    end
    html.form() do
      html.textarea("field_name")
      html.br
      html.submit
    end
  end
end

require "cgi"
cgi = CGI.new
cgi.out(html)    # あるいは cgi.out(html.to_s)

いかがでしょうか?

そして、これを 1.7 系に追加する場合、

1. この新たな HTML 生成ライブラリを 1.7 系に追加する。cgi.rb は現在のまま。
2. 1.7 系に追加し、さらに cgi.rb も新版にする。
3. 現在の cgi.rb 互換の HTML 生成機能にして追加する。

どれが良さそうでしょうか?

1. の場合には、HTML 生成機能がだぶって提供されるため、ファイルサイズに
無駄ができるという問題があります。2. の場合には、互換性の問題がありま
す。3. の場合には、せっかく HTML 関連ライブラリを追加するのに、機能は
同じ、と、面白みが無い?

1. でのダブる量は、cgi.rb の大部分となるので、約30k ぐらいになります。


-- 
青山 和光 Wakou Aoyama  <wakou / fsinet.or.jp>