Class: MetricFu::Generator
- Inherits:
-
Object
- Object
- MetricFu::Generator
- Defined in:
- lib/base/generator.rb
Overview
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.
-
#emit should take care of running the metric tool and gathering its output.
-
#analyze should take care of manipulating the output from #emit and making it possible to store it in a programmatic way.
-
#to_h should provide a hash representation of the output from #analyze ready to be serialized into yaml at some point.
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.
Instance Attribute Summary collapse
-
#report ⇒ Object
readonly
Returns the value of attribute report.
-
#template ⇒ Object
readonly
Returns the value of attribute template.
Class Method Summary collapse
-
.class_name ⇒ Object
Provides the unqualified class name of an implemented concrete class, as a string.
-
.generate_report(options = {}) ⇒ Object
Creates a new generator and returns the output of the #generate_report method.
-
.metric_directory ⇒ Object
Returns the directory where the Generator will write any output.
Instance Method Summary collapse
-
#analyze ⇒ Object
:nodoc:.
-
#create_data_dir_if_missing ⇒ Object
:nodoc:.
-
#create_metric_dir_if_missing ⇒ Object
:nodoc:.
-
#create_output_dir_if_missing ⇒ Object
:nodoc:.
-
#emit ⇒ Object
:nodoc:.
-
#generate_report ⇒ Object
Provides a template method to drive the production of a metric from a concrete implementation of this class.
-
#initialize(options = {}) ⇒ Generator
constructor
A new instance of Generator.
-
#metric_directory ⇒ Object
String The path of the metric directory this class is using.
- #remove_excluded_files(paths, globs_to_remove = MetricFu.file_globs_to_ignore) ⇒ Object
- #round_to_tenths(decimal) ⇒ Object
-
#to_graph ⇒ Object
:nodoc:.
Constructor Details
#initialize(options = {}) ⇒ Generator
Returns a new instance of Generator.
35 36 37 38 39 |
# File 'lib/base/generator.rb', line 35 def initialize(={}) create_metric_dir_if_missing create_output_dir_if_missing create_data_dir_if_missing end |
Instance Attribute Details
#report ⇒ Object (readonly)
Returns the value of attribute report.
33 34 35 |
# File 'lib/base/generator.rb', line 33 def report @report end |
#template ⇒ Object (readonly)
Returns the value of attribute template.
33 34 35 |
# File 'lib/base/generator.rb', line 33 def template @template end |
Class Method Details
.class_name ⇒ Object
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"
66 67 68 |
# File 'lib/base/generator.rb', line 66 def self.class_name self.to_s.split('::').last.downcase end |
.generate_report(options = {}) ⇒ Object
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.
50 51 52 53 |
# File 'lib/base/generator.rb', line 50 def self.generate_report(={}) generator = self.new() generator.generate_report end |
.metric_directory ⇒ Object
Returns the directory where the Generator will write any output
71 72 73 |
# File 'lib/base/generator.rb', line 71 def self.metric_directory File.join(MetricFu.scratch_directory, class_name) end |
Instance Method Details
#analyze ⇒ Object
:nodoc:
146 147 148 149 150 151 152 |
# File 'lib/base/generator.rb', line 146 def analyze #:nodoc: raise <<-EOF This method must be implemented by a concrete class descending from Generator. See generator class documentation for more information. EOF end |
#create_data_dir_if_missing ⇒ Object
:nodoc:
87 88 89 90 91 |
# File 'lib/base/generator.rb', line 87 def create_data_dir_if_missing #:nodoc: unless File.directory?(MetricFu.data_directory) FileUtils.mkdir_p(MetricFu.data_directory, :verbose => false) end end |
#create_metric_dir_if_missing ⇒ Object
:nodoc:
75 76 77 78 79 |
# File 'lib/base/generator.rb', line 75 def create_metric_dir_if_missing #:nodoc: unless File.directory?(metric_directory) FileUtils.mkdir_p(metric_directory, :verbose => false) end end |
#create_output_dir_if_missing ⇒ Object
:nodoc:
81 82 83 84 85 |
# File 'lib/base/generator.rb', line 81 def create_output_dir_if_missing #:nodoc: unless File.directory?(MetricFu.output_directory) FileUtils.mkdir_p(MetricFu.output_directory, :verbose => false) end end |
#emit ⇒ Object
:nodoc:
138 139 140 141 142 143 144 |
# File 'lib/base/generator.rb', line 138 def emit #:nodoc: raise <<-EOF This method must be implemented by a concrete class descending from Generator. See generator class documentation for more information. EOF end |
#generate_report ⇒ Object
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.
123 124 125 126 127 128 129 130 131 |
# File 'lib/base/generator.rb', line 123 def generate_report %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 ⇒ Object
Returns String The path of the metric directory this class is using.
95 96 97 |
# 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) ⇒ Object
99 100 101 102 103 104 105 |
# 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) ⇒ Object
133 134 135 136 |
# File 'lib/base/generator.rb', line 133 def round_to_tenths(decimal) decimal = 0.0 if decimal.to_s.eql?('NaN') (decimal * 10).round / 10.0 end |
#to_graph ⇒ Object
:nodoc:
154 155 156 157 158 159 160 |
# File 'lib/base/generator.rb', line 154 def to_graph #:nodoc: raise <<-EOF This method must be implemented by a concrete class descending from Generator. See generator class documentation for more information. EOF end |