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