lib/generators/saikuro.rb in nielsm-metric_fu-1.1.1 vs lib/generators/saikuro.rb in nielsm-metric_fu-1.3.1

- old
+ new

@@ -1,21 +1,17 @@ module MetricFu class Saikuro < Generator def emit - relative_path = [File.dirname(__FILE__), '..', '..', - 'vendor', 'saikuro', 'saikuro.rb'] - saikuro = File.expand_path(File.join(relative_path)) - MetricFu.saikuro[:input_directory] = format_directories options_string = MetricFu.saikuro.inject("") do |options, option| options + "--#{option.join(' ')} " end - sh %{ruby "#{saikuro}" #{options_string}} do |ok, response| + sh %{saikuro #{options_string}} do |ok, response| unless ok puts "Saikuro failed with exit status: #{response.exitstatus}" exit 1 end end @@ -25,40 +21,13 @@ dirs = MetricFu.saikuro[:input_directory].join(" | ") "\"#{dirs}\"" end def analyze - @files = [] - saikuro_results.each do |path| - if Saikuro::SFile.is_valid_text_file?(path) - file = Saikuro::SFile.new(path) - if file - @files << file - end - end - end - @files = @files.sort_by do |file| - file.elements. - max {|a,b| a.complexity.to_i <=> b.complexity.to_i}. - complexity.to_i - end - @files.reverse! - klasses = [] - @files.each {|f| klasses << f.elements} - klasses.flatten! - @classes = klasses.sort_by {|k| k.complexity.to_i} - @classes.reverse! - meths = [] - @files.each {|f| - f.elements.each {|el| - el.defs.each {|defn| - defn.name = "#{el.name}##{defn.name}" - meths << defn} - } - } - meths = meths.sort_by {|meth| meth.complexity.to_i} - @meths = meths.reverse + @files = sort_files(assemble_files) + @classes = sort_classes(assemble_classes(@files)) + @meths = sort_methods(assemble_methods(@files)) end def to_h files = @files.map do |file| my_file = file.to_h @@ -69,14 +38,58 @@ :classes => @classes.map {|c| c.to_h}, :methods => @meths.map {|m| m.to_h} } } end - - def saikuro_results - Dir.glob("#{metric_directory}/**/*.html") + + private + def sort_methods(methods) + methods.sort_by {|method| method.complexity.to_i}.reverse end + + 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 + + def sort_classes(classes) + classes.sort_by {|k| k.complexity.to_i}.reverse + end + + def assemble_classes(files) + files.map {|f| f.elements}.flatten + end + + 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 + + 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 + end class Saikuro::SFile attr_reader :elements @@ -118,13 +131,13 @@ element = nil end line = @file_handle.readline element = Saikuro::ParsingElement.new(line) elsif line.match /END/ - @elements << element unless element.nil? + @elements << element if element element = nil else - element << line + element << line if element end end rescue EOFError nil end