ERB

处理eRuby脚本的类。该类通常被称作ERbLight,与eruby不同的是,它在标准输出中显示字符时并不插入字符串。

用法

使用ERB类时,需要添加require 'erb'语句。

require 'erb'

ERB.new($<.read).run

类方法

ERB.new(eruby_script, safe_level=nil, trim_mode=nil, eoutvar='_erbout')

从eruby_script中生成ERB。可指定eval时的$SAFE、trim_mode(下文详述)和eoutvar(若需要在eRuby脚本中使用ERB时才需要修改。通常不必更改。)。

方法

ERB#run(b=TOPLEVEL_BINDING)

以b的binding来执行ERB,显示字符。

ERB#result(b=TOPLEVEL_BINDING)

以b的binding来执行ERB,返回字符串。

ERB#src

取得变换之后的Ruby脚本。

ERB#def_method(mod, methodname, fname='(ERB)')

将变换之后的Ruby脚本定义为方法。以mod来指定新方法所在的模块,以methodname来指定方法名。fname是定义脚本时的文件名。一般发生错误时才会用到它。

erb = ERB.new(script)
erb.def_method(MyClass, 'foo(bar)', 'foo.erb')
ERB#def_module(methodname='erb')

返回一个无名模块,该模块将变换后的Ruby脚本定义为方法。

ERB#def_class(suplerklass=Object, methodname='erb')

返回一个无名类,该类将变换后的Ruby脚本定义为方法。

Module ERB::Util

ERB::Util.html_escape(s)
ERB::Util.h(s)

把HTML的 &"<> 变为转义字符。 (基本等同于CGI.escapeHTML。)

ERB::Util.url_encode(s)
ERB::Util.u(s)

对字符串进行URL编码。 (基本等同于CGI.escape。)

Module ERB::DefMethod

ERB::DefMethod.def_erb_method(methodname, erb)

将erb的脚本定义为self的方法。由methodname指定方法名。若self是字符串的话,就读入该文件并使用ERB完成变换之后再定义为方法。

class Writer
  extend ERB::DefMethod
  def_erb_method('to_html', 'writer.erb')
  ...
end
...
puts writer.to_html

trim_mode

不同的trim_mode选项值会影响到对代码的处理方式。它可以指定

trim_mode选项的可用值如下。

运行范例

# 脚本
<% 3.times do |n| %>
% n = 0
* <%= n%>
<% end %>

# trim_mode = nil, '', 0

% n = 0
* 0

% n = 0
* 1

% n = 0
* 2

# trim_mode = 1, '>'
% n = 0
* 0% n = 0
* 1% n = 0
* 2

# trim_mode = 2, '<>'
% n = 0
* 0
% n = 0
* 1
% n = 0
* 2

# trim_mode = '%'

* 0

* 0

* 0

# trim_mode = '%>', '>%'
* 0* 0* 0

# trim_mode = '%<>', '<>%'
* 0
* 0
* 0