class Coverband::Adapters::Base

Constants

ABSTRACT_KEY
DATA_KEY
FILE_HASH
FIRST_UPDATED_KEY
LAST_UPDATED_KEY

Attributes

type[RW]

Public Class Methods

new() click to toggle source
# File lib/coverband/adapters/base.rb, line 14
def initialize
  @type = Coverband::RUNTIME_TYPE
end

Public Instance Methods

clear!() click to toggle source
# File lib/coverband/adapters/base.rb, line 18
def clear!
  raise ABSTRACT_KEY
end
clear_file!(_file = nil) click to toggle source
# File lib/coverband/adapters/base.rb, line 22
def clear_file!(_file = nil)
  raise ABSTRACT_KEY
end
coverage(_local_type = nil) click to toggle source
# File lib/coverband/adapters/base.rb, line 38
def coverage(_local_type = nil)
  raise ABSTRACT_KEY
end
covered_files() click to toggle source
# File lib/coverband/adapters/base.rb, line 59
def covered_files
  coverage.keys || []
end
get_coverage_report() click to toggle source
# File lib/coverband/adapters/base.rb, line 54
def get_coverage_report
  data = Coverband.configuration.store.split_coverage(Coverband::TYPES)
  data.merge(Coverband::MERGED_TYPE => Coverband.configuration.store.merged_coverage(Coverband::TYPES))
end
migrate!() click to toggle source
# File lib/coverband/adapters/base.rb, line 26
def migrate!
  raise ABSTRACT_KEY
end
raw_store() click to toggle source
# File lib/coverband/adapters/base.rb, line 63
def raw_store
  raise ABSTRACT_KEY
end
save_coverage() click to toggle source
# File lib/coverband/adapters/base.rb, line 34
def save_coverage
  raise ABSTRACT_KEY
end
save_report(_report) click to toggle source
# File lib/coverband/adapters/base.rb, line 50
def save_report(_report)
  raise "abstract"
end
size() click to toggle source
# File lib/coverband/adapters/base.rb, line 30
def size
  raise ABSTRACT_KEY
end
size_in_mib() click to toggle source
# File lib/coverband/adapters/base.rb, line 42
def size_in_mib
  if size
    format("%<size>.2f", size: (size.to_f / 2**20))
  else
    "N/A"
  end
end

Protected Instance Methods

array_add(latest, original) click to toggle source

TODO: This should only be 2 cases get our dup / not dups aligned

# File lib/coverband/adapters/base.rb, line 145
def array_add(latest, original)
  if Coverband.configuration.use_oneshot_lines_coverage
    latest.map!.with_index { |v, i| (v + original[i] >= 1 ? 1 : 0) if v && original[i] }
  elsif Coverband.configuration.simulate_oneshot_lines_coverage
    latest.map.with_index { |v, i| (v + original[i] >= 1 ? 1 : 0) if v && original[i] }
  else
    latest.map.with_index { |v, i| v && original[i] ? v + original[i] : nil }
  end
end
expand_report(report) click to toggle source

TODO: modify to extend report inline?

# File lib/coverband/adapters/base.rb, line 99
def expand_report(report)
  expanded = {}
  report_time = Time.now.to_i
  updated_time = type == Coverband::EAGER_TYPE ? nil : report_time
  report.each_pair do |key, line_data|
    extended_data = {
      FIRST_UPDATED_KEY => report_time,
      LAST_UPDATED_KEY => updated_time,
      FILE_HASH => file_hash(key),
      DATA_KEY => line_data
    }
    expanded[Utils::RelativeFileConverter.convert(key)] = extended_data
  end
  expanded
end
file_hash(file) click to toggle source
# File lib/coverband/adapters/base.rb, line 94
def file_hash(file)
  Coverband::Utils::FileHasher.hash(file)
end
merge_expanded_data(new_expanded, old_expanded) click to toggle source
# File lib/coverband/adapters/base.rb, line 135
def merge_expanded_data(new_expanded, old_expanded)
  {
    FIRST_UPDATED_KEY => old_expanded[FIRST_UPDATED_KEY],
    LAST_UPDATED_KEY => new_expanded[LAST_UPDATED_KEY],
    FILE_HASH => new_expanded[FILE_HASH],
    DATA_KEY => array_add(new_expanded[DATA_KEY], old_expanded[DATA_KEY])
  }
end
merge_reports(new_report, old_report, options = {}) click to toggle source
# File lib/coverband/adapters/base.rb, line 115
def merge_reports(new_report, old_report, options = {})
  # transparently update from RUNTIME_TYPE = nil to RUNTIME_TYPE = :runtime
  # transparent update for format coveband_3_2
  old_report = coverage(nil, override_type: nil) if old_report.nil? && type == Coverband::RUNTIME_TYPE
  new_report = expand_report(new_report) unless options[:skip_expansion]
  keys = (new_report.keys + old_report.keys).uniq
  keys.each do |file|
    new_report[file] = if new_report[file] &&
        old_report[file] &&
        new_report[file][FILE_HASH] == old_report[file][FILE_HASH]
      merge_expanded_data(new_report[file], old_report[file])
    elsif new_report[file]
      new_report[file]
    else
      old_report[file]
    end
  end
  new_report
end
merged_coverage(types) click to toggle source
# File lib/coverband/adapters/base.rb, line 88
def merged_coverage(types)
  types.reduce({}) do |data, type|
    merge_reports(data, coverage(type), skip_expansion: true)
  end
end
simulated_runtime_coverage() click to toggle source
# File lib/coverband/adapters/base.rb, line 79
def simulated_runtime_coverage
  runtime_data = coverage(Coverband::RUNTIME_TYPE)
  eager_data = coverage(Coverband::EAGER_TYPE)
  eager_data.values do |vals|
    vals["data"].map! { |line_coverage| line_coverage ? (0 - line_coverage) : line_coverage }
  end
  merge_reports(runtime_data, eager_data, skip_expansion: true)
end
split_coverage(types) click to toggle source
# File lib/coverband/adapters/base.rb, line 69
def split_coverage(types)
  types.reduce({}) do |data, type|
    if type == Coverband::RUNTIME_TYPE && Coverband.configuration.simulate_oneshot_lines_coverage
      data.update(type => simulated_runtime_coverage)
    else
      data.update(type => coverage(type))
    end
  end
end