从Nokogiri :: XML :: Node :: SaveOptions常量中删除类名

时间:2013-06-22 15:44:29

标签: ruby nokogiri

有没有办法包含来自Nokogiri::XML::Node::SaveOptions的常量,就像我对模块一样?

我目前正在使用

save_options = Nokogiri::XML::Node::SaveOptions::FORMAT | Nokogiri::XML::Node::SaveOptions::AS_HTML
puts html.serialize(:save_with => save_options)

并且更愿意拥有

html.serialize(:save_with => FORMAT | AS_HTML)

我可以使用

稍微改善一下
include Nokogiri::XML

html.serialize(:save_with => Node::SaveOptions::FORMAT | Node::SaveOptions::AS_HTML)

html.serialize(:save_with => Nokogiri::XML::Node::SaveOptions.new.format.as_html)

但这些都不是理想的。有没有人有更好的方法?我认为没有理由认为这不是一个模块而不是一个类,因为创建一个对象的优势很小甚至不存在。

2 个答案:

答案 0 :(得分:1)

对于你需要的常数,最安全的事情就是“手工”。如果在范围内写入,则常量将使用正确的值定义:

class YourClass # or module YourModule
  %w(FORMAT AS_HTML).each do |konst|
      const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

如果常数很大,你可以自动创建一点点。问题是这是一个全有或全无的方法,类名这样的东西也是常量,所以它们也会被导入。对于您正在寻找的常数,它似乎不是一个问题。

class YourClass
  Nokogiri::XML::Node::SaveOptions.constants.each do |konst|
    const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

希望它有所帮助。

答案 1 :(得分:-1)

如果您正在使用html.serialize(:save_with => FORMAT | AS_HTML)并希望简化它,为什么不使用:

html.to_html

用这些标志输出:

DEFAULT_HTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML

这是Nokogiri的标准HTML输出默认值。

如果您想要所有电源,可以深入查看以使用write_to

to_htmlwrite_to都记录在Nokogiri::XML::Node中。你可能也想在源头看一看。