Module: RspecSprint::Fixers::LetItBe::ApplyFormatter

Defined in:
lib/rspec_sprint/fixers/let_it_be/apply_formatter.rb

Class Method Summary collapse

Class Method Details

.file_line(r) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rspec_sprint/fixers/let_it_be/apply_formatter.rb', line 23

def file_line(r)
  path = r.file.to_s
  case r.status
  when :accepted
    "#{path}: 採用 #{r.applied.size}#{time_range(r.baseline_s, r.after_s)}"
  when :bisect_partial
    "#{path}: 採用 #{r.applied.size} 件 [bisect]"
  when :reverted_slow
    "#{path}: リバート(速度改善不足)#{r.reverted.size}#{time_range(r.baseline_s, r.after_s)}"
  when :reverted_red
    "#{path}: リバート(赤)#{r.reverted.size}"
  when :skipped_dirty
    "#{path}: スキップ(git-dirty)#{r.skipped.size}"
  when :skipped_unstable
    "#{path}: スキップ(baseline 不安定)#{r.skipped.size}"
  else
    "#{path}: 不明なステータス #{r.status}"
  end
end

.format(results) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/rspec_sprint/fixers/let_it_be/apply_formatter.rb', line 9

def format(results)
  lines = ["rspec-sprint fix let-it-be", ""]

  results.each do |r|
    lines << file_line(r)
  end

  lines << ""
  lines << summary_line(results)
  lines << ""
  lines << "採用分は working tree に未コミットです。`git diff` で確認して commit してください。"
  lines.join("\n")
end

.summary_line(results) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/rspec_sprint/fixers/let_it_be/apply_formatter.rb', line 50

def summary_line(results)
  total_applied = results.sum { |r| r.applied.size }
  accepted_files = results.count { |r| r.status == :accepted || r.status == :bisect_partial }
  baseline_total = results.filter_map(&:baseline_s).sum
  after_total = results.filter_map(&:after_s).sum
  time_part = baseline_total > 0 && after_total > 0 ? " #{time_range(baseline_total, after_total)}" : ""
  "合計: 採用 #{total_applied} 件 / #{accepted_files} ファイル#{time_part}"
end

.time_range(baseline_s, after_s) ⇒ Object



43
44
45
46
47
48
# File 'lib/rspec_sprint/fixers/let_it_be/apply_formatter.rb', line 43

def time_range(baseline_s, after_s)
  return "" unless baseline_s && after_s

  pct = baseline_s > 0 ? ((baseline_s - after_s) / baseline_s * 100).round : 0
  "(#{baseline_s.round(1)}s → #{after_s.round(1)}s, -#{pct}%)"
end