Class: Xcov::Report

Inherits:
Base
  • Object
show all
Defined in:
lib/xcov/model/report.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#coverage_color, #displayable_coverage, #id, #name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#coverage_emoji, #create_coverage_color, #create_displayable_coverage, create_id, #create_summary, template

Constructor Details

#initialize(targets) ⇒ Report

Returns a new instance of Report.



10
11
12
13
14
15
16
# File 'lib/xcov/model/report.rb', line 10

def initialize(targets)
  @targets = targets
  @coverage = average_coverage(targets)
  @displayable_coverage = self.create_displayable_coverage
  @coverage_color = self.create_coverage_color
  @summary = self.create_summary
end

Instance Attribute Details

#coverageObject

Returns the value of attribute coverage.



5
6
7
# File 'lib/xcov/model/report.rb', line 5

def coverage
  @coverage
end

#summaryObject

Returns the value of attribute summary.



7
8
9
# File 'lib/xcov/model/report.rb', line 7

def summary
  @summary
end

#target_templatesObject

Returns the value of attribute target_templates.



8
9
10
# File 'lib/xcov/model/report.rb', line 8

def target_templates
  @target_templates
end

#targetsObject

Returns the value of attribute targets.



6
7
8
# File 'lib/xcov/model/report.rb', line 6

def targets
  @targets
end

Class Method Details

.excluded_targetsObject



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/xcov/model/report.rb', line 97

def self.excluded_targets
  excluded_targets = Array.new()

  if Xcov.config[:exclude_targets]
    if Xcov.config[:exclude_targets].is_a?(Array)
      excluded_targets = Xcov.config[:exclude_targets]
    else
      excluded_targets = Xcov.config[:exclude_targets].split(/\s*,\s*/)
    end
  end

  excluded_targets
end

.filter_targets(targets) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/xcov/model/report.rb', line 73

def self.filter_targets(targets)
  filtered_targets = Array.new(targets)
  filtered_targets = filtered_targets.select { |target| !target["name"].include?(".xctest") } if !Xcov.config[:include_test_targets]

  if Xcov.config[:exclude_targets]
    filtered_targets = filtered_targets.select { |target| !self.excluded_targets.include?(target["name"])}
  end

  if Xcov.config[:include_targets]
    filtered_targets = filtered_targets.select { |target| self.included_targets.include?(target["name"])}
  end

  supported_targets = Xcov.project.targets
  if Xcov.config[:only_project_targets] && !supported_targets.empty?
    filtered_targets = filtered_targets.select do |target|
      name = target["name"]
      name.slice! File.extname(name) # remove target extensions
      supported_targets.include?(name)
    end
  end

  filtered_targets
end

.included_targetsObject



111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/xcov/model/report.rb', line 111

def self.included_targets
  included_targets = Array.new()

  if Xcov.config[:include_targets]
    if Xcov.config[:include_targets].is_a?(Array)
      included_targets = Xcov.config[:include_targets]
    else
      included_targets = Xcov.config[:include_targets].split(/\s*,\s*/)
    end
  end

  included_targets
end

.map(dictionary) ⇒ Object

Class methods



64
65
66
67
68
69
70
71
# File 'lib/xcov/model/report.rb', line 64

def self.map(dictionary)
  targets = Report.filter_targets dictionary["targets"]

  # Create target objects
  targets = targets.map { |target| Target.map(target)}

  Report.new(targets)
end

Instance Method Details

#average_coverage(targets) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/xcov/model/report.rb', line 18

def average_coverage targets
  return 0 if targets.count == 0
  return targets.first.coverage if targets.count == 1

  executable = targets.reduce(0) do |partial_result, target|
    partial_result + target.executable_lines
  end

  covered = targets.reduce(0) do |partial_result, target|
    partial_result + target.covered_lines
  end

  return 0 if executable == 0 # avoid ZeroDivisionError

  covered.to_f / executable.to_f
end

#html_valueObject



42
43
44
45
46
47
48
49
# File 'lib/xcov/model/report.rb', line 42

def html_value
  @target_templates = ""
  @targets.each do |target|
    @target_templates << target.html_value
  end

  Function.template("report").result(binding)
end

#json_valueObject



55
56
57
58
59
60
# File 'lib/xcov/model/report.rb', line 55

def json_value
    {
      "coverage" => @coverage,
      "targets" => @targets ? @targets.map{ |target| target.json_value } : []
    }
end

#markdown_valueObject



51
52
53
# File 'lib/xcov/model/report.rb', line 51

def markdown_value
  "#{@targets.map { |target| target.markdown_value }.join("")}\n> Powered by [xcov](https://github.com/nakiostudio/xcov)"
end


35
36
37
38
39
40
# File 'lib/xcov/model/report.rb', line 35

def print_description
  puts "Total coverage: (#{@coverage})"
  @targets.each do |target|
    target.print_description
  end
end