class MetricFu::FlogGenerator

Public Class Methods

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

Public Instance Methods

analyze() click to toggle source
# File lib/metric_fu/metrics/flog/generator.rb, line 19
def analyze
  @method_containers = {}
  @flogger.calculate
  @flogger.each_by_score do |full_method_name, score, operators|
    container_name = full_method_name.split("#").first
    path = @flogger.method_locations[full_method_name]
    if @method_containers[container_name]
      @method_containers[container_name].add_method(full_method_name, operators, score, path)
      @method_containers[container_name].add_path(path)
    else
      mc = MethodContainer.new(container_name, path)
      mc.add_method(full_method_name, operators, score, path)
      @method_containers[container_name] = mc
    end
  end
end
emit() click to toggle source
# File lib/metric_fu/metrics/flog/generator.rb, line 10
def emit
  parse_options = FlogCLI.parse_options [
    "--all",
    options[:continue] ? "--continue" : nil,
  ].compact
  @flogger = FlogCLI.new parse_options
  @flogger.flog *files_to_flog
end
per_file_info(out) click to toggle source
# File lib/metric_fu/metrics/flog/generator.rb, line 43
def per_file_info(out)
  @method_containers.each_pair do |_klass, container|
    container.methods.each_pair do |_method_name, data|
      next if data[:path].nil?

      file, line = data[:path].split(":")

      out[file][line] << { type: :flog, description: "Score of %.2f" % data[:score] }
    end
  end
end
to_h() click to toggle source
# File lib/metric_fu/metrics/flog/generator.rb, line 36
def to_h
  sorted_containers = @method_containers.values.sort_by(&:highest_score).reverse
  { flog: { total: @flogger.total_score,
            average: @flogger.average,
            method_containers: sorted_containers.map(&:to_h) } }
end

Private Instance Methods

files_to_flog() click to toggle source
# File lib/metric_fu/metrics/flog/generator.rb, line 57
def files_to_flog
  options[:dirs_to_flog].flatten.map do |p|
    if File.directory? p then
      Dir[File.join(p, '**/*.{rb,rake}')]
    else
      p
    end
  end.flatten
end