Мне нужно иметь возможность форматировать непечатаемые логические строки в 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
... но я не думаю, что смогу отлаживать и поддерживать шаблоны без более удобочитаемого форматирования. Некоторые из моих условных выражений и перечислений имеют целых три уровня глубины, и я много комментирую. Втиснув все это в одну или две строки, шаблон становится совершенно нечитаемым.
Есть ли способ избежать или иным образом подавить возврат строки логики строки комментария в ERB? Может ли один из других общедоступных модулей шаблонов Ruby справиться с этим лучше?
Если это важно, я работаю с MacRuby 0.10 (реализует Ruby 1.9.2) на MacOS 10.6.7.