Class: Turbulence::Generators::ScatterPlot

Inherits:
Object
  • Object
show all
Defined in:
lib/turbulence/generators/scatterplot.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(metrics_hash, x_metric = :churn, y_metric = :complexity) ⇒ ScatterPlot

Returns a new instance of ScatterPlot.



6
7
8
9
10
11
12
# File 'lib/turbulence/generators/scatterplot.rb', line 6

def initialize(metrics_hash,
               x_metric = :churn,
               y_metric = :complexity)
  @x_metric     = x_metric
  @y_metric     = y_metric
  @metrics_hash = metrics_hash
end

Instance Attribute Details

#metrics_hashObject (readonly)

Returns the value of attribute metrics_hash.



4
5
6
# File 'lib/turbulence/generators/scatterplot.rb', line 4

def metrics_hash
  @metrics_hash
end

#x_metricObject (readonly)

Returns the value of attribute x_metric.



4
5
6
# File 'lib/turbulence/generators/scatterplot.rb', line 4

def x_metric
  @x_metric
end

#y_metricObject (readonly)

Returns the value of attribute y_metric.



4
5
6
# File 'lib/turbulence/generators/scatterplot.rb', line 4

def y_metric
  @y_metric
end

Class Method Details

.from(metrics_hash) ⇒ Object



14
15
16
# File 'lib/turbulence/generators/scatterplot.rb', line 14

def self.from(metrics_hash)
  new(metrics_hash)
end

Instance Method Details

#clean_metrics_from_missing_dataObject



36
37
38
39
40
# File 'lib/turbulence/generators/scatterplot.rb', line 36

def clean_metrics_from_missing_data
  metrics_hash.reject! do |filename, metrics|
    metrics[x_metric].nil? || metrics[y_metric].nil?
  end
end

#ensure_minimum(value) ⇒ Object

Offset zero values slightly to avoid Highcharts tooltip detection issues at the chart edge (bug in Highcharts 2.x)



59
60
61
# File 'lib/turbulence/generators/scatterplot.rb', line 59

def ensure_minimum(value)
  value.zero? ? 1 : value
end

#file_metrics_for_directory(metrics_hash) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/turbulence/generators/scatterplot.rb', line 49

def file_metrics_for_directory(metrics_hash)
  metrics_hash.map do |filename, metrics|
    { :filename => filename,
      :x        => ensure_minimum(metrics[x_metric]),
      :y        => ensure_minimum(metrics[y_metric])}
  end
end

#generate_results(metrics, ci) ⇒ Object



63
64
65
66
67
68
# File 'lib/turbulence/generators/scatterplot.rb', line 63

def generate_results(metrics, ci)
  File.open("cc.js", "w") do |f|
    ci.copy_templates_into(Dir.pwd)
    f.write Turbulence::Generators::ScatterPlot.from(metrics).to_js
  end
end

#grouped_by_directoryObject



42
43
44
45
46
47
# File 'lib/turbulence/generators/scatterplot.rb', line 42

def grouped_by_directory
  metrics_hash.group_by do |filename, _|
    directories = File.dirname(filename).split("/")
    directories[0..1].join("/")
  end
end

#mangleObject



18
19
20
21
22
23
# File 'lib/turbulence/generators/scatterplot.rb', line 18

def mangle
  mangler = FileNameMangler.new
  mangled = {}
  metrics_hash.each_pair { |filename, metrics| mangled[mangler.mangle_name(filename)] = metrics}
  @metrics_hash = mangled
end

#to_jsObject



25
26
27
28
29
30
31
32
33
34
# File 'lib/turbulence/generators/scatterplot.rb', line 25

def to_js
  clean_metrics_from_missing_data
  directory_series = {}

  grouped_by_directory.each_pair do |directory, metrics_hash|
    directory_series[directory] = file_metrics_for_directory(metrics_hash)
  end

  "var directorySeries = #{directory_series.to_json};"
end