class ContentfulConverter::TreeCloner

Attributes

noko_stack[R]
nokogiri_fragment[R]
rich_stack[R]

Public Class Methods

new(nokogiri_fragment, noko_stack, rich_stack) click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 16
def initialize(nokogiri_fragment, noko_stack, rich_stack)
  @nokogiri_fragment = nokogiri_fragment
  @noko_stack = noko_stack
  @rich_stack = rich_stack
end
nokogiri_to_rich_text(nokogiri_fragment) click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 8
def self.nokogiri_to_rich_text(nokogiri_fragment)
  if nokogiri_fragment.children.empty?
    return NodeBuilder.build(nokogiri_fragment).to_h
  end

  new(nokogiri_fragment, Stack.new, Stack.new).traverse_and_clone
end

Public Instance Methods

traverse_and_clone() click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 22
def traverse_and_clone
  initialize_stacks

  while noko_stack.any?
    noko_node = noko_stack.pop
    rich_node = rich_stack.pop

    next unless noko_node.children.any?

    children_traversal(noko_node, rich_node)
  end

  rich_root_node.to_h
end

Private Instance Methods

add_to_stacks(noko_node, rich_node) click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 60
def add_to_stacks(noko_node, rich_node)
  noko_stack.add(noko_node)
  rich_stack.add(rich_node)
end
children_traversal(noko_node, rich_node) click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 50
def children_traversal(noko_node, rich_node)
  noko_node.children.each do |child_node|
    rich_child_node = NodeBuilder.build(child_node, rich_node)

    add_to_stacks(child_node, rich_child_node)

    rich_node.add_content(rich_child_node)
  end
end
initialize_stacks() click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 41
def initialize_stacks
  noko_stack.add(nokogiri_fragment)
  rich_stack.add(rich_root_node)
end
rich_root_node() click to toggle source
# File lib/contentful_converter/tree_cloner.rb, line 46
def rich_root_node
  @rich_root_node ||= NodeBuilder.build(nokogiri_fragment)
end