class Hatemile::Util::Html::NokogiriLib::NokogiriHTMLDOMParser

The class NokogiriHTMLDOMParser is official implementation of HTMLDOMParser interface for the Nokogiri library.

Public Class Methods

new(code_or_parser, encoding = 'UTF-8') click to toggle source

Initializes a new object that encapsulate the parser of Jsoup.

@param code_or_parser [String, Nokogiri::HTML::Document] The HTML

code or the parser of Nokogiri.

@param encoding [String] The enconding of code.

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 46
def initialize(code_or_parser, encoding = 'UTF-8')
  Hatemile::Helper.require_not_nil(code_or_parser, encoding)
  Hatemile::Helper.require_valid_type(
    code_or_parser,
    String,
    Nokogiri::HTML::Document
  )
  Hatemile::Helper.require_valid_type(encoding, String)

  @document = if code_or_parser.class == String
                Nokogiri::HTML::Document.parse(
                  code_or_parser,
                  nil,
                  encoding
                )
              else
                code_or_parser
              end
  @results = nil
end

Public Instance Methods

clear_parser() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#clear_parser

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 200
def clear_parser
  @document = nil
  @results = nil
end
create_element(tag) click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#create_element

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 182
def create_element(tag)
  NokogiriHTMLDOMElement.new(@document.create_element(tag))
end
find(selector) click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#find

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 69
def find(selector)
  @results = if selector.is_a?(NokogiriHTMLDOMElement)
               [selector.get_data]
             elsif selector.is_a?(Array)
               selector.map(&:get_data)
             else
               @document.css(selector)
             end
  self
end
find_ancestors(selector) click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#find_ancestors

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 133
def find_ancestors(selector)
  array = []
  selector = [selector] if selector.is_a?(NokogiriHTMLDOMElement)
  if selector.is_a?(Array)
    selector.each do |element|
      native_element = element.get_data
      @results.each do |result|
        parents = result.ancestors
        if parents.include?(native_element)
          array.push(native_element)
          break
        end
      end
    end
  else
    @results.each do |result|
      array = array.concat(result.ancestors(selector))
    end
  end
  @results = array
  self
end
find_children(selector) click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#find_children

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 82
def find_children(selector)
  array = []
  selector = [selector] if selector.is_a?(NokogiriHTMLDOMElement)
  if selector.is_a?(Array)
    selector.each do |element|
      native_element = element.get_data
      @results.each do |result|
        if result.children.include?(native_element)
          array.push(native_element)
          break
        end
      end
    end
  else
    @results.each do |result|
      result.css(selector).each do |found_element|
        array.push(found_element) if found_element.parent == result
      end
    end
  end
  @results = array
  self
end
find_descendants(selector) click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#find_descendants

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 108
def find_descendants(selector)
  array = []
  selector = [selector] if selector.is_a?(NokogiriHTMLDOMElement)
  if selector.is_a?(Array)
    selector.each do |element|
      native_element = element.get_data
      parents = native_element.ancestors
      @results.each do |result|
        if parents.include?(result)
          array.push(native_element)
          break
        end
      end
    end
  else
    @results.each do |result|
      array = array.concat(result.css(selector))
    end
  end
  @results = array
  self
end
first_result() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#first_result

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 158
def first_result
  return nil if @results.nil? || @results.empty?
  NokogiriHTMLDOMElement.new(@results[0])
end
get_html() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#get_html

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 188
def get_html
  NokogiriHTMLDOMElement.new(@document).get_outer_html
end
get_parser() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#get_parser

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 194
def get_parser
  @document
end
last_result() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#last_result

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 165
def last_result
  return nil if @results.nil? || @results.empty?
  NokogiriHTMLDOMElement.new(@results[@results.length - 1])
end
list_results() click to toggle source

@see Hatemile::Util::Html::HTMLDOMParser#list_results

# File lib/hatemile/util/html/nokogiri/nokogiri_html_dom_parser.rb, line 172
def list_results
  array = []
  @results.each do |result|
    array.push(NokogiriHTMLDOMElement.new(result))
  end
  array
end