From 45863011900af24f7a40f156ce8b6142242f51d8 Mon Sep 17 00:00:00 2001 From: Igal Koshevoy Date: Sat, 15 Oct 2011 22:43:17 -0700 Subject: [PATCH] Ported "mofo" to use Nokogiri for Ruby 1.9.2. --- vendor/gems/mofo-0.2.8/lib/microformat.rb | 23 +++++++++++-------- .../gems/mofo-0.2.8/lib/microformat/simple.rb | 2 +- vendor/gems/mofo-0.2.8/lib/mofo/xfn.rb | 5 ++-- vendor/gems/mofo-0.2.8/lib/mofo/xoxo.rb | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/vendor/gems/mofo-0.2.8/lib/microformat.rb b/vendor/gems/mofo-0.2.8/lib/microformat.rb index d90f9a6..8552d3b 100644 --- a/vendor/gems/mofo-0.2.8/lib/microformat.rb +++ b/vendor/gems/mofo-0.2.8/lib/microformat.rb @@ -1,5 +1,4 @@ -%w(rubygems set hpricot microformat/string microformat/array open-uri ostruct timeout).each { |f| require f } -gem 'hpricot', '>=0.4.59' +%w(rubygems set nokogiri microformat/string microformat/array open-uri ostruct timeout).each { |f| require f } class Microformat module Base @@ -139,16 +138,18 @@ def build_doc(source) when String, File, StringIO result = '' Timeout.timeout(@@timeout) { result = open(source) } - Hpricot(result) - when Hpricot, Hpricot::Elements + Nokogiri::XML.fragment(result) + when Nokogiri, Nokogiri::XML::Element source when Hash - Hpricot(source[:text]) if source[:text] + Nokogiri::XML.fragment(source[:text]) if source[:text] + else + raise ArgumentError, "Unknown source class: #{source.class.name}" end end def find_occurences(doc) - doc/".#{@container}" + doc.css ".#{@container}" end def build_class(microformat) @@ -260,7 +261,7 @@ def extract_license(doc) def extract_tags(doc) return unless (tags = doc.search("[@rel=tag]")).size.nonzero? - tags.inject([]) { |array, tag| array + [tag.innerText] } + tags.inject([]) { |array, tag| array + [tag.text] } end def parse_element(element, target = nil) @@ -285,7 +286,7 @@ def parse_element(element, target = nil) when 'img' then element['alt'] end || '' - (value.empty? ? element.innerHTML : value).strip.strip_html.coerce + (value.empty? ? element.inner_html : value).strip.strip_html.coerce end end @@ -316,5 +317,9 @@ class MicroformatNotFound < Exception; end Mofo = Microformat # type & id are used a lot in uformats and deprecated in ruby. no loss. -OpenStruct.class_eval { undef :type, :id } +OpenStruct.class_eval do + [:type, :id].each do |name| + undef_method(name) if self.respond_to?(name) + end +end Symbol.class_eval { def no_bang() to_s.sub('!','').to_sym end } diff --git a/vendor/gems/mofo-0.2.8/lib/microformat/simple.rb b/vendor/gems/mofo-0.2.8/lib/microformat/simple.rb index 1616ab7..58868c5 100644 --- a/vendor/gems/mofo-0.2.8/lib/microformat/simple.rb +++ b/vendor/gems/mofo-0.2.8/lib/microformat/simple.rb @@ -13,7 +13,7 @@ def self.find_occurences(doc) end def self.build_class(tag) - new(tag.innerText) + new(tag.text) end def self.from(options) diff --git a/vendor/gems/mofo-0.2.8/lib/mofo/xfn.rb b/vendor/gems/mofo-0.2.8/lib/mofo/xfn.rb index df07203..81a0395 100644 --- a/vendor/gems/mofo-0.2.8/lib/mofo/xfn.rb +++ b/vendor/gems/mofo-0.2.8/lib/mofo/xfn.rb @@ -22,8 +22,9 @@ def to_s attr_accessor :links def self.find_occurences(doc) + raise NotImplementedError, "XFN not supported yet. What's the Nokogiri equivalent of Hpricot::Doc?" case doc - when Hpricot::Doc then @occurences = XFN.new(doc) + when Nokogiri::XML::Element then @occurences = XFN.new(doc) else @occurences end end @@ -36,7 +37,7 @@ class << self def initialize(doc) @links = doc.search("a[@rel]").map do |rl| relation = rl[:rel].include?(' ') ? rl[:rel].split(' ') : rl[:rel] - Link.new(:name => rl.innerHTML, :link => rl[:href], :relation => relation) + Link.new(:name => rl.inner_html, :link => rl[:href], :relation => relation) end end diff --git a/vendor/gems/mofo-0.2.8/lib/mofo/xoxo.rb b/vendor/gems/mofo-0.2.8/lib/mofo/xoxo.rb index 95a7cd6..30484f0 100644 --- a/vendor/gems/mofo-0.2.8/lib/mofo/xoxo.rb +++ b/vendor/gems/mofo-0.2.8/lib/mofo/xoxo.rb @@ -40,7 +40,7 @@ def self.container?(el) def self.build_label(node) if node.elem? - label = Label.new(node.innerHTML.strip) + label = Label.new(node.inner_html.strip) label.url = node['href'] if node.name == 'a' label elsif node.text? && !node.to_s.strip.empty?