class MetricFu::CaneGenerator

Attributes

total_violations[R]
violations[R]

Public Class Methods

metric() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 6
def self.metric
  :cane
end

Public Instance Methods

analyze() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 20
def analyze
  @violations = violations_by_category
  extract_total_violations
end
emit() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 10
def emit
  args =  [
    abc_max_param,
    style_measure_param,
    no_doc_param,
    no_readme_param
  ].join
  @output = run!(args)
end
to_h() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 25
def to_h
  { cane: { total_violations: @total_violations, violations: @violations, total: @total } }
end

Private Instance Methods

abc_max_param() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 31
def abc_max_param
  options[:abc_max] ? " --abc-max #{options[:abc_max]}" : ""
end
category_from(description) click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 56
def category_from(description)
  category_descriptions = {
    abc_complexity: /ABC complexity/,
    line_style: /style requirements/,
    comment: /comment/,
    documentation: /documentation/
  }
  category, desc_matcher = category_descriptions.find { |_k, v| description =~ v }
  mf_debug desc_matcher.inspect
  category
end
extract_total_violations() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 87
def extract_total_violations
  if @output =~ /Total Violations: (\d+)/
    @total_violations = $1.to_i
    @total = "Total Violations #{@total_violations}"
  else
    @total_violations = 0
  end
end
no_doc_param() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 39
def no_doc_param
  options[:no_doc] == "y" ? " --no-doc" : ""
end
no_readme_param() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 43
def no_readme_param
  options[:no_readme] == "y" ? " --no-readme" : ""
end
style_measure_param() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 35
def style_measure_param
  options[:line_length] ? " --style-measure #{options[:line_length]}" : ""
end
violation_type_for(category) click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 72
def violation_type_for(category)
  case category
  when :abc_complexity
    CaneViolations::AbcComplexity
  when :line_style
    CaneViolations::LineStyle
  when :comment
    CaneViolations::Comment
  when :documentation
    CaneViolations::Documentation
  else
    CaneViolations::Others
  end
end
violations_by_category() click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 47
def violations_by_category
  violations_output = @output.scan(/(.*?)\n\n(.*?)\n\n/m)
  violations_output.each_with_object({}) do |(category_desc, violation_list), violations|
    category = category_from(category_desc) || :others
    violations[category] ||= []
    violations[category] += violations_for(category, violation_list)
  end
end
violations_for(category, violation_list) click to toggle source
# File lib/metric_fu/metrics/cane/generator.rb, line 68
def violations_for(category, violation_list)
  violation_type_for(category).parse(violation_list)
end