Sha256: 5b9500885964bbf5f5118533299b4a8656320e525659a798e3674066d617bf20

Contents?: true

Size: 1.76 KB

Versions: 26

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

module DeepCover
  require_relative 'base'

  module Reporter
    class Text < Base
      INDENT = '  '
      def report
        formatted_headings = headings.map.with_index { |h, i| {value: h, alignment: :center} }
        columns = rows.transpose
        (1...columns.size).step(2) { |i| columns[i] = formatted_stats(columns[i]) }
        table = Terminal::Table.new(
            headings: formatted_headings,
            rows: columns.transpose,
            style: {border_bottom: false, border_top: false, alignment: :right},
        )
        table.align_column 0, :left
        table.render + "\n\nOverall: #{analysis.overall}%"
      end

      def self.report(coverage, **options)
        Text.new(coverage, **options).report
      end

      private

      def formatted_stats(data)
        columns = data.transpose
        columns[1..1] = [] if columns[1].none?
        Terminal::Table.new(
            rows: columns.transpose,
            style: {border_x: '', border_bottom: false, border_top: false, alignment: :right}
        ).render.gsub(' | ', ' ').gsub(/ ?\| ?/, '').split("\n")
      end

      def rows
        populate_stats.map do |full_path, partial_path, data, children|
          [partial_path, *transform_data(data)]
        end
      end

      def headings
        Coverage::Analysis.template.values.flat_map do |analyser|
          [analyser.human_name, '%']
        end.unshift('Path')
      end

      # {per_char: Stat, ...} => ['1 [+2] / 3', '100 %', ...]
      def transform_data(data)
        data.flat_map do |type, stat|
          ignored = "[+#{stat.ignored}]" if stat.ignored > 0
          [[stat.executed, ignored, '/', stat.potentially_executable], format('%.2f', stat.percent_covered)]
        end
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 2 rubygems

Version Path
deep-cover-core-1.1.0 lib/deep_cover/reporter/text.rb
deep-cover-core-1.0.0 lib/deep_cover/reporter/text.rb
deep-cover-core-0.8.1 lib/deep_cover/reporter/text.rb
deep-cover-core-0.8.0 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.10 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.9 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.8 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.7 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.6 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.5 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.4 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.3 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.2 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.1 lib/deep_cover/reporter/text.rb
deep-cover-core-0.7.0 lib/deep_cover/reporter/text.rb
deep-cover-core-0.6.4 lib/deep_cover/reporter/text.rb
deep-cover-core-0.6.3 lib/deep_cover/reporter/text.rb
deep-cover-core-0.6.3.pre lib/deep_cover/reporter/text.rb
deep-cover-0.6.2 lib/deep_cover/reporter/text.rb
deep-cover-0.6.1 lib/deep_cover/reporter/text.rb