Class: MetricFu::SaikuroGenerator
Instance Attribute Summary
Attributes inherited from Generator
#options, #result, #template
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Generator
#generate_result, generators, get_generator, #initialize, #metric, #metric_config, metric_directory, #metric_directory, not_implemented, #remove_excluded_files, #round_to_tenths, #run!, #silence_streams
Class Method Details
.metric ⇒ Object
8
9
10
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 8
def self.metric
:saikuro
end
|
Instance Method Details
#analyze ⇒ Object
24
25
26
27
28
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 24
def analyze
@files = sort_files(assemble_files)
@classes = sort_classes(assemble_classes(@files))
@meths = sort_methods(assemble_methods(@files))
end
|
#build_output_from_line_numbers(out, line_numbers, file_data) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 50
def build_output_from_line_numbers(out, line_numbers, file_data)
filename = file_data[:filename]
output = out[filename]
method_data_for_file_data(file_data) do |method_data|
line = line_numbers.start_line_for_method(method_data[:name]).to_s
result = {
type: :saikuro,
description: "Complexity #{method_data[:complexity]}"
}
output[line] << result
end
out
end
|
#emit ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 12
def emit
options_string = options.inject("") do |options, option|
option[0] == :input_directory ? options : options + "--#{option.join(' ')} "
end
options[:input_directory].each do |input_dir|
options_string += "--input_directory #{input_dir} "
end
@output = run!(options_string)
end
|
#line_numbers_from_file(filename) ⇒ Object
64
65
66
67
68
69
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 64
def line_numbers_from_file(filename)
MetricFu::LineNumbers.new(File.read(filename))
rescue StandardError => e
raise e unless e.message =~ /you shouldn't be able to get here/
mf_log "ruby_parser blew up while trying to parse #{file_path}. You won't have method level Saikuro information for this file."
end
|
#method_data_for_file_data(file_data, &_block) ⇒ Object
71
72
73
74
75
76
77
78
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 71
def method_data_for_file_data(file_data, &_block)
return unless block_given?
file_data[:classes].each do |class_data|
class_data[:methods].each do |method_data|
yield method_data
end
end
end
|
#per_file_info(out) ⇒ Object
40
41
42
43
44
45
46
47
48
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 40
def per_file_info(out)
@saikuro_data[:files].each do |file_data|
filename = file_data[:filename]
next if erb_file?(filename) || file_not_exists?(filename)
next unless line_numbers = line_numbers_from_file(filename)
build_output_from_line_numbers(out, line_numbers, file_data)
end
end
|
#to_h ⇒ Object
30
31
32
33
34
35
36
37
38
|
# File 'lib/metric_fu/metrics/saikuro/generator.rb', line 30
def to_h
@saikuro_data = {
files: files_with_relative_paths(@files),
classes: @classes.map(&:to_h),
methods: @meths.map(&:to_h),
}
clear_scratch_files!
{ saikuro: @saikuro_data }
end
|