class SwedbankPay::SidebarTreeBuilder

Arranges Sidebar pages into a tree

Public Class Methods

new(pages) click to toggle source
# File lib/sidebar_tree_builder.rb, line 14
def initialize(pages)
  raise ArgumentError, 'pages cannot be nil' if pages.nil?
  raise ArgumentError, 'pages must be a Hash' unless pages.is_a? Hash

  @tree = tree(pages)
  enrich_jekyll_pages(@tree)
end

Public Instance Methods

inspect() click to toggle source
# File lib/sidebar_tree_builder.rb, line 26
def inspect
  stringify(inspection: true)
end
to_s() click to toggle source
# File lib/sidebar_tree_builder.rb, line 22
def to_s
  stringify
end

Private Instance Methods

enrich_jekyll_pages(pages) click to toggle source
# File lib/sidebar_tree_builder.rb, line 76
def enrich_jekyll_pages(pages)
  return if pages.empty?

  pages.each do |page|
    page.enrich_jekyll

    enrich_jekyll_pages(page.children)
  end
end
sort_by_path_reversed(pages) click to toggle source
# File lib/sidebar_tree_builder.rb, line 72
def sort_by_path_reversed(pages)
  pages.sort_by { |path, _| path }.reverse
end
stringify(inspection: false) click to toggle source
# File lib/sidebar_tree_builder.rb, line 32
def stringify(inspection: false)
  output = "<#{self.class} ##{count}"

  if inspection
    output << ":\n"
    @tree.each do |page|
      output << "#{page}\n"
    end
  end

  output << '>'
  output
end
tree(pages) click to toggle source
# File lib/sidebar_tree_builder.rb, line 46
def tree(pages)
  tree = []
  children_of = {}
  page_number = 0

  sort_by_path_reversed(pages).each do |_, page|
    children_of[page.path] = [] if children_of[page.path].nil?
    page.children = children_of[page.path].sort

    if page.parent.nil?
      # Root pages are pushed directly into the root of the tree
      page.number = page_number
      tree.push(page)
      page_number += 1
    else
      children_of[page.parent] = [] if children_of[page.parent].nil?
      children_of[page.parent].push(page)
    end
  end

  # Sort the root pages
  tree.sort!

  SidebarPageCollection.new(nil, tree)
end