class MetricFu::Generator

Generator

The Generator class is an abstract class that provides the skeleton for producing different types of metrics.

It drives the production of the metrics through a template method - generate_report(options={}). This method calls emit, analyze and to_h in order to produce the metrics.

To implement a concrete class to generate a metric, therefore, the class must implement those three methods.

Pre-conditions

Based on the class name of the concrete class implementing a Generator, the Generator class will create a 'metric_directory' named after the class under the MetricFu.scratch_directory, where any output from the emit method should go.

It will also create the MetricFu.output_directory if neccessary, and in general setup the directory structure that the MetricFu system expects.

Attributes

report[R]
template[R]

Public Class Methods

class_name() click to toggle source

Provides the unqualified class name of an implemented concrete class, as a string. For example:

class Flay < Generator; end
klass = Flay.new
klass.class_name
> "flay"

@return String

The unqualified class name of this concrete class, returned
as a string.
# File lib/base/generator.rb, line 66
def self.class_name
  self.to_s.split('::').last.downcase
end
generate_report(options={}) click to toggle source

Creates a new generator and returns the output of the generate_report method. This is the typical way to generate a new MetricFu report. For more information see the generate_report instance method.

@params options Hash

A currently unused hash to configure the Generator

@see generate_report

# File lib/base/generator.rb, line 50
def self.generate_report(options={})
  generator = self.new(options)
  generator.generate_report
end
metric_directory() click to toggle source

Returns the directory where the Generator will write any output

# File lib/base/generator.rb, line 71
def self.metric_directory
  File.join(MetricFu.scratch_directory, class_name)
end
new(options={}) click to toggle source
# File lib/base/generator.rb, line 35
def initialize(options={})
  create_metric_dir_if_missing
  create_output_dir_if_missing
  create_data_dir_if_missing
end

Public Instance Methods

generate_report() click to toggle source

Provides a template method to drive the production of a metric from a concrete implementation of this class. Each concrete class must implement the three methods that this template method calls: emit, analyze and to_h. For more details, see the class documentation.

This template method also calls before_emit, after_emit… etc. methods to allow extra hooks into the processing methods, and help to keep the logic of your Generators clean.

# File lib/base/generator.rb, line 123
def generate_report
  if MetricFu.configuration.verbose
    puts "Executing #{self.class.to_s.gsub(/.*::/, '')}"
  end

  %w[emit analyze].each do |meth|
    send("before_#{meth}".to_sym)
    send("#{meth}".to_sym)
    send("after_#{meth}".to_sym)
  end
  before_to_h()
  to_h()
end
metric_directory() click to toggle source

@return String

The path of the metric directory this class is using.
# File lib/base/generator.rb, line 95
def metric_directory
  self.class.metric_directory
end
remove_excluded_files(paths, globs_to_remove = MetricFu.file_globs_to_ignore) click to toggle source
# File lib/base/generator.rb, line 99
def remove_excluded_files(paths, globs_to_remove = MetricFu.file_globs_to_ignore)
  files_to_remove = []
  globs_to_remove.each do |glob|
    files_to_remove.concat(Dir[glob])
  end
  paths - files_to_remove
end
round_to_tenths(decimal) click to toggle source
# File lib/base/generator.rb, line 137
def round_to_tenths(decimal)
  decimal = 0.0 if decimal.to_s.eql?('NaN')
  (decimal * 10).round / 10.0
end