私は次のようなハッシュを渡されるERBテンプレート(Puppetモジュール用)を書いています:
{"stuff" => {"foo"=>"aaa", "bar"=>"ccc"},
"other" => {"foo"=>"bbb", "bar"=>"ddd"}}
テンプレートでそれを繰り返して、テキストの行を生成しています。
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= v["foo"] %>:<%= v["bar"] %>
<% end -%>
次に、テンプレートに渡す2番目のハッシュを使用して、「foo」データにマッピングを適用したいと思います。擬似コードの場合:
mappings = {"aaa" => "something", "bbb" => "somethingelse"}
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= TRANSLATE_SOMEHOW(v["foo"], mappings) %>:<%= v["bar"] %>
<% end -%>
...値が「aaa」の場合は常に「何か」を取得するためなど。「マッピング」に対応するキーがない場合は、元の値を取得することを期待しています。
Puppetの言語でそのようなことをすることはおそらく可能です(いくつかのRubyコードでそれを拡張することによって)ERBテンプレートではおそらくより適切だと思いますが、それを行う方法がわかりませんし、Rubyが役に立たないことを知りません私-あまり成功せずにグーグルを試しました。
私は、ERB関数でそれを実現するためのコード、またはRTFMを楽しむための関連ドキュメントへのポインターを探しています。
編集:将来の読者のために、上記の私のERBの例に翻訳されたDigitalRossの回答は次のとおりです。
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= mappings[v["foo"]] || v["foo"] %>:<%= v["bar"] %>
<% end -%>