RubyからHAMLをテンプレートとして使う

Rails等のプレームワークだとだいたい誰かがプラグインを作っていて、それが面倒を見てくれるので意識せずにHAMLを使えるが、今回は素のRubyスクリプトから使う場合。

Haml::Engineのrenderメソッド又はrender_procメソッドを使う。

render

example.html.haml
%p= hello

変数の内容をひとつ出力するだけのあまりにシンプルなテンプレートファイル。

haml_example.rb
require 'haml'

File.open("example.html.haml") do |f|
  Haml::Engine.new(f.read, :format => :xhtml).render(Object.new, :hello => "Hello World!!")
end

Haml::Engineのインスタンスを作ってrenderする。

Haml::Engine.newの第一引数はテンプレート文字列。
このサンプルではファイルから読んでいるが、直接文字列を渡してもいい。
第二引数はオプション。詳細は割愛。

renderの第一引数はscope。ひとまずObject.newでよい。
第二引数はテンプレート変数の名前と値をハッシュで渡す。

更にブロックを取れるようだけど、どんなときにうれしいのかよくわからない。
多分役立つ局面があるんだろうけど。

実行
ruby haml_example.rb

render_proc

render_procを使うと同じテンプレートに対して変数の値を変更しつつ次々出力するような場合に便利。
部分テンプレート的に使うときなどに役立つはず。

haml_example.rb
require 'haml'

File.open("example.html.haml") do |f|
  partial = Haml::Engine.new(f.read, :format => :xhtml).render_proc(Object.new, :hello)
  ["Hello World!!", "こんにちは世界!"].each do |hello|
    p partial.call :hello => hello
  end
end

render_procの第二引数以降は変数名を渡す。
Procオブジェクトが返ってくるので、それにテンプレート変数のハッシュを渡してcallするとHTMLがレンダリングされる。

参考

次の記事

RubyでHTMLタグ除去