Sha256: c04309c71ab2b495017a77777a555245c865aafe6f5523fc70fddc9c12b9b3a5

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

module MetricFu
  class RoodiGenerator < Generator
    def self.metric
      :roodi
    end

    def emit
      files_to_analyze = options[:dirs_to_roodi].map { |dir| Dir[File.join(dir, "**/*.rb")] }
      files = remove_excluded_files(files_to_analyze.flatten)
      config = options[:roodi_config] ? "-config=#{options[:roodi_config]}" : ""
      args = "#{config} #{files.join(' ')}"
      silence_streams(STDERR) do
        @output = run!(args)
      end
    end

    def analyze
      @output = MetricFu::Utility.strip_escape_codes(@output)
      @matches = @output.chomp.split("\n").map { |m| m.split(" - ") }
      total = @matches.pop
      @matches.reject! { |array| array.size < 2 }
      @matches.map! do |match|
        file, line = match[0].split(":")
        problem = match[1]
        { file: file, line: line, problem: problem }
      end
      total << "Found #{@matches.size} errors."
      @roodi_results = { total: total, problems: @matches }
    end

    def to_h
      { roodi: @roodi_results }
    end

    def per_file_info(out)
      @matches.each do |match|
        out[match[:file]] ||= {}
        out[match[:file]][match[:line]] ||= []
        out[match[:file]][match[:line]] << { type: :roodi, description: match[:problem] }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
code_metric_fu-4.14.4 lib/metric_fu/metrics/roodi/generator.rb
code_metric_fu-4.14.3 lib/metric_fu/metrics/roodi/generator.rb
code_metric_fu-4.14.2 lib/metric_fu/metrics/roodi/generator.rb