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