Class: Coveralls::SimpleCov::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/coveralls/simplecov.rb

Instance Method Summary collapse

Instance Method Details

#branches(simplecov_branches) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/coveralls/simplecov.rb', line 61

def branches(simplecov_branches)
  branches_properties = []
  simplecov_branches.each do |branch_data, data|
    branch_number = 0
    line_number = branch_data.split(', ')[2].to_i
    data.each_value do |hits|
      branch_number += 1
      branches_properties.push(line_number, 0, branch_number, hits)
    end
  end
  branches_properties
end

#display_error(error) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/coveralls/simplecov.rb', line 94

def display_error(error)
  Coveralls::Output.puts 'Coveralls encountered an exception:', color: 'red'
  Coveralls::Output.puts error.class.to_s, color: 'red'
  Coveralls::Output.puts error.message, color: 'red'

  error.backtrace&.each do |line|
    Coveralls::Output.puts line, color: 'red'
  end

  if error.respond_to?(:response) && error.response
    Coveralls::Output.puts error.response.to_s, color: 'red'
  end

  false
end

#display_result(result) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/coveralls/simplecov.rb', line 8

def display_result(result)
  # Log which files would be submitted.
  if result.files.empty?
    Coveralls::Output.puts '[Coveralls] There are no covered files.', color: 'yellow'
  else
    Coveralls::Output.puts '[Coveralls] Some handy coverage stats:'
  end

  result.files.each do |f|
    Coveralls::Output.print '  * '
    Coveralls::Output.print short_filename(f.filename).to_s, color: 'cyan'
    Coveralls::Output.print ' => ', color: 'white'
    cov = "#{f.covered_percent.round}%"
    if f.covered_percent > 90
      Coveralls::Output.print cov, color: 'green'
    elsif f.covered_percent > 80
      Coveralls::Output.print cov, color: 'yellow'
    else
      Coveralls::Output.print cov, color: 'red'
    end
    Coveralls::Output.puts ''
  end

  true
end

#format(result) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/coveralls/simplecov.rb', line 74

def format(result)
  unless Coveralls.should_run?
    display_result result if Coveralls.noisy?

    return
  end

  # Post to Coveralls.
  API.post_json 'jobs',
                source_files:   get_source_files(result),
                test_framework: result.command_name.downcase,
                run_at:         result.created_at

  Coveralls::Output.puts output_message result

  true
rescue StandardError => e
  display_error e
end

#get_source_files(result) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/coveralls/simplecov.rb', line 34

def get_source_files(result)
  # Gather the source files.
  source_files = []
  result.files.each do |file|
    properties = {}

    # Get Source
    properties[:source] = File.open(file.filename, 'rb:utf-8').read

    # Get the root-relative filename
    properties[:name] = short_filename(file.filename)

    # Get the coverage
    properties[:coverage] = file.coverage_data['lines']
    properties[:branches] = branches(file.coverage_data['branches']) if file.coverage_data['branches']

    # Skip nocov lines
    file.lines.each_with_index do |line, i|
      properties[:coverage][i] = nil if line.skipped?
    end

    source_files << properties
  end

  source_files
end

#output_message(result) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/coveralls/simplecov.rb', line 110

def output_message(result)
  "Coverage is at #{begin
    result.covered_percent.round(2)
  rescue StandardError
    result.covered_percent.round
  end}%.\nCoverage report sent to Coveralls."
end

#short_filename(filename) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/coveralls/simplecov.rb', line 118

def short_filename(filename)
  return filename unless ::SimpleCov.root

  filename = Pathname.new(filename)
  root = Pathname.new(::SimpleCov.root)
  filename.relative_path_from(root).to_s
end