# frozen_string_literal: true require "cgi" require "how_is/report/base_report" class HowIs # HTML Report implementation class HtmlReport < BaseReport def format :html end def title(content) @title = content @r += "\n

#{content}

\n" end def header(content) @r += "\n

#{content}

\n" end def link(content, url) %[#{content}] end def text(content) @r += "

#{content}

\n" end def unordered_list(arr) @r += "\n\n\n" end ROW_HTML_GRAPH = <<-EOF %{label_text} %{link_text} EOF def horizontal_bar_graph(data) if data.length == 1 && data[0][0] == "(No label)" text "There are no open issues to graph." return end biggest = data.map { |x| x[1] }.max get_percentage = ->(number_of_issues) { number_of_issues * 100 / biggest } longest_label_length = data.map(&:first).map(&:length).max label_width = "#{longest_label_length}ch" @r += "\n" data.each do |row| @r += Kernel.format(ROW_HTML_GRAPH, label_width: label_width, label_text: label_text_for(row), percentage: get_percentage.call(row[1]), link_text: row[1]) end @r += "
\n" end def export @r = "" generate_report_text! end HTML_DOC_TEMPLATE = <<~EOF %{title}
%{report}
EOF def export_file(file) content = Kernel.format(HTML_DOC_TEMPLATE, title: @title, report: export) File.open(file, "w") do |f| f.puts content end end private def label_text_for(row) if row[2] link(row[0], row[2]) else row[0] end end end end