class GCOVTOOLS::Project
Attributes
files[R]
name[RW]
stats[R]
Public Class Methods
load_dir(path, hash={})
click to toggle source
# File lib/project.rb, line 139 def self.load_dir path, hash={} project = GCOVTOOLS::Project.new project.add_dir path, hash project end
new(name="")
click to toggle source
# File lib/project.rb, line 12 def initialize name="" @name = name @files = {} @adding = false end
Public Instance Methods
<<(file)
click to toggle source
# File lib/project.rb, line 18 def <<(file) if @files.has_key?file.name @files[file.name].merge! file else @files[file.name] = file end _update_stats unless @adding end
_add_file(path, hash_={})
click to toggle source
# File lib/project.rb, line 87 def _add_file path, hash_={} GCOVTOOLS::logger.debug "parsing file: #{path}" hash = hash_.dup files = GCOVTOOLS::File.load(path) # apply _inclusive_ filters first files.select!{ |file| hash[:include].nil? or hash[:include].empty? or !hash[:include].select{|f| f.match(::Pathname.new(file.meta['Source']).cleanpath.to_s) }.empty? } GCOVTOOLS::logger.debug "included #{files.size} files" old_size = files.size # apply _exclusive_ filters next files.select!{ |file| hash[:exclude].nil? or hash[:exclude].empty? or hash[:exclude].select{|f| f.match(::Pathname.new(file.meta['Source']).cleanpath.to_s) }.empty? } GCOVTOOLS::logger.debug "excluded #{old_size-files.size} files" # add all the files that survived the gauntlet files.map{ |file| self << file } end
_update_stats()
click to toggle source
# File lib/project.rb, line 52 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 } @files.each do |name,file| @stats[:missed_lines] += file.stats[:missed_lines] @stats[:exec_lines] += file.stats[:exec_lines] @stats[:total_exec] += file.stats[:total_exec] @stats[:empty_lines] += file.stats[:empty_lines] 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_dir(path, hash_={})
click to toggle source
# File lib/project.rb, line 114 def add_dir path, hash_={} GCOVTOOLS::logger.debug "searching: #{path}" hash = hash_.dup if hash[:recursive] == true filenames = Dir["#{path}/**/*.gcov"] else filenames = Dir["#{path}/*.gcov"] end GCOVTOOLS::logger.debug "found: #{filenames}" add_files do filenames.each do |filename| _add_file filename, hash end # each filename end # add_files end
add_file(path, hash_={})
click to toggle source
# File lib/project.rb, line 132 def add_file path, hash_={} hash = hash_.dup add_files do _add_file path, hash end # add_files end
add_files() { || ... }
click to toggle source
# File lib/project.rb, line 38 def add_files &block # suspend stat updates until done adding files fail "add_files requires a block" unless block_given? # guard against nested calls was_adding = @adding @adding = true yield @adding = was_adding _update_stats unless @adding end