lib/coverband/base.rb in coverband-0.0.26 vs lib/coverband/base.rb in coverband-0.1.0.pre

- old
+ new

@@ -1,24 +1,9 @@ module Coverband class Base + include Singleton - def initialize(options = {}) - @project_directory = File.expand_path(Coverband.configuration.root) - @enabled = false - @tracer_set = false - @files = {} - @file_usage = Hash.new(0) - @file_line_usage = {} - @startup_delay = Coverband.configuration.startup_delay - @ignore_patterns = Coverband.configuration.ignore - @sample_percentage = Coverband.configuration.percentage - @reporter = Coverband::RedisStore.new(Coverband.configuration.redis) if Coverband.configuration.redis - @stats = Coverband.configuration.stats - @verbose = Coverband.configuration.verbose - @logger = Coverband.configuration.logger || Logger.new(STDOUT) - end - def start @enabled = true record_coverage end @@ -38,12 +23,31 @@ @enabled = true report_coverage @enabled = false end - protected + def extended? + false + end + def reset_instance + @project_directory = File.expand_path(Coverband.configuration.root) + @enabled = false + @tracer_set = false + @files = {} + @file_usage = Hash.new(0) + @file_line_usage = {} + @startup_delay = Coverband.configuration.startup_delay + @ignore_patterns = Coverband.configuration.ignore + @sample_percentage = Coverband.configuration.percentage + @reporter = Coverband::RedisStore.new(Coverband.configuration.redis) if Coverband.configuration.redis + @stats = Coverband.configuration.stats + @verbose = Coverband.configuration.verbose + @logger = Coverband.configuration.logger || Logger.new(STDOUT) + self + end + def configure_sampling if @startup_delay!=0 || (rand * 100.0) > @sample_percentage @startup_delay -= 1 if @startup_delay > 0 @enabled = false else @@ -63,50 +67,10 @@ @logger.info "error stating recording coverage" @logger.info "error: #{err.inspect} #{err.message}" end end - def set_tracer - unless @tracer_set - set_trace_func proc { |event, file, line, id, binding, classname| - add_file(file, line) - } - @tracer_set = true - end - end - - def unset_tracer - if @tracer_set - set_trace_func(nil) - @tracer_set = false - end - end - - def add_file(file, line) - if !file.match(/(\/gems\/|internal\:prelude)/) && file.match(@project_directory) && !@ignore_patterns.any?{|pattern| file.match(/#{pattern}/) } - if @verbose - @file_usage[file] += 1 - @file_line_usage[file] = Hash.new(0) unless @file_line_usage.include?(file) - @file_line_usage[file][line] += 1 - end - if @files.include?(file) - @files[file] << line unless @files.include?(line) - else - @files[file] = [line] - end - end - end - - def output_file_line_usage - @logger.info "coverband debug coverband file:line usage:" - @file_line_usage.sort_by {|_key, value| value.length}.each do |pair| - file = pair.first - lines = pair.last - @logger.info "file: #{file} => #{lines.sort_by {|_key, value| value}}" - end - end - def report_coverage unless @enabled @logger.info "coverage disabled" if @verbose return end @@ -139,7 +103,64 @@ if @verbose @logger.info "coverage missing" @logger.info "error: #{err.inspect} #{err.message}" end end + + protected + + def set_tracer + unless @tracer_set + set_trace_func proc { |event, file, line, id, binding, classname| + add_file(file, line) + } + @tracer_set = true + end + end + + def unset_tracer + if @tracer_set + set_trace_func(nil) + @tracer_set = false + end + end + + def add_from_tracepoint(trace_point) + add_file(trace_point.path, trace_point.lineno) + end + + def add_file(file, line) + if !file.match(/(\/gems\/|internal\:prelude)/) && file.match(@project_directory) && !@ignore_patterns.any?{|pattern| file.match(/#{pattern}/) } + add_file_without_checks(file, line) + end + end + + def add_file_without_checks(file, line) + if @verbose + @file_usage[file] += 1 + @file_line_usage[file] = Hash.new(0) unless @file_line_usage.include?(file) + @file_line_usage[file][line] += 1 + end + if @files.include?(file) + @files[file] << line unless @files.include?(line) + else + @files[file] = [line] + end + end + + def output_file_line_usage + @logger.info "coverband debug coverband file:line usage:" + @file_line_usage.sort_by {|_key, value| value.length}.each do |pair| + file = pair.first + lines = pair.last + @logger.info "file: #{file} => #{lines.sort_by {|_key, value| value}}" + end + end + + private + + def initialize + reset_instance + end + end end