Skip to content

Commit 742267d

Browse files
refactor: pulled out result printer code
1 parent 8a17c63 commit 742267d

File tree

2 files changed

+103
-92
lines changed

2 files changed

+103
-92
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# frozen_string_literal: true
2+
3+
require "json"
4+
require "colorize"
5+
6+
module CodeclimateDiff
7+
class ResultPrinter
8+
def self.print_issues_in_category(issues_list)
9+
issues_list.each do |issue|
10+
filename = issue["location"]["path"]
11+
line_number = issue["location"]["lines"]["begin"]
12+
description = issue["description"]
13+
14+
print "\u2022 #{filename}:#{line_number}".encode("utf-8").bold
15+
puts " #{description}"
16+
end
17+
puts "\n"
18+
end
19+
20+
def self.print_category(bullet_emoji, severity, engine_name, check_name, color)
21+
message = "#{bullet_emoji} [#{severity}] #{engine_name} #{check_name}:".encode("utf-8")
22+
23+
case color
24+
when "red"
25+
puts message.red
26+
when "yellow"
27+
puts message.yellow
28+
when "green"
29+
puts message.green
30+
else
31+
puts message
32+
end
33+
end
34+
35+
def self.print_issues(issues_list, color, bullet_emoji)
36+
issue_categories = issues_list.map { |issue| [issue["engine_name"], issue["check_name"], issue["severity"]] }.uniq
37+
issue_categories.each do |issue_category|
38+
engine_name = issue_category[0]
39+
check_name = issue_category[1]
40+
severity = issue_category[2]
41+
issues = issues_list.filter do |issue|
42+
issue["engine_name"] == engine_name &&
43+
issue["check_name"] == check_name &&
44+
issue["severity"] == severity
45+
end
46+
print_category(bullet_emoji, severity, engine_name, check_name, color)
47+
print_issues_in_category(issues)
48+
end
49+
end
50+
51+
def self.print_result(sorted_issues, show_preexisting)
52+
if show_preexisting
53+
preexisting_issues = sorted_issues[:preexisting]
54+
if preexisting_issues.count.positive?
55+
puts "\n#{preexisting_issues.count} preexisting issues in changed files:\n".bold.yellow
56+
print_issues(preexisting_issues, "yellow", "\u2718")
57+
else
58+
puts "\n0 issues in changed files!".encode("utf-8").bold.green
59+
end
60+
end
61+
62+
new_issues = sorted_issues[:new]
63+
if new_issues.count.positive?
64+
puts "\n#{new_issues.count} new issues:\n".bold.red
65+
print_issues(new_issues, "red", "\u2718")
66+
else
67+
puts "\n0 new issues :)\n".encode("utf-8").bold
68+
end
69+
70+
fixed_issues = sorted_issues[:fixed]
71+
if fixed_issues.count.positive?
72+
puts "\n#{fixed_issues.count} fixed issues: \n".encode("utf-8").bold.green
73+
print_issues(fixed_issues, "green", "\u2714")
74+
else
75+
puts "\n0 fixed issues\n".bold
76+
end
77+
end
78+
79+
def self.print_call_to_action(sorted_issues)
80+
fixed_count = sorted_issues[:fixed].count
81+
new_count = sorted_issues[:new].count
82+
outstanding_count = sorted_issues[:preexisting].count + new_count
83+
if fixed_count > new_count
84+
puts "\n\u{1F389}\u{1F389} Well done! You made the code even better!! \u{1F389}\u{1F389} \n".bold.green.encode("utf-8")
85+
elsif new_count > fixed_count
86+
puts "\n\ Uh oh, you've introduced more issues than you've fixed. Better fix that! \n".bold.red.encode("utf-8")
87+
elsif outstanding_count.positive?
88+
puts "\n\ Why don't you see if you can fix some of those outstanding issues while you're here? \n".bold.encode("utf-8")
89+
else
90+
puts "\n\u{1F389}\u{1F389} Nothing to do here, the code is immaculate!! \u{1F389}\u{1F389} \n".bold.green.encode("utf-8")
91+
end
92+
end
93+
end
94+
end

lib/codeclimate_diff/runner.rb

Lines changed: 9 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,11 @@
33
require "json"
44
require "colorize"
55
require_relative "./codeclimate_wrapper"
6+
require_relative "./result_printer"
67

78
module CodeclimateDiff
89
class Runner
9-
def self.generate_baseline
10-
puts "Generating the baseline. Should take about 5 minutes..."
11-
result = CodeclimateWrapper.new.run_codeclimate
12-
File.write("codeclimate_diff_baseline.json", result)
13-
puts "Done!"
14-
end
10+
1511

1612
def self.calculate_changed_filenames(pattern)
1713
extra_grep_filter = pattern ? " | grep '#{pattern}'" : ""
@@ -114,90 +110,11 @@ def self.sort_issues(preexisting_issues, changed_file_issues)
114110
result
115111
end
116112

117-
def self.print_issues_in_category(issues_list)
118-
issues_list.each do |issue|
119-
filename = issue["location"]["path"]
120-
line_number = issue["location"]["lines"]["begin"]
121-
description = issue["description"]
122-
123-
print "\u2022 #{filename}:#{line_number}".encode("utf-8").bold
124-
puts " #{description}"
125-
end
126-
puts "\n"
127-
end
128-
129-
def self.print_category(bullet_emoji, severity, engine_name, check_name, color)
130-
message = "#{bullet_emoji} [#{severity}] #{engine_name} #{check_name}:".encode("utf-8")
131-
132-
case color
133-
when "red"
134-
puts message.red
135-
when "yellow"
136-
puts message.yellow
137-
when "green"
138-
puts message.green
139-
else
140-
puts message
141-
end
142-
end
143-
144-
def self.print_issues(issues_list, color, bullet_emoji)
145-
issue_categories = issues_list.map { |issue| [issue["engine_name"], issue["check_name"], issue["severity"]] }.uniq
146-
issue_categories.each do |issue_category|
147-
engine_name = issue_category[0]
148-
check_name = issue_category[1]
149-
severity = issue_category[2]
150-
issues = issues_list.filter do |issue|
151-
issue["engine_name"] == engine_name &&
152-
issue["check_name"] == check_name &&
153-
issue["severity"] == severity
154-
end
155-
print_category(bullet_emoji, severity, engine_name, check_name, color)
156-
print_issues_in_category(issues)
157-
end
158-
end
159-
160-
def self.print_result(sorted_issues, show_preexisting)
161-
if show_preexisting
162-
preexisting_issues = sorted_issues[:preexisting]
163-
if preexisting_issues.count.positive?
164-
puts "\n#{preexisting_issues.count} preexisting issues in changed files:\n".bold.yellow
165-
print_issues(preexisting_issues, "yellow", "\u2718")
166-
else
167-
puts "\n0 issues in changed files!".encode("utf-8").bold.green
168-
end
169-
end
170-
171-
new_issues = sorted_issues[:new]
172-
if new_issues.count.positive?
173-
puts "\n#{new_issues.count} new issues:\n".bold.red
174-
print_issues(new_issues, "red", "\u2718")
175-
else
176-
puts "\n0 new issues :)\n".encode("utf-8").bold
177-
end
178-
179-
fixed_issues = sorted_issues[:fixed]
180-
if fixed_issues.count.positive?
181-
puts "\n#{fixed_issues.count} fixed issues: \n".encode("utf-8").bold.green
182-
print_issues(fixed_issues, "green", "\u2714")
183-
else
184-
puts "\n0 fixed issues\n".bold
185-
end
186-
end
187-
188-
def self.print_call_to_action(sorted_issues)
189-
fixed_count = sorted_issues[:fixed].count
190-
new_count = sorted_issues[:new].count
191-
outstanding_count = sorted_issues[:preexisting].count + new_count
192-
if fixed_count > new_count
193-
puts "\n\u{1F389}\u{1F389} Well done! You made the code even better!! \u{1F389}\u{1F389} \n".bold.green.encode("utf-8")
194-
elsif new_count > fixed_count
195-
puts "\n\ Uh oh, you've introduced more issues than you've fixed. Better fix that! \n".bold.red.encode("utf-8")
196-
elsif outstanding_count.positive?
197-
puts "\n\ Why don't you see if you can fix some of those outstanding issues while you're here? \n".bold.encode("utf-8")
198-
else
199-
puts "\n\u{1F389}\u{1F389} Nothing to do here, the code is immaculate!! \u{1F389}\u{1F389} \n".bold.green.encode("utf-8")
200-
end
113+
def self.generate_baseline
114+
puts "Generating the baseline. Should take about 5 minutes..."
115+
result = CodeclimateWrapper.new.run_codeclimate
116+
File.write("codeclimate_diff_baseline.json", result)
117+
puts "Done!"
201118
end
202119

203120
def self.run_diff_on_branch(pattern, show_preexisting: true)
@@ -209,8 +126,8 @@ def self.run_diff_on_branch(pattern, show_preexisting: true)
209126

210127
sorted_issues = sort_issues(preexisting_issues, changed_file_issues)
211128

212-
print_result(sorted_issues, show_preexisting)
213-
print_call_to_action(sorted_issues)
129+
ResultPrinter.print_result(sorted_issues, show_preexisting)
130+
ResultPrinter.print_call_to_action(sorted_issues)
214131
end
215132
end
216133
end

0 commit comments

Comments
 (0)