HTML::Template を使ってみた
id:yuki_neko_nyanさんに紹介していただいた HTML::Template も使ってみました。
http://tech.ymirlink.co.jp/ruby/raa/template.html
http://raa.ruby-lang.org/project/html-template/
http://vce.ce-lab.net/ja/fasthtmltmpl.html
前回(id:aufheben:20060603)作った BeanDesc.rb はそのまま再利用し、ERBExample.rb を書き換えます。
# # HtmlTemplateExample.rb # require 'BeanDesc' require 'html/template' def generate_bean(desc, out = STDOUT) #out.puts desc.inspect template = HTML::Template.new template.set_html(<<'EOB') /* * <!var:desc.name>.java */ package ; /** * <!var:desc.name>. */ public class <!var:desc.name> { <!begin:desc.properties> private <!var:type> <!var:name>; <!end:desc.properties> <!begin:desc.properties2> /** * <!var:name> を返す。 */ public <!var:type> <!var:getter_name>() { return <!var:name>; } /** * <!var:name> を設定する。 */ public void <!var:setter_name>(<!var:type> <!var:name>) { this.<!var:name> = <!var:name>; } <!end:desc.properties2> } EOB template.param({ 'desc.name' => desc.name, 'desc.package' => desc.package, }) desc.properties.each do |p| template.node('desc.properties').param({ 'name' => p.name, 'type' => p.type, 'getter_name' => p.getter_name, 'setter_name' => p.setter_name, }) template.node('desc.properties2').param({ 'name' => p.name, 'type' => p.type, 'getter_name' => p.getter_name, 'setter_name' => p.setter_name, }) end out.puts template.output end desc = BeanDesc.new('Order', 'example') desc.add_property('customer', 'String') desc.add_property('product', 'String') desc.add_property('quantity', 'int') desc.add_property('accepted', 'boolean') generate_bean(desc)
こんな感じで使い方あってるでしょうか?
感想としては、ERB の方が断然いいです。yuki_neko_nyanさんゴメンなさい。(^^;)。HTML::Template は以下のような欠点がありました。
- オブジェクトをそのまま渡せず、Hash に詰め替える必要がある。
- desc.properties を2回繰り返すことができず、別のパラメータを用意する必要がある。
- 出力結果に余分な空行が入ってしまう。
もし、誤りがありましたらご指摘お願いします。m(_ _)m