Sha256: 80b0507605c66207f43c652487cbc0f1bbdbaf71ee6ea943eb6c96fe75ea4151

Contents?: true

Size: 1.85 KB

Versions: 9

Compression:

Stored size: 1.85 KB

Contents

require "rake"
require "metric_fu/run"
namespace :metrics do
  def options_tip(task_name)
    "with options, for example:  rake metrics:#{task_name}['cane: {abc_max: 81}']"
  end
  desc "Generate all metrics reports, or #{options_tip('all')}"
  task :all, [:options] do |_t, args|
    MetricFu.run(process_options(args.options))
  end

  desc "Run only specified ;-separated metrics, for example, metrics:only[cane;flog] or #{options_tip('only')}"
  task :only, [:metrics, :options] do |_t, args|
    requested_metrics = args.metrics.to_s.split(";").map(&:strip)
    enabled_metrics = MetricFu::Metric.enabled_metrics.map(&:name)
    metrics_to_run = enabled_metrics.select { |metric| requested_metrics.include?(metric.to_s) }
    MetricFu.run_only(metrics_to_run, process_options(args.options))
  end

  MetricFu::Metric.enabled_metrics.each do |metric|
    name = metric.name
    desc "Generate report for #{name}, or #{options_tip('cane')}"
    task name, [:options] do |_t, args|
      MetricFu.run_only(name, process_options(args.options))
    end
  end

  private

  # from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/keys.rb
  class Hash
    # Destructively, recursively convert all keys to symbols, as long as they respond
    # to +to_sym+.
    def recursively_symbolize_keys!
      keys.each do |key|
        value = delete(key)
        new_key = key.intern # rescue
        self[new_key] = (value.is_a?(Hash) ? value.dup.recursively_symbolize_keys! : value)
      end
      self
    end
  end

  def process_options(options)
    return {} if options.nil? or options.empty?
    options = YAML.load(options)
    if options.is_a?(Hash)
      p "Got options #{options.recursively_symbolize_keys!.inspect}"
      options
    else
      raise "Invalid options #{options.inspect}, is a #{options.class}, should be a Hash"
    end
  end
end

Version data entries

9 entries across 9 versions & 3 rubygems

Version Path
metric_fu-4.13.0 lib/metric_fu/tasks/metric_fu.rake
fastruby-metric_fu-5.0.0 lib/metric_fu/tasks/metric_fu.rake
code_metric_fu-4.14.4 lib/metric_fu/tasks/metric_fu.rake
code_metric_fu-4.14.3 lib/metric_fu/tasks/metric_fu.rake
code_metric_fu-4.14.2 lib/metric_fu/tasks/metric_fu.rake
code_metric_fu-4.14.1 lib/metric_fu/tasks/metric_fu.rake
code_metric_fu-4.14.0 lib/metric_fu/tasks/metric_fu.rake
metric_fu-4.12.0 lib/metric_fu/tasks/metric_fu.rake
metric_fu-4.11.4 lib/metric_fu/tasks/metric_fu.rake