2013-07-31 2 views
0

Я хотел бы расширить ERB, чтобы каждый выходной тег - <% =%> - содержимое предварительно обработано до визуализации результата.Как расширить ERB templating

Например,

<%= 'test' %> 

теперь должны оказывать

!test! 

вместо

test 

Как я могу это сделать?

ответ

0

Что-то вроде этого? (непроверенные)

require 'erb' 
template = File.read(template_file) 
template.gsub!(/<%=(.*?)%>/, '!\1!') 
erb = ERB.new(template) 
result = erb.result 
+0

Ничего, я думаю, что я мог бы сделать template.gsub! (/ <%=.*?=> /, 'preprocess (\ 1)') и добавить preprocess (content) для привязки. Я попробую это сейчас. – Gus

+0

Я предполагаю, что вы имели в виду template.gsub! (/ <%=(.*)%> /, '<%=!\1!%>'). Проблема в том, что два вызова метода в одной строке <%=function%><%=function%> заменяется на <% =! Function%><% = function!%>, Потому что регулярное выражение является жадным. – Gus

+0

Я думаю, что я мог бы исключить символы <>% из регулярного выражения -/<%=([^<>%] *)%>/-, но я должен был бы разрешить их только при внутри кавычек. – Gus

0

Существует нет простого способа сделать это. Может быть, вы можете определить:

class String; def bang; "!#{self}!" end end 

и сделать

<%= "test".bang %> 
+0

Спасибо за ответ. Проблема с этим подходом заключается в том, что я намерен генерировать 2 разных выхода из одного и того же шаблона. Один из них должен быть HTML, а другой - текстовым текстовым файлом в формате ESC/POS, который будет напечатан на фискальном принтере epson. – Gus