class Danger::DangerSimpleCovJson

Report your Ruby app test suite code coverage.

You can use [simplecov](github.com/colszowka/simplecov) to gather code coverage data and a [json formatter](github.com/vicentllongo/simplecov-json) so this plugin can parse it.

@example Report code coverage

simplecov.report('coverage/coverage.json')
simplecov.individual_report('coverage/coverage.json', Dir.pwd)

@see marcelofabri/danger-simplecov_json @tags ruby, code-coverage, simplecov

Public Class Methods

instance_name() click to toggle source
# File lib/simplecov_json/plugin.rb, line 79
def self.instance_name
  'simplecov'
end

Public Instance Methods

individual_coverage_message(covered_files) click to toggle source

Builds the markdown table displaying coverage on individual files @param [Array] covered_files @return [String] Markdown table

# File lib/simplecov_json/plugin.rb, line 65
def individual_coverage_message(covered_files)
  require 'terminal-table'

  message = "### Code Coverage\n\n"
  table = Terminal::Table.new(
    headings: %w(File Coverage),
    style: { border_i: '|' },
    rows: covered_files.map do |file|
      [file[:filename], "#{format('%.02f', file[:covered_percent])}%"]
    end
  ).to_s
  message + table.split("\n")[1..-2].join("\n")
end
individual_report(coverage_path, current_project_path) click to toggle source

Parse a JSON code coverage file and report on the files that you have added or modified in git @return [void]

# File lib/simplecov_json/plugin.rb, line 41
def individual_report(coverage_path, current_project_path)
  if File.exist? coverage_path
    committed_files = git.modified_files + git.added_files

    unless current_project_path.nil?
      committed_files = committed_files.map do |s|
        current_project_path + '/' + s
      end
    end

    covered_files = JSON.parse(File.read(coverage_path), symbolize_names: true)[:files]
                        .select { |f| committed_files.include?(f[:filename]) }

    return if covered_files.nil? || covered_files.empty?
    markdown individual_coverage_message(covered_files)
  else
    fail('Code coverage data not found')
  end
end
report(coverage_path, sticky: true) click to toggle source

Parse a JSON code coverage file and report that information as a message in Danger. @return [void]

# File lib/simplecov_json/plugin.rb, line 22
def report(coverage_path, sticky: true)
  if File.exist? coverage_path
    coverage_json = JSON.parse(File.read(coverage_path), symbolize_names: true)
    metrics = coverage_json[:metrics]
    percentage = metrics[:covered_percent]
    lines = metrics[:covered_lines]
    total_lines = metrics[:total_lines]

    formatted_percentage = format('%.02f', percentage)
    message("Code coverage is now at #{formatted_percentage}% (#{lines}/#{total_lines} lines)", sticky: sticky)
  else
    fail('Code coverage data not found')
  end
end