Class: Reconn::Visualizer

Inherits:
Object
  • Object
show all
Defined in:
lib/reconn/visualizer.rb

Class Method Summary collapse

Class Method Details

.make_bar_chart(title, data, additional_line_value = nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/reconn/visualizer.rb', line 20

def self.make_bar_chart(title, data, additional_line_value = nil)
  chart = Gruff::Bar.new
  chart.minimum_value = 0
  chart.maximum_value = data.first[:value]
  chart.additional_line_values = [additional_line_value] unless additional_line_value.nil?
  chart.title = title.to_s
  data.each do |item|
    chart.data(item[:label], item[:value])
  end

  chart.to_blob
end

.make_dependency_diagram(classes) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/reconn/visualizer.rb', line 33

def self.make_dependency_diagram(classes)
  diagram = GraphViz.new(:G, :type => :digraph)
  nodes = classes.map { |c| diagram.add_nodes(c.name) }
  external_nodes = classes.map {|c| c.external_deps}.inject(:+).uniq.map {|n| diagram.add_nodes(n)}
  classes.each do |klass|
    classes.each do |other_klass|
      if !klass.dependencies.index {|d| d == other_klass.name }.nil? || klass.dependencies.find_all {|d| other_klass.name =~ /^.*{0,}::#{d}$/}.size == 1
        node, other_node = [klass, other_klass].map {|k| nodes.find {|n| n[:label].to_s.gsub('"', '') == k.name}}
        diagram.add_edges(node, other_node)
      end
    end
    external_nodes.each {|n| n.set {|_n| _n.color = "blue"}}
    external_nodes.each do |ext_node|
      if klass.external_deps.include?(ext_node[:label].to_s.gsub('"', ''))
        node = nodes.find {|n| n[:label].to_s.gsub('"', '') == klass.name}
        diagram.add_edges(node, ext_node)
      end
    end
  end
  diagram.output(:png => String)
end

.make_pie_chart(title, data, items_number) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/reconn/visualizer.rb', line 6

def self.make_pie_chart(title, data, items_number)
  chart = Gruff::Pie.new
  chart.title = title.to_s
  data = Array.new(data)
  data.first(items_number).each do |item|
    chart.data(item[:label], item[:value])
    data.delete(item)
  end

  chart.data("other", data.map {|itm| itm[:value]}.inject(:+))

  chart.to_blob
end