3
3
require "json"
4
4
require "colorize"
5
5
require_relative "./codeclimate_wrapper"
6
+ require_relative "./result_printer"
6
7
7
8
module CodeclimateDiff
8
9
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
+
15
11
16
12
def self . calculate_changed_filenames ( pattern )
17
13
extra_grep_filter = pattern ? " | grep '#{ pattern } '" : ""
@@ -114,90 +110,11 @@ def self.sort_issues(preexisting_issues, changed_file_issues)
114
110
result
115
111
end
116
112
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 "\n 0 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 "\n 0 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 "\n 0 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!"
201
118
end
202
119
203
120
def self . run_diff_on_branch ( pattern , show_preexisting : true )
@@ -209,8 +126,8 @@ def self.run_diff_on_branch(pattern, show_preexisting: true)
209
126
210
127
sorted_issues = sort_issues ( preexisting_issues , changed_file_issues )
211
128
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 )
214
131
end
215
132
end
216
133
end
0 commit comments