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