ERB 扩展仿真 -%> 用于单元测试
Emulation for ERB extention -%> for the purpose of unittests
我需要评估一个 ERB 模板,然后确保它是一个有效的 NGINX 配置文件,但普通 ERB 不允许 -%>
指令。我怎样才能将该扩展添加到我的 rakefile 中?
我已经能够在 irb
中重现该问题:
~ $ irb
irb(main):001:0> require 'erb'
=> true
irb(main):002:0> var = "yeah"
=> "yeah"
irb(main):003:0> ERB.new(" <% if var == 'yeh' -%>
irb(main):004:1" something
irb(main):005:1" <% else -%>
irb(main):006:1" something else
irb(main):007:1" <% end -%>
irb(main):008:1" ").result binding #"
SyntaxError: (erb):1: syntax error, unexpected ';'
...concat " "; if var == 'yeh' -; _erbout.concat "\nsomething\...
... ^
(erb):3: syntax error, unexpected keyword_else, expecting $end
; else -; _erbout.concat "\nsomething else\n"
^
from /usr/lib/ruby/1.9.1/erb.rb:838:in `eval'
from /usr/lib/ruby/1.9.1/erb.rb:838:in `result'
from (irb):3
from /usr/bin/irb:12:in `<main>'
为了在 ERB 中使用 -%>
语法,您需要设置 trim mode option to '-'。这是构造函数的第三个选项,您需要将 nil
作为第二个选项传递(除非您想更改默认的 safe_level
):
ERB.new(" <% if var == 'yeh' %>
something
<% else %>
something else
<% end %>
", nil, '-').result binding
如果没有此选项,-
将包含在生成的 Ruby 脚本中,并在您尝试 运行 时给出语法错误。
请注意,还有另一个 eRuby 处理器,Erubis which might have slightly different options (it can still use this syntax)。这个被Rails使用了。查看文档了解更多信息。
我需要评估一个 ERB 模板,然后确保它是一个有效的 NGINX 配置文件,但普通 ERB 不允许 -%>
指令。我怎样才能将该扩展添加到我的 rakefile 中?
我已经能够在 irb
中重现该问题:
~ $ irb
irb(main):001:0> require 'erb'
=> true
irb(main):002:0> var = "yeah"
=> "yeah"
irb(main):003:0> ERB.new(" <% if var == 'yeh' -%>
irb(main):004:1" something
irb(main):005:1" <% else -%>
irb(main):006:1" something else
irb(main):007:1" <% end -%>
irb(main):008:1" ").result binding #"
SyntaxError: (erb):1: syntax error, unexpected ';'
...concat " "; if var == 'yeh' -; _erbout.concat "\nsomething\...
... ^
(erb):3: syntax error, unexpected keyword_else, expecting $end
; else -; _erbout.concat "\nsomething else\n"
^
from /usr/lib/ruby/1.9.1/erb.rb:838:in `eval'
from /usr/lib/ruby/1.9.1/erb.rb:838:in `result'
from (irb):3
from /usr/bin/irb:12:in `<main>'
为了在 ERB 中使用 -%>
语法,您需要设置 trim mode option to '-'。这是构造函数的第三个选项,您需要将 nil
作为第二个选项传递(除非您想更改默认的 safe_level
):
ERB.new(" <% if var == 'yeh' %>
something
<% else %>
something else
<% end %>
", nil, '-').result binding
如果没有此选项,-
将包含在生成的 Ruby 脚本中,并在您尝试 运行 时给出语法错误。
请注意,还有另一个 eRuby 处理器,Erubis which might have slightly different options (it can still use this syntax)。这个被Rails使用了。查看文档了解更多信息。