2013-07-31 3 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! (/ <%=.*?=> /, 'preprocess (\ 1)')을 수행 할 수 있다고 생각합니다. bindind에 대한 전처리 (내용) 메소드. 나는 이것을 지금 시도 할 것이다. – Gus

+0

나는 template.gsub! (/ <%=(.*)%> /, '<%=!\1!%>')을 의미한다고 생각합니다. 문제는 regex가 greedy이기 때문에 동일한 라인에있는 두 개의 메소드 호출이 <%=function%><%=function%>이 <% =! function %><% = function! %>로 대체된다는 것입니다. – Gus

+0

정규식에서 문자 <> %를 제외 할 수 있다고 생각합니다. -/<%=([^<> %] *) %>/-하지만 인용 부호 안에있을 때만 허용해야합니다. – Gus

0

직접적인 방법은 없습니다.

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

과 같은

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

답을 보내 주셔서 감사합니다. 이 방법의 문제점은 동일한 템플릿에서 2 개의 다른 출력을 생성하려고한다는 것입니다. 하나는 HTML이고 다른 하나는 EPSON 회계 프린터에서 인쇄 할 ESC/POS 형식의 텍스트 파일입니다. – Gus