2012年3月4日日曜日

続・ERBを使おう

汎用のテンプレートエンジンであるerb。そのままでも十分便利なのだけれど、この機能はRubyの標準ライブラリERBとして切り出されており、ちょっとした自前のRubyスクリプトの中でも使えるのだ。
require 'erb'
Template = <<END
foo is "<%=foo%>".
END
foo = 'foo1'
erb = ERB.new(Template, nil, '%')
erb.run
これを実行すると、
foo is "foo1".
と表示される。
ERB.newの第2匹数はsafe_level、第3引数はtrim_mode。デフォルトのtrim_modeでは行頭の%が効かないので注意。実は第4引数もあるが、まずデフォルトでOK。
runにも実は1つ引数があり、bindingを渡すことができる。デフォルトはTOPLEVEL_BINDING。定義したはずの変数がテンプレートの中で参照できないときは、bindingを疑おう。
def override_foo
  foo = 'foo2'
  binding
end
erb.run(override_foo)
この例だと、テンプレートの中からはoverride_foo内のfoo、すなわちfoo2が見える。一方、
def not_override_foo(erb)
  foo = 'foo3'
  erb.run
end
not_override_foo(erb)
この例だと、テンプレートの中からはnot_override_fooの中のfoo3ではなく、トップレベルのfoo1が見える。

0 件のコメント:

コメントを投稿