ruby-graphviz 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/CHANGELOG.rdoc +4 -0
  2. data/bin/dot2ruby +5 -5
  3. data/bin/gem2gv +18 -18
  4. data/bin/git2gv +20 -20
  5. data/bin/ruby2gv +26 -26
  6. data/bin/xml2gv +5 -5
  7. data/examples/sample06.rb +5 -5
  8. data/examples/sample12.rb +3 -3
  9. data/examples/sample13.rb +8 -8
  10. data/examples/sample14.rb +8 -8
  11. data/examples/sample15.rb +1 -1
  12. data/examples/sample17.rb +7 -7
  13. data/examples/sample19.rb +10 -10
  14. data/examples/sample20.rb +2 -2
  15. data/examples/sample21.rb +1 -1
  16. data/examples/sample28.rb +1 -1
  17. data/examples/sample31.rb +1 -1
  18. data/examples/sample33.rb +10 -10
  19. data/examples/sample34.rb +1 -1
  20. data/examples/sample35.rb +7 -7
  21. data/examples/sample36.rb +2 -2
  22. data/examples/sample40.rb +4 -4
  23. data/examples/sample44.rb +72 -72
  24. data/examples/sample45.rb +4 -4
  25. data/examples/sample48.rb +7 -7
  26. data/examples/sample50.rb +1 -1
  27. data/examples/sample52.rb +2 -2
  28. data/examples/sample53.rb +2 -2
  29. data/examples/sample54.rb +3 -3
  30. data/examples/sample60.rb +2 -2
  31. data/examples/sample61.rb +2 -2
  32. data/examples/sample62.rb +2 -2
  33. data/examples/sample99.rb +15 -15
  34. data/examples/theory/pert.rb +2 -2
  35. data/examples/theory/tests.rb +2 -2
  36. data/lib/graphviz.rb +140 -140
  37. data/lib/graphviz/attrs.rb +6 -11
  38. data/lib/graphviz/constants.rb +35 -35
  39. data/lib/graphviz/core_ext.rb +1 -1
  40. data/lib/graphviz/dot2ruby.rb +7 -7
  41. data/lib/graphviz/dsl.rb +5 -5
  42. data/lib/graphviz/edge.rb +13 -13
  43. data/lib/graphviz/elements.rb +5 -5
  44. data/lib/graphviz/ext.rb +1 -1
  45. data/lib/graphviz/family_tree.rb +15 -15
  46. data/lib/graphviz/family_tree/couple.rb +11 -11
  47. data/lib/graphviz/family_tree/generation.rb +6 -6
  48. data/lib/graphviz/family_tree/person.rb +13 -13
  49. data/lib/graphviz/graphml.rb +39 -39
  50. data/lib/graphviz/math/matrix.rb +23 -23
  51. data/lib/graphviz/node.rb +8 -8
  52. data/lib/graphviz/nothugly.rb +3 -3
  53. data/lib/graphviz/theory.rb +8 -8
  54. data/lib/graphviz/types.rb +3 -3
  55. data/lib/graphviz/types/arrow_type.rb +3 -3
  56. data/lib/graphviz/types/color.rb +2 -2
  57. data/lib/graphviz/types/color_list.rb +2 -2
  58. data/lib/graphviz/types/esc_string.rb +2 -2
  59. data/lib/graphviz/types/gv_bool.rb +3 -3
  60. data/lib/graphviz/types/gv_double.rb +3 -3
  61. data/lib/graphviz/types/html_string.rb +2 -2
  62. data/lib/graphviz/types/lbl_string.rb +2 -2
  63. data/lib/graphviz/types/rect.rb +2 -2
  64. data/lib/graphviz/types/spline_type.rb +9 -9
  65. data/lib/graphviz/utils.rb +13 -13
  66. data/lib/graphviz/utils/colors.rb +35 -35
  67. data/lib/graphviz/xml.rb +24 -24
  68. data/setup.rb +4 -4
  69. data/test/test_graph.rb +9 -9
  70. data/test/test_subgraph.rb +1 -1
  71. data/test/test_theory.rb +4 -4
  72. data/test/test_utils_colors.rb +4 -4
  73. metadata +2 -2
@@ -1,15 +1,15 @@
1
1
  # Copyright (C) 2004 - 2012 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
- #
2
+ #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
5
5
  # the Free Software Foundation; either version 2 of the License, or
6
6
  # (at your option) any later version.
7
- #
7
+ #
8
8
  # This program is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
  # GNU General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -44,9 +44,6 @@ class GraphViz
44
44
  self[k] = v
45
45
  end
46
46
  else
47
- if @data.key?( key.to_s ) == false
48
- nil
49
- end
50
47
  @data[key.to_s]
51
48
  end
52
49
  end
@@ -66,12 +63,10 @@ class GraphViz
66
63
  rescue => e
67
64
  raise AttributeException, "Invalide value `#{value}` for attribute `#{key}` : #{e}"
68
65
  end
69
- unless value.nil?
70
- @data[key.to_s] = value
71
66
 
72
- if @graphviz.nil? == false
73
- @graphviz.set_position( @name, key.to_s, @data[key.to_s] )
74
- end
67
+ if value
68
+ @data[key.to_s] = value
69
+ @graphviz.set_position( @name, key.to_s, @data[key.to_s] ) if @graphviz
75
70
  end
76
71
  end
77
72
  end
@@ -1,30 +1,30 @@
1
1
  # Copyright (C) 2004 - 2012 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
- #
2
+ #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
5
5
  # the Free Software Foundation; either version 2 of the License, or
6
6
  # (at your option) any later version.
7
- #
7
+ #
8
8
  # This program is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
  # GNU General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
16
 
17
17
  # Constants for ruby-graphviz
18
- #
18
+ #
19
19
  # Constants::FORMATS: the possible output formats
20
- # "bmp", "canon", "dot", "xdot", "cmap", "dia", "eps",
20
+ # "bmp", "canon", "dot", "xdot", "cmap", "dia", "eps",
21
21
  # "fig", "gd", "gd2", "gif", "gtk", "hpgl", "ico", "imap",
22
22
  # "cmapx", "imap_np", "cmapx_np", "ismap", "jpeg", "jpg",
23
23
  # "jpe", "mif", "mp", "pcl", "pdf", "pic", "plain",
24
24
  # "plain-ext", "png", "ps", "ps2", "svg", "svgz", "tga",
25
25
  # "tiff", "tif", "vml", "vmlz", "vrml", "vtx", "wbmp",
26
- # "xlib", "none"
27
- #
26
+ # "xlib", "none"
27
+ #
28
28
  # Constants::PROGRAMS: The possible programs
29
29
  # "dot", "neato", "twopi", "fdp", "circo"
30
30
  #
@@ -33,22 +33,22 @@
33
33
  #
34
34
  #
35
35
  # The single letter codes used in constructors map as follows:
36
- # G => The root graph, with GRAPHATTRS
36
+ # G => The root graph, with GRAPHATTRS
37
37
  # E => Edge, with EDGESATTRS
38
38
  # N => Node, with NODESATTRS
39
39
  # S => subgraph
40
40
  # C => cluster
41
41
  #
42
42
  module Constants
43
- RGV_VERSION = "1.0.7"
44
-
43
+ RGV_VERSION = "1.0.8"
44
+
45
45
  ## Const: Output formats
46
46
  FORMATS = [
47
47
  "bmp",
48
48
  "canon",
49
- "dot",
49
+ "dot",
50
50
  "xdot",
51
- "cmap",
51
+ "cmap",
52
52
  "dia",
53
53
  "eps",
54
54
  "fig",
@@ -56,37 +56,37 @@ module Constants
56
56
  "gd2",
57
57
  "gif",
58
58
  "gtk",
59
- "hpgl",
59
+ "hpgl",
60
60
  "ico",
61
- "imap",
61
+ "imap",
62
62
  "cmapx",
63
- "imap_np",
63
+ "imap_np",
64
64
  "cmapx_np",
65
- "ismap",
66
- "jpeg",
67
- "jpg",
68
- "jpe",
69
- "mif",
65
+ "ismap",
66
+ "jpeg",
67
+ "jpg",
68
+ "jpe",
69
+ "mif",
70
70
  "mp",
71
- "pcl",
71
+ "pcl",
72
72
  "pdf",
73
- "pic",
74
- "plain",
73
+ "pic",
74
+ "plain",
75
75
  "plain-ext",
76
- "png",
77
- "ps",
76
+ "png",
77
+ "ps",
78
78
  "ps2",
79
- "svg",
79
+ "svg",
80
80
  "svgz",
81
81
  "tga",
82
82
  "tiff",
83
83
  "tif",
84
84
  "vml",
85
85
  "vmlz",
86
- "vrml",
87
- "vtx",
88
- "wbmp",
89
- "xlib",
86
+ "vrml",
87
+ "vtx",
88
+ "wbmp",
89
+ "xlib",
90
90
  "none"
91
91
  ]
92
92
 
@@ -114,7 +114,7 @@ module Constants
114
114
  }
115
115
  list
116
116
  end
117
-
117
+
118
118
  # E, N, G, S and C represent edges, nodes, the root graph, subgraphs and cluster subgraphs, respectively
119
119
  GENCS_ATTRS = {
120
120
  "Damping" => { :usedBy => "G", :type => :GvDouble },
@@ -142,8 +142,8 @@ module Constants
142
142
  "dimen" => { :usedBy => "G", :type => :EscString }, # int
143
143
  "dir" => { :usedBy => "E", :type => :EscString }, # dirType
144
144
  "diredgeconstraints" => { :usedBy => "G", :type => :EscString }, # string, bool
145
- "distortion" => { :usedBy => "N", :type => :GvDouble },
146
- "dpi" => { :usedBy => "G", :type => :GvDouble },
145
+ "distortion" => { :usedBy => "N", :type => :GvDouble },
146
+ "dpi" => { :usedBy => "G", :type => :GvDouble },
147
147
  "edgeURL" => { :usedBy => "E", :type => :EscString },
148
148
  "edgehref" => { :usedBy => "E", :type => :EscString },
149
149
  "edgetarget" => { :usedBy => "E", :type => :EscString },
@@ -161,7 +161,7 @@ module Constants
161
161
  "headURL" => { :usedBy => "E", :type => :EscString },
162
162
  "headclip" => { :usedBy => "E", :type => :GvBool }, # bool
163
163
  "headhref" => { :usedBy => "E", :type => :EscString },
164
- "headlabel" => { :usedBy => "E", :type => :EscString }, # LblString
164
+ "headlabel" => { :usedBy => "E", :type => :EscString }, # LblString
165
165
  "headport" => { :usedBy => "E", :type => :EscString }, # portPos
166
166
  "headtarget" => { :usedBy => "E", :type => :EscString },
167
167
  "headtooltip" => { :usedBy => "E", :type => :EscString },
@@ -189,7 +189,7 @@ module Constants
189
189
  "layers" => { :usedBy => "G", :type => :EscString }, # layerList
190
190
  "layersep" => { :usedBy => "G", :type => :EscString }, # string
191
191
  "layout" => { :usedBy => "G", :type => :EscString }, # string
192
- "len" => { :usedBy => "E", :type => :GvDouble },
192
+ "len" => { :usedBy => "E", :type => :GvDouble },
193
193
  "levels" => { :usedBy => "G", :type => :EscString }, # int
194
194
  "levelsgap" => { :usedBy => "G", :type => :GvDouble },
195
195
  "lhead" => { :usedBy => "E", :type => :EscString }, # string
@@ -37,7 +37,7 @@ class Hash
37
37
  # :png => "file.png",
38
38
  # :svg => "file.svg"
39
39
  # }
40
- #
40
+ #
41
41
  # x.each_except( :key => [:none], :value => [/\.png$/] ) do |k, v|
42
42
  # puts "#{k} -> #{v}"
43
43
  # end
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
2
  # Copyright (C) 2010 Gregoire Lejeune <gregoire.lejeune@free.fr>
3
- #
3
+ #
4
4
  # This program is free software; you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
6
6
  # the Free Software Foundation; either version 2 of the License, or
7
7
  # (at your option) any later version.
8
- #
8
+ #
9
9
  # This program is distributed in the hope that it will be useful,
10
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
12
  # GNU General Public License for more details.
13
- #
13
+ #
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with this program; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -20,7 +20,7 @@ require 'graphviz/utils'
20
20
 
21
21
  class Dot2Ruby #:nodoc:
22
22
  include GVUtils
23
-
23
+
24
24
  def initialize( xGVPath, xOutFile, xOutFormat = nil ) #:nodoc:
25
25
  paths = (xGVPath.nil?) ? [] : [xGVPath]
26
26
  @xGvprPath = find_executable( 'gvpr', paths )
@@ -28,7 +28,7 @@ class Dot2Ruby #:nodoc:
28
28
  @xOutFormat = xOutFormat || "_"
29
29
  @gvprScript = GraphViz::Ext.find( "dot2ruby.g" )
30
30
  end
31
-
31
+
32
32
  def run( xFile ) #:nodoc:
33
33
  xCmd = "#{@xGvprPath} -f #{@gvprScript} -a #{@xOutFormat} #{xFile}"
34
34
  xOutput = output_from_command( xCmd )
@@ -38,9 +38,9 @@ class Dot2Ruby #:nodoc:
38
38
  File.open( @xOutFile, "w" ) do |io|
39
39
  io.print xOutput
40
40
  end
41
- end
41
+ end
42
42
  end
43
-
43
+
44
44
  def eval( xFile ) #:nodoc:
45
45
  xCmd = "#{@xGvprPath} -f #{@gvprScript} -a \"-\" #{xFile}"
46
46
  xOutput = output_from_command( xCmd )
data/lib/graphviz/dsl.rb CHANGED
@@ -39,29 +39,29 @@ class GraphViz::DSL
39
39
  end
40
40
 
41
41
  # Add a subgraph
42
- def subgraph(name, &block)
42
+ def subgraph(name, &block)
43
43
  @graph.add_graph(GraphViz::DSL.new(name, { :parent => @graph, :type => @graph.type }, &block).graph)
44
44
  end
45
45
  alias :cluster :subgraph
46
46
 
47
47
  # Generate output
48
- def output(options = {})
48
+ def output(options = {})
49
49
  @graph.output(options)
50
50
  end
51
51
  end
52
52
 
53
53
  # Create a new undirected graph
54
- def graph(name, options = {}, &block)
54
+ def graph(name, options = {}, &block)
55
55
  GraphViz::DSL.new(name, options.merge( { :type => "graph" } ), &block).graph
56
56
  end
57
57
 
58
58
  # Create a new directed graph
59
- def digraph(name, options = {}, &block)
59
+ def digraph(name, options = {}, &block)
60
60
  GraphViz::DSL.new(name, options.merge( { :type => "digraph" } ), &block).graph
61
61
  end
62
62
 
63
63
  # Create a new strict directed graph
64
- def strict(name, options = {}, &block)
64
+ def strict(name, options = {}, &block)
65
65
  GraphViz::DSL.new(name, options.merge( { :type => "strict digraph" } ), &block).graph
66
66
  end
67
67
 
data/lib/graphviz/edge.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  # Copyright (C) 2004 - 2012 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
- #
2
+ #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
5
5
  # the Free Software Foundation; either version 2 of the License, or
6
6
  # (at your option) any later version.
7
- #
7
+ #
8
8
  # This program is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
  # GNU General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -22,11 +22,11 @@ class GraphViz
22
22
  include Constants
23
23
 
24
24
  # Create a new edge
25
- #
25
+ #
26
26
  # In:
27
27
  # * vNodeOne : First node (can be a GraphViz::Node or a node ID)
28
28
  # * vNodeTwo : Second node (can be a GraphViz::Node or a node ID)
29
- # * parent_graph : Graph
29
+ # * parent_graph : Graph
30
30
  def initialize( vNodeOne, vNodeTwo, parent_graph )
31
31
  @node_one_id, @node_one_port = getNodeNameAndPort( vNodeOne )
32
32
  @node_two_id, @node_two_port = getNodeNameAndPort( vNodeTwo )
@@ -35,7 +35,7 @@ class GraphViz
35
35
  @edge_attributes = GraphViz::Attrs::new( nil, "edge", EDGESATTRS )
36
36
  @index = nil
37
37
 
38
- unless @parent_graph.directed?
38
+ unless @parent_graph.directed?
39
39
  (@parent_graph.find_node(@node_one_id) || @parent_graph.add_nodes(@node_one_id)).incidents << (@parent_graph.find_node(@node_two_id) || @parent_graph.add_nodes(@node_two_id))
40
40
  (@parent_graph.find_node(@node_two_id) || @parent_graph.add_nodes(@node_two_id)).neighbors << (@parent_graph.find_node(@node_one_id) || @parent_graph.add_nodes(@node_one_id))
41
41
  end
@@ -45,7 +45,7 @@ class GraphViz
45
45
 
46
46
  # Return the node one as string (so with port if any)
47
47
  def node_one( with_port = true )
48
- if @node_one_port.nil? or with_port == false
48
+ if not (@node_one_port and with_port)
49
49
  GraphViz.escape(@node_one_id)
50
50
  else
51
51
  GraphViz.escape(@node_one_id, :force => true) + ":#{@node_one_port}"
@@ -55,9 +55,9 @@ class GraphViz
55
55
 
56
56
  # Return the node two as string (so with port if any)
57
57
  def node_two( with_port = true )
58
- if @node_two_port.nil? or with_port == false
59
- GraphViz.escape(@node_two_id)
60
- else
58
+ if not (@node_two_port and with_port)
59
+ GraphViz.escape(@node_two_id)
60
+ else
61
61
  GraphViz.escape(@node_two_id, :force => true) + ":#{@node_two_port}"
62
62
  end
63
63
  end
@@ -77,7 +77,7 @@ class GraphViz
77
77
  @edge_attributes[attribute_name.to_s] = attribute_value
78
78
  end
79
79
 
80
- # Set values for edge attributes or
80
+ # Set values for edge attributes or
81
81
  # get the value of the given edge attribute +attribute_name+
82
82
  def []( attribute_name )
83
83
  # Modification by axgle (http://github.com/axgle)
@@ -87,7 +87,7 @@ class GraphViz
87
87
  end
88
88
  else
89
89
  if @edge_attributes[attribute_name.to_s]
90
- @edge_attributes[attribute_name.to_s].clone
90
+ @edge_attributes[attribute_name.to_s].clone
91
91
  else
92
92
  nil
93
93
  end
@@ -95,7 +95,7 @@ class GraphViz
95
95
  end
96
96
 
97
97
  #
98
- # Calls block once for each attribute of the edge, passing the name and value to the
98
+ # Calls block once for each attribute of the edge, passing the name and value to the
99
99
  # block as a two-element array.
100
100
  #
101
101
  # If global is set to false, the block does not receive the attributes set globally
@@ -4,22 +4,22 @@ class GraphViz
4
4
  @elements = Array.new
5
5
  @elements_hash_by_type = Hash.new
6
6
  end
7
-
7
+
8
8
  def push( obj )
9
9
  @elements.push( obj )
10
10
  if @elements_hash_by_type[obj['type']].nil?
11
11
  @elements_hash_by_type[obj['type']] = Array.new
12
12
  end
13
-
13
+
14
14
  @elements_hash_by_type[obj['type']].push( obj )
15
15
  end
16
-
16
+
17
17
  def each( &b )
18
18
  @elements.each do |e|
19
19
  yield( e )
20
20
  end
21
21
  end
22
-
22
+
23
23
  def size_of( type )
24
24
  if @elements_hash_by_type[type].nil?
25
25
  return 0
@@ -27,7 +27,7 @@ class GraphViz
27
27
  return @elements_hash_by_type[type].size
28
28
  end
29
29
  end
30
-
30
+
31
31
  def []( index, type = nil )
32
32
  if type.nil?
33
33
  return @elements[index]
data/lib/graphviz/ext.rb CHANGED
@@ -10,7 +10,7 @@ class GraphViz
10
10
  found = path if File.basename( path ) == ext
11
11
  end
12
12
  end
13
-
13
+
14
14
  File.expand_path( found )
15
15
  end
16
16
  end
@@ -21,10 +21,10 @@ class GraphViz
21
21
  @generation_number = 0
22
22
  @generations = []
23
23
  @couples = {}
24
-
24
+
25
25
  instance_eval(&block) if block
26
26
  end
27
-
27
+
28
28
  # Add a new generation in the tree
29
29
  #
30
30
  # require 'graphviz/family_tree'
@@ -42,47 +42,47 @@ class GraphViz
42
42
  @generations << gen
43
43
  @generation_number += 1
44
44
  end
45
-
45
+
46
46
  def persons #:nodoc:
47
47
  @persons ||= {}
48
48
  end
49
-
49
+
50
50
  def add_couple( x, y, node ) #:nodoc:
51
51
  @couples[x] = {} if @couples[x].nil?
52
52
  @couples[x][y] = GraphViz::FamilyTree::Couple.new( @graph, node, [x, y] )
53
53
  @couples[y] = {} if @couples[y].nil?
54
54
  @couples[y][x] = @couples[x][y]
55
55
  end
56
-
56
+
57
57
  # Get a couple (GraphViz::FamilyTree::Couple)
58
- def couple( x, y )
58
+ def couple( x, y )
59
59
  @couples[x][y]
60
60
  end
61
-
61
+
62
62
  def method_missing(sym, *args, &block) #:nodoc:
63
63
  persons[sym.to_s]
64
64
  end
65
-
65
+
66
66
  # Family size
67
67
  def size
68
68
  @persons.size
69
69
  end
70
-
70
+
71
71
  # Get the graph
72
72
  def graph
73
73
  maxY = @generations.size
74
74
  biggestGen, maxX = biggestGenerationNumberAndSize
75
-
75
+
76
76
  puts "#{maxY} generations"
77
77
  puts "Plus grosse generation : ##{biggestGen} avec #{maxX} personnes"
78
-
78
+
79
79
  puts "traitement des générations..."
80
-
80
+
81
81
  puts " #{biggestGen}:"
82
82
  @generations[biggestGen].persons.each do |id, person|
83
83
  puts " - #{id} : #{person.class}"
84
84
  end
85
-
85
+
86
86
  puts " Up..."
87
87
  (0...biggestGen).reverse_each do |genNumber|
88
88
  puts " #{genNumber}:"
@@ -98,10 +98,10 @@ class GraphViz
98
98
  puts " - #{id} : #{person.class}"
99
99
  end
100
100
  end
101
-
101
+
102
102
  @graph
103
103
  end
104
-
104
+
105
105
  private
106
106
  def biggestGenerationNumberAndSize
107
107
  size = 0