module RSpeed::Differ

Public Instance Methods

actual_data(files:, result:) click to toggle source
# File lib/rspeed/differ.rb, line 19
def actual_data(files:, result:)
  result.select { |item| files.include?(item[:file]) }
end
actual_files(spec_path: RSpeed::Env.spec_path) click to toggle source
# File lib/rspeed/differ.rb, line 7
def actual_files(spec_path: RSpeed::Env.spec_path)
  [].tap do |data|
    Dir[spec_path].sort.each do |file|
      lines = File.open(file).read.split("\n")

      lines&.each&.with_index do |item, index|
        data << "#{file}:#{index + 1}" if /^it/.match?(item.gsub(/\s+/, ''))
      end
    end
  end
end
added_data(files:, result:) click to toggle source
# File lib/rspeed/differ.rb, line 23
def added_data(files:, result:)
  (files - result.map { |item| item[:file] }).map { |file| { file: file, time: nil } }
end
diff(from: actual_files, to: RSpeed::Database.result) click to toggle source
# File lib/rspeed/differ.rb, line 27
def diff(from: actual_files, to: RSpeed::Database.result)
  to      = to.uniq { |item| item[:file] }
  added   = added_data(files: from, result: to)
  actual  = actual_data(files: from, result: to) + added_data(files: from, result: to)
  removed = removed_data(files: from, result: to)

  {
    actual_files:  actual,
    actual_time:   sum_time(data: actual),
    added_files:   added,
    added_time:    sum_time(data: added),
    removed_files: removed,
    removed_time:  sum_time(data: removed),
  }
end
final_diff(from: RSpeed::Database.previous_result, to: RSpeed::Database.result) click to toggle source
# File lib/rspeed/differ.rb, line 43
def final_diff(from: RSpeed::Database.previous_result, to: RSpeed::Database.result)
  from           = from.uniq { |item| item[:file] }
  to             = to.uniq { |item| item[:file] }
  previous_files = from.map { |item| item[:file] }
  actual_files   = to.map { |item| item[:file] }
  added          = to.reject { |item| previous_files.include?(item[:file]) }
  removed        = from.reject { |item| actual_files.include?(item[:file]) }

  {
    actual_files:  to,
    actual_time:   sum_time(data: to),
    added_files:   added,
    added_time:    sum_time(data: added),
    removed_files: removed,
    removed_time:  sum_time(data: removed),
  }
end
removed_data(files:, result:) click to toggle source
# File lib/rspeed/differ.rb, line 61
def removed_data(files:, result:)
  result.reject { |item| files.include?(item[:file]) }
end
sum_time(data:) click to toggle source
# File lib/rspeed/differ.rb, line 65
def sum_time(data:)
  return '?' if data.all? { |item| item[:time].nil? }

  data.sum { |item| item[:time].to_f }
end