Class: Xcov::Target

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

Instance Attribute Summary collapse

Attributes inherited from Base

#coverage, #coverage_color, #displayable_coverage, #id

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(name, executable, covered, files) ⇒ Target

Returns a new instance of Target.



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/xcov/model/target.rb', line 12

def initialize(name, executable, covered, files)
  @name = CGI::escapeHTML(name)
  @executable_lines = executable
  @covered_lines = covered
  @files = files
  # we cast to floats because integers always return 0
  @coverage = executable == 0 ? 0.0 : covered.to_f / executable # avoid ZeroDivisionError
  @displayable_coverage = self.create_displayable_coverage
  @coverage_color = self.create_coverage_color
  @id = Target.create_id(name)
end

Instance Attribute Details

#covered_linesObject

number of covered lines in target



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

def covered_lines
  @covered_lines
end

#executable_linesObject

number of executable lines in target



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

def executable_lines
  @executable_lines
end

#file_templatesObject

Returns the value of attribute file_templates.



10
11
12
# File 'lib/xcov/model/target.rb', line 10

def file_templates
  @file_templates
end

#filesObject

Returns the value of attribute files.



9
10
11
# File 'lib/xcov/model/target.rb', line 9

def files
  @files
end

#nameObject

Returns the value of attribute name.



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

def name
  @name
end

Class Method Details

.by_coverage_with_ignored_at_the_endObject



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/xcov/model/target.rb', line 72

def self.by_coverage_with_ignored_at_the_end
  lambda { |lhs, rhs|
    if lhs.ignored == rhs.ignored
      # sort by coverage if files are both ignored
      # or none of them are ignored
      (lhs.coverage <=> rhs.coverage)
    else
      # ignored files will come at the end
      (lhs.ignored ? 1:0) <=> (rhs.ignored ? 1:0)
    end
  }
end

.calculate_number_of_covered_lines(files) ⇒ Object



89
90
91
92
93
94
95
# File 'lib/xcov/model/target.rb', line 89

def self.calculate_number_of_covered_lines(files)
  return 0 if files.nil? || files.empty?

  files.reduce(0) do |partial_result, file|
    partial_result + file.number_of_covered_lines
  end
end

.calculate_number_of_executable_lines(files) ⇒ Object



97
98
99
100
101
102
103
# File 'lib/xcov/model/target.rb', line 97

def self.calculate_number_of_executable_lines(files)
  return 0 if files.nil? || files.empty?

  files.reduce(0) do |partial_result, file|
    partial_result + file.number_of_executable_lines
  end
end

.map(dictionary) ⇒ Object

Class methods



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/xcov/model/target.rb', line 59

def self.map(dictionary)
  name = dictionary["name"]
  files = dictionary["files"].map { |file| Source.map(file)}
  files = files.sort &by_coverage_with_ignored_at_the_end

  non_ignored_files = Target.select_non_ignored_files(files)
  executable = Target.calculate_number_of_executable_lines(non_ignored_files)
  covered = Target.calculate_number_of_covered_lines(non_ignored_files)


  Target.new(name, executable, covered, files)
end

.select_non_ignored_files(files) ⇒ Object



85
86
87
# File 'lib/xcov/model/target.rb', line 85

def self.select_non_ignored_files(files)
  files.select { |file| !file.ignored }
end

Instance Method Details

#html_valueObject



31
32
33
34
35
36
37
38
# File 'lib/xcov/model/target.rb', line 31

def html_value
  @file_templates = ""
  @files.each do |file|
    @file_templates << file.html_value
  end

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

#json_valueObject



49
50
51
52
53
54
55
# File 'lib/xcov/model/target.rb', line 49

def json_value
  {
    "name" => @name,
    "coverage" => @coverage,
    "files" => @files ? @files.map{ |file| file.json_value } : []
  }
end

#markdown_valueObject



40
41
42
43
44
45
46
47
# File 'lib/xcov/model/target.rb', line 40

def markdown_value
  markdown = "## Current coverage for #{@name} is `#{@displayable_coverage}`\n"
  return markdown << "✅ *No files affecting coverage found*\n\n---\n" if @files.empty?
  markdown << "Files changed | - | - \n--- | --- | ---\n"
  markdown << "#{@files.map { |file| file.markdown_value }.join("")}\n---\n"

  markdown
end


24
25
26
27
28
29
# File 'lib/xcov/model/target.rb', line 24

def print_description
  puts "\t#{@name} (#{@coverage})"
  @files.each do |file|
    file.print_description
  end
end