class Slacken::DomContainer

Public: a DOM tree container parsed by Nokogiri.

Public Class Methods

new(root) click to toggle source
# File lib/slacken/dom_container.rb, line 6
def initialize(root)
  @root = root
end

Public Instance Methods

to_component() click to toggle source

Public: Create a DocumentComponent of the root node.

Returns a DocumentComponent or nil.

# File lib/slacken/dom_container.rb, line 13
def to_component
  build_document_component(@root)
end

Private Instance Methods

attrs_of(node) click to toggle source
# File lib/slacken/dom_container.rb, line 43
def attrs_of(node)
  case node.name.to_sym
  when :text
    { content: node.content }
  when :iframe, :a
    { href: node['href'] }
  when :input
    { type: node['type'], checked: node['checked'] }
  when :img
    { src: node['src'], alt: node['alt'], class: (node['class'] || '').split }
  else
    {}
  end
end
build_document_component(node) click to toggle source

Internal: Build a DocumentComponent of the given node recursively.

current_node - A Nokogiri::HTML::Document.

Returns a DocumentComponent.

# File lib/slacken/dom_container.rb, line 24
def build_document_component(node)
  DocumentComponent.new(
    node.name.downcase,
    build_document_components_array(node.children),
    attrs_of(node)
  )
end
build_document_components_array(node_set) click to toggle source

Internal: Build sequence of DocumentComponent objects for each given nodes.

nodes - A Nokogiri::XML::NodeSet.

Returns an Array of DocumentComponents.

# File lib/slacken/dom_container.rb, line 37
def build_document_components_array(node_set)
  node_set
    .reject { |node| node.respond_to?(:html_dtd?) && node.html_dtd? }
    .map { |node| build_document_component(node) }
end