Sha256: dbca3e645e259c01d9b8c675fa7cb0236064c66062e8395c9ab28f0613ca62c8

Contents?: true

Size: 1.89 KB

Versions: 5

Compression:

Stored size: 1.89 KB

Contents

require 'rouge'

module Fukuzatsu

  module Formatters

    class Html

      include Formatters::Base

      def self.index(summaries, base_output_path)
        Fukuzatsu::Formatters::HtmlIndex.new(summaries, base_output_path).export
      end

      def columns
        ["class", "method", "complexity"]
      end

      def content
        Haml::Engine.new(output_template).render(
          Object.new, {
            header: header,
            rows: rows,
            source_lines: preprocessed,
            class_name: summary.container_name,
            average_complexity: sprintf("%0.2f", summary.average_complexity),
            path_to_file: summary.source_file,
            date: Time.now.strftime("%Y/%m/%d"),
            time: Time.now.strftime("%l:%M %P")
          }
        )
      end

      def export
        begin
          File.open(path_to_results, 'w') {|outfile| outfile.write(content)}
        rescue Exception => e
          puts "Unable to write output: #{e} #{e.backtrace}"
        end
      end

      def file_extension
        ".htm"
      end

      def formatter
        Rouge::Formatters::HTML.new(line_numbers: true)
      end

      def header
        columns.map{|col| "<th>#{col.titleize}</th>"}.join("\r\n")
      end

      def lexer
        lexer = Rouge::Lexers::Ruby.new
      end

      def output_template
        File.read(File.dirname(__FILE__) + "/templates/output.html.haml")
      end

      def preprocessed
        formatter.format(lexer.lex(summary.raw_source))
      end

      def rows
        i = 0
        summary.summaries.inject([]) do |a, summary|
          i += 1
          a << "<tr class='#{i % 2 == 1 ? 'even' : 'odd'}'>"
          a << "  <td>#{summary.container_name}</td>"
          a << "  <td>#{summary.entity_name}</td>"
          a << "  <td>#{summary.complexity}</td>"
          a << "</tr>"
          a
        end.join("\r\n")
      end

    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fukuzatsu-2.3.0 lib/fukuzatsu/formatters/html.rb
fukuzatsu-2.2.4 lib/fukuzatsu/formatters/html.rb
fukuzatsu-2.2.3 lib/fukuzatsu/formatters/html.rb
fukuzatsu-2.2.2 lib/fukuzatsu/formatters/html.rb
fukuzatsu-2.2.1 lib/fukuzatsu/formatters/html.rb