2013-07-31 55 views
0

我想延長ERB所以每一個輸出標籤 - <%=%> - 含量的結果被呈現之前被預處理。如何延長ERB模板

例如,

<%= 'test' %> 

現在應該呈現的

!test! 

代替

test 

我怎樣才能做到這一點?

回答

0

像這樣的事情? (未經測試)

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

不錯,我想我能做到template.gsub!(/ <%=.*?=> /,「預處理(\ 1)」),並添加預處理(內容)方法到bindind。我現在就試試這個。 – Gus

+0

我想你的意思是template.gsub!(/ <%=(.*)%> /,'<%=!\1!%>')。問題在於同一行<%=function%><%=function%>中的兩個方法調用被<%=!function%><%= function!%>所取代,因爲regex是貪婪的。 – Gus

+0

我想我可以排除字符<>%來自於正則表達式 -/<%=([^<>%] *)%>/- ,但我會只允許他們引號內時。 – Gus

0

有做,沒有直接的方法。也許你可以定義:

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

,做

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

感謝您的回答。這種方法的問題是我打算從同一個模板生成2個不同的輸出。每個人都應該是HTML,另一個是在愛普生打印的ESC/POS格式的文本文件稅控打印機 – Gus