class MetricFu::Saikuro
Public Instance Methods
analyze()
click to toggle source
# File lib/generators/saikuro.rb, line 28 def analyze @files = sort_files(assemble_files) @classes = sort_classes(assemble_classes(@files)) @meths = sort_methods(assemble_methods(@files)) end
emit()
click to toggle source
# File lib/generators/saikuro.rb, line 6 def emit options_string = MetricFu.saikuro.inject("") do |options, option| option[0] == :input_directory ? options : options + "--#{option.join(' ')} " end MetricFu.saikuro[:input_directory].each do |input_dir| options_string += "--input_directory #{input_dir} " end saikuro_bin= $:.map{|d| d+'/../bin/saikuro'}.select{|f| File.exists? f}.first || 'saikuro' sh %{#{saikuro_bin} #{options_string}} do |ok, response| unless ok puts "Saikuro failed with exit status: #{response.exitstatus}" end end end
format_directories()
click to toggle source
# File lib/generators/saikuro.rb, line 23 def format_directories dirs = MetricFu.saikuro[:input_directory].join(" | ") "\"#{dirs}\"" end
per_file_info(out)
click to toggle source
# File lib/generators/saikuro.rb, line 52 def per_file_info(out) @saikuro_data[:files].each do |file_data| next if File.extname(file_data[:filename]) == '.erb' || !File.exists?(file_data[:filename]) begin line_numbers = MetricFu::LineNumbers.new(File.open(file_data[:filename], 'r').read) rescue StandardError => e raise e unless e.message =~ /you shouldn't be able to get here/ puts "ruby_parser blew up while trying to parse #{file_path}. You won't have method level Saikuro information for this file." next end out[file_data[:filename]] ||= {} file_data[:classes].each do |class_data| class_data[:methods].each do |method_data| line = line_numbers.start_line_for_method(method_data[:name]) out[file_data[:filename]][line.to_s] ||= [] out[file_data[:filename]][line.to_s] << {:type => :saikuro, :description => "Complexity #{method_data[:complexity]}"} end end end end
to_h()
click to toggle source
# File lib/generators/saikuro.rb, line 34 def to_h files = @files.map do |file| my_file = file.to_h f = file.filepath f.gsub!(%r{^#{metric_directory}/}, '') f << "/#{file.filename}" my_file[:filename] = f my_file end @saikuro_data = {:files => files, :classes => @classes.map {|c| c.to_h}, :methods => @meths.map {|m| m.to_h} } {:saikuro => @saikuro_data} end
Private Instance Methods
assemble_classes(files)
click to toggle source
# File lib/generators/saikuro.rb, line 97 def assemble_classes(files) files.map {|f| f.elements}.flatten end
assemble_files()
click to toggle source
# File lib/generators/saikuro.rb, line 109 def assemble_files files = [] Dir.glob("#{metric_directory}/**/*.html").each do |path| if Saikuro::SFile.is_valid_text_file?(path) file = Saikuro::SFile.new(path) if file files << file end end end files end
assemble_methods(files)
click to toggle source
# File lib/generators/saikuro.rb, line 80 def assemble_methods(files) methods = [] files.each do |file| file.elements.each do |element| element.defs.each do |defn| defn.name = "#{element.name}##{defn.name}" methods << defn end end end methods end
sort_classes(classes)
click to toggle source
# File lib/generators/saikuro.rb, line 93 def sort_classes(classes) classes.sort_by {|k| k.complexity.to_i}.reverse end
sort_files(files)
click to toggle source
# File lib/generators/saikuro.rb, line 101 def sort_files(files) files.sort_by do |file| file.elements. max {|a,b| a.complexity.to_i <=> b.complexity.to_i}. complexity.to_i end.reverse end
sort_methods(methods)
click to toggle source
# File lib/generators/saikuro.rb, line 76 def sort_methods(methods) methods.sort_by {|method| method.complexity.to_i}.reverse end