lib/sandi_meter/formatter.rb in sandi_meter-0.0.6 vs lib/sandi_meter/formatter.rb in sandi_meter-1.0.0
- old
+ new
@@ -2,28 +2,84 @@
class Formatter
def print_data(data)
if data[:first_rule][:total_classes_amount] > 0
puts "1. #{data[:first_rule][:small_classes_amount] * 100 / data[:first_rule][:total_classes_amount]}% of classes are under 100 lines."
else
- puts "1. No classes to analize."
+ puts "1. No classes to analyze."
end
if data[:second_rule][:total_methods_amount] > 0
puts "2. #{data[:second_rule][:small_methods_amount] * 100 / data[:second_rule][:total_methods_amount]}% of methods are under 5 lines."
else
- puts "2. No methods to analize."
+ puts "2. No methods to analyze."
end
if data[:third_rule][:total_method_calls] > 0
- puts "3. #{data[:third_rule][:proper_method_calls] * 100 / data[:third_rule][:total_method_calls]}% of methods calls accepts are less than 4 parameters."
+ puts "3. #{data[:third_rule][:proper_method_calls] * 100 / data[:third_rule][:total_method_calls]}% of method calls accepted are less than 4 parameters."
else
- puts "3. No method calls to analize."
+ puts "3. No method calls to analyze."
end
if data[:fourth_rule][:total_controllers_amount] > 0
puts "4. #{data[:fourth_rule][:proper_controllers_amount] * 100 / data[:fourth_rule][:total_controllers_amount]}% of controllers have one instance variable per action."
else
- puts "4. No controllers to analize."
+ puts "4. No controllers to analyze."
+ end
+
+ print_log(data)
+ end
+
+ def print_log(data)
+ return unless data[:first_rule][:log] || data[:second_rule][:log] || data[:fourth_rule][:log]
+
+ if data[:first_rule][:log][:classes].any?
+ puts "\nClasses with 100+ lines"
+ print_array_of_arrays [["Class name", "Size", "Path"]] + data[:first_rule][:log][:classes]
+ end
+
+ if data[:first_rule][:log][:misindented_classes].any?
+ puts "\nMissindented classes"
+ print_array_of_arrays [["Class name", "Path"]] + data[:first_rule][:log][:misindented_classes].map { |row| row.delete_at(1); row } # 1 – size, which nil for misindented_classes
+ end
+
+ if data[:second_rule][:log][:methods].any?
+ puts "\nMethods with 5+ lines"
+ print_array_of_arrays [["Class name", "Method name", "Size", "Path"]] + data[:second_rule][:log][:methods]
+ end
+
+ if data[:second_rule][:log][:misindented_methods].any?
+ puts "\nMissindented methods"
+ print_array_of_arrays [["Class name", "Method name", "Path"]] + data[:second_rule][:log][:misindented_methods].map { |row| row.delete_at(2); row } # 2 – size, which nil for misindented_methods
+ end
+
+ if data[:third_rule][:log][:method_calls].any?
+ puts "\nMethod calls with 4+ arguments"
+ print_array_of_arrays [["# of arguments", "Path"]] + data[:third_rule][:log][:method_calls]
+ end
+
+ if data[:fourth_rule][:log][:controllers].any?
+ puts "\nControllers with 1+ instance variables"
+ print_array_of_arrays [["Controller name", "Action name", "Instance variables"]] + data[:fourth_rule][:log][:controllers]
+ end
+ end
+
+ private
+ # TODO
+ # sort output by number of lines or any param
+ def print_array_of_arrays(nested_array)
+ nested_sizes = nested_array.map do |row|
+ row.map { |element| element.to_s.size }
+ end
+
+ sizes = nested_sizes.transpose.map { |row| row.max }
+
+ nested_array.each do |row|
+ line_elements = row.each_with_index.map do |element, index|
+ element_string = element.kind_of?(Array) ? element.join(', ') : element.to_s
+ element_string.ljust(sizes[index] + 1, ' ')
+ end
+
+ puts line_elements.join(' | ').prepend(" ")
end
end
end
end