Sha256: e88772746786373233a9628d96cc99519444ca031ecddfffa2627e3f2ebcce36

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

module MetricFu

  class ChurnGenerator < Generator

    def self.metric
      :churn
    end

    def emit
      @output = generate_churn_metrics
    end

    def analyze
      if @output.nil? || @output.match(/Churning requires.*git/)
        @churn = {:churn => {}}
      else
        @churn = YAML::load(@output)
      end
    end

    # ensure hash only has the :churn key
    def to_h
      {:churn => @churn[:churn]}
    end

    private

    def generate_churn_metrics
      output = churn_code
      ensure_output_is_valid_yaml(output)
    end

    def churn_code
      run!(build_churn_options)
    end

    def ensure_output_is_valid_yaml(output)
      yaml_start = output.index("---")
      if yaml_start
        output[yaml_start...output.length]
      else
        nil
      end
    end

    def build_churn_options
      opts = ["--yaml"]
      churn_options.each do |churn_option, command_flag|
        if has_option?(churn_option)
          opts << "#{command_flag}=#{options[churn_option]}"
        end
      end
      opts.join(" ")
    end

    def has_option?(churn_option)
      options.include?(churn_option)
    end
    def churn_options
      {
        :minimum_churn_count => '--minimum_churn_count',
        :start_date => '--start_date'
      }
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
metric_fu-4.6.0 lib/metric_fu/metrics/churn/churn.rb
metric_fu-4.5.2 lib/metric_fu/metrics/churn/churn.rb
metric_fu-4.5.1 lib/metric_fu/metrics/churn/churn.rb