Class: GCOV::File
- Inherits:
-
Object
- Object
- GCOV::File
- Defined in:
- lib/file.rb
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
return lines as array, in order by number.
-
#meta ⇒ Object
readonly
Returns the value of attribute meta.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#stats ⇒ Object
readonly
Returns the value of attribute stats.
Class Method Summary collapse
Instance Method Summary collapse
- #<<(line) ⇒ Object
- #_add_line(line) ⇒ Object
- #_update_stats ⇒ Object
- #add_lines(&block) ⇒ Object
-
#initialize(name) ⇒ File
constructor
A new instance of File.
- #merge(other) ⇒ Object
- #merge!(other) ⇒ Object
Constructor Details
#initialize(name) ⇒ File
Returns a new instance of File.
22 23 24 25 26 27 28 29 |
# File 'lib/file.rb', line 22 def initialize name fail "name required" unless name and name.is_a? String @name = name @lines = {} @meta = {} @stats = {} _update_stats end |
Instance Attribute Details
#lines ⇒ Object (readonly)
return lines as array, in order by number
32 33 34 |
# File 'lib/file.rb', line 32 def lines @lines end |
#meta ⇒ Object (readonly)
Returns the value of attribute meta.
20 21 22 |
# File 'lib/file.rb', line 20 def @meta end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
20 21 22 |
# File 'lib/file.rb', line 20 def name @name end |
#stats ⇒ Object (readonly)
Returns the value of attribute stats.
20 21 22 |
# File 'lib/file.rb', line 20 def stats @stats end |
Class Method Details
.demangle(filename) ⇒ Object
119 120 121 122 123 124 125 126 127 128 |
# File 'lib/file.rb', line 119 def self.demangle filename result = filename.dup if start = result.index(/###/) result = result[start..-1] end result.gsub!( /(###|#|\^|\.gcov$)/, {"###"=>"/","#"=>"/","^"=>"..",".gcov"=>""} ) result = ::Pathname.new(result).cleanpath.to_s result end |
.load(filename) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/file.rb', line 93 def self.load filename files = [] file = nil ::File.open(filename, "r") do |file_handle| file_handle.each_line do |line_| line = GCOV::Line.parse(line_) if line.number == 0 key,val = /([^:]+):(.*)$/.match(line.text).to_a[1..2] if key == 'Source' if !file.nil? file._update_stats files << file end # if file = GCOV::File.new val end # if source end # if line == 0 file._add_line line end # each line end# file_handle if file file._update_stats files << file end # if file files end |
Instance Method Details
#<<(line) ⇒ Object
88 89 90 91 |
# File 'lib/file.rb', line 88 def <<(line) fail "need to be in add_lines block" unless @adding _add_line line end |
#_add_line(line) ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/file.rb', line 79 def _add_line line if line.number == 0 key,val = /([^:]+):(.*)$/.match(line.text).to_a[1..2] @meta[key] = val else @lines[line.number] = line end end |
#_update_stats ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/file.rb', line 44 def _update_stats @stats = { :missed_lines => 0, :exec_lines => 0, :empty_lines => 0, :total_exec => 0, :total_lines => 0, :lines => 0, :coverage => 0.0, :hits_per_line => 0.0 } @lines.each do |index,line| @stats[:missed_lines] += (line.state == :missed).to_i @stats[:exec_lines] += (line.state == :exec).to_i @stats[:total_exec] += (line.count.is_a?(Integer) ? line.count : 0 ) @stats[:empty_lines] += (line.state == :none).to_i end @stats[:lines] = @stats[:exec_lines] + @stats[:missed_lines] @stats[:total_lines] = @stats[:lines] + @stats[:empty_lines] if @stats[:lines] > 0 @stats[:coverage] = @stats[:exec_lines].to_f / @stats[:lines].to_f @stats[:hits_per_line] = @stats[:total_exec].to_f / @stats[:lines] else @stats[:coverage] = 1 @stats[:hits_per_line] = 0 end @stats[:coverage_s] = sprintf("%0.01f%",100.0*@stats[:coverage]) @stats[:hits_per_line_s] = sprintf("%0.02f",@stats[:hits_per_line]) end |
#add_lines(&block) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/file.rb', line 36 def add_lines &block fail "add_lines requires a block" unless block_given? @adding = true yield @adding = false _update_stats end |
#merge(other) ⇒ Object
141 142 143 144 145 |
# File 'lib/file.rb', line 141 def merge other result = self.dup result.merge! other result end |
#merge!(other) ⇒ Object
130 131 132 133 134 135 136 137 138 139 |
# File 'lib/file.rb', line 130 def merge! other other.lines.each do |line| if @lines.has_key? line.number @lines[line.number].merge! line else @lines[line.number] = line end end _update_stats end |