テンプレートの最終的なテキスト出力に影響を与えることなく、ERBで印刷されていない論理行をフォーマットできる必要があります。現時点では、ERBがそのようなエスケープをサポートしているとは思いません。
これは私の最初の主要なRubyプロジェクトです。私はコードジェネレーターを書いています。私のテンプレートには、かなりの数の条件と列挙が含まれます。テンプレートを読みやすく保守しやすくするには、最終的な出力を歪めることなく、論理コードとコメントをフォーマットできる必要があります。
たとえば、次の出力が必要だとします。
Starting erbOutput
1
2
3
4
Ending erbOutput
私は素朴に次のようなテンプレートを作成しました。
require 'erb'
h=<<H
Starting erbOutput
<%# comment %>
<%5.times do |e|%>
<%=e.to_s %>
<%end %>
<%# comment %>
Ending erbOutput
H
s=ERB.new(h).result
puts s
...しかしこれは
Starting erbOutput
0
1
2
3
4
Ending erbOutput
ストレートプリント:
"Starting erbOutput\n\n\n0\n\n1\n\n2\n\n3\n\n4\n\n\nEnding erbOutput\n"
...ロジック行とコメント行の行戻りがERB出力に含まれていることを明確にします。
テンプレートをこの厄介な形式に詰め込むことで、目的の出力を生成できます。
h=<<H
Starting erbOutput<%# comment %>
<%5.times do |e|%><%=e.to_s %>
<%end %><%# comment %>Ending erbOutput
H
...しかし、より読みやすいフォーマットなしでテンプレートをデバッグおよび保守できるとは思いません。私の条件文と列挙のいくつかは、3レベルもの深さであり、私は重くコメントします。これらすべてを1行または2行に詰め込むと、テンプレートが完全に判読できなくなります。
ERBのコメント行のロジックの行リターンをエスケープまたは抑制する方法はありますか?他の一般的に利用可能なRubyテンプレートモジュールの1つは、これをより適切に処理しますか?
重要な場合は、MacOS10.6.7のMacRuby0.10(Ruby 1.9.2を実装)で作業しています。