Module: RSpeed::Differ

Defined in:
lib/rspeed/differ.rb

Class Method Summary collapse

Class Method Details

.actual_data(files:, result:) ⇒ Object



19
20
21
# 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) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# 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:) ⇒ Object



23
24
25
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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:) ⇒ Object



61
62
63
# File 'lib/rspeed/differ.rb', line 61

def removed_data(files:, result:)
  result.reject { |item| files.include?(item[:file]) }
end

.sum_time(data:) ⇒ Object



65
66
67
68
69
# 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