class SwedbankPay::SidebarRenderer

Renders the Sidebar

Public Class Methods

new(tree) click to toggle source
# File lib/sidebar_renderer.rb, line 9
def initialize(tree)
  raise ArgumentError, 'pages cannot be nil' if tree.nil?
  raise ArgumentError, 'pages must be an SidebarTreeBuilder' unless tree.is_a? SidebarTreeBuilder

  @tree = tree
  @html_builder = SidebarHTMLBuilder.new(@tree)
end

Public Instance Methods

enrich_jekyll() click to toggle source
# File lib/sidebar_renderer.rb, line 17
def enrich_jekyll
  enrich_jekyll_pages(@tree)
end
render() click to toggle source
# File lib/sidebar_renderer.rb, line 21
def render
  render_pages(@tree)
end

Private Instance Methods

render_pages(pages) click to toggle source
# File lib/sidebar_renderer.rb, line 27
def render_pages(pages)
  return if pages.empty?

  pages.each do |page|
    sidebar_html = render_sidebar(page)
    name = page.filename || page.name || page.to_s

    if sidebar_html.nil?
      SidebarLogger.warn("No HTML rendered for #{name}.")
      next
    end

    if page.sidebar_container.nil?
      SidebarLogger.warn("No sidebar container found in '#{name}'. #{page.filename}")
      next
    end

    page.sidebar_container.inner_html = sidebar_html

    page.save

    render_pages(page.children)
  end
end
render_sidebar(page) click to toggle source
# File lib/sidebar_renderer.rb, line 52
def render_sidebar(page)
  sidebar_html = nil

  begin
    sidebar_html = @html_builder.build(page)

    File.open('_site/sidebar.html', 'w') { |f| f.write(sidebar_html) }
  rescue StandardError => e
    name = page.filename || page.name || page.to_s
    SidebarLogger.error("Unable to render sidebar for '#{name}'.")
    SidebarLogger.debug("#{e.message}. #{e.backtrace.inspect}")
  end

  sidebar_html
end