Расширение нокогири в приложении rails - PullRequest
1 голос
/ 29 января 2012

Я расширил класс 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

Я поместил этот код в файл, расположенный в lib / nokogiri / html / document.rb в моем дереве приложений rails 3

Я вызываю эту функцию следующим образом

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, я не получаю никаких ошибок, и он работает как положено

Спасибо Пол

1 Ответ

0 голосов
/ 29 января 2012

В rails 3 вам нужно поместить код патча обезьяны в config / initializers, а не в lib

...