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