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.
Direct Known Subclasses
Churn, Flay, Flog, Hotspots, RailsBestPractices, Rcov, Reek, Roodi, Saikuro, Stats
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:
150 151 152 153 154 155 156 |
# File 'lib/base/generator.rb', line 150 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:
142 143 144 145 146 147 148 |
# File 'lib/base/generator.rb', line 142 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 132 133 134 135 |
# 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 ⇒ 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
137 138 139 140 |
# 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 |
#to_graph ⇒ Object
:nodoc:
158 159 160 161 162 163 164 |
# File 'lib/base/generator.rb', line 158 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 |