1

我扩展了 Nokogiri::HTML:Document 类,添加了一个名为 on_same_line? 的函数。

module Nokogiri
  module HTML
    class Document 
      def on_same_line?(node1,node2,font_sizes)
        return false if node1.nil? or node2.nil? or font_sizes.nil?
        return false if (node1.name != "div" ||  node2.name != "div")
        fsize1 = font_sizes[node1.children[0].children[0].attributes["class"].value]
        fsize2 = font_sizes[node2.children[0].children[0].attributes["class"].value]
        style1 = node1.attributes["style"].value
        style2 = node2.attributes["style"].value
        top1 = style1.split(/;/)[1].split(/:/)[1].to_i
        top2 = style2.split(/;/)[1].split(/:/)[1].to_i
        (top1 + fsize1 - top2 - fsize2).abs < 4  
      end
    end
  end
end

我将此代码放置在我的 rails 3 应用程序树中 lib/nokogiri/html/document.rb 的文件中

我将这个函数称为如下

if @html_doc.on_same_line?(node,node2,font_size_hash)
   ### do something
end

此代码位于我创建的单独的自定义 ruby​​ 类中。这个类是 MyClass 并且在 MyModule 中。这个类的代码放在 lib/my_module/my_class.rb 下

现在,当此代码作为我的 rails 应用程序的一部分执行时,我收到以下错误。

unexpected '?' after '[#<Nokogiri::CSS::Node:0x00000100dfebd8 @type=:ELEMENT_NAME, @value=["on_same_line"]>]'

我不知道为什么会这样。有人可以帮我吗

此外,当我在 rails 应用程序之外运行相同的代码时,我没有收到任何错误,并且它按预期工作

谢谢保罗

4

1 回答 1

0

在 rails 3 你需要把你的猴子补丁代码放在 config/initializers 下而不是 lib

于 2012-01-29T02:51:56.207 回答