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がレンダリングされる。