class GraphViz::FamilyTree
Public Class Methods
new( &block )
click to toggle source
Create a new family tree
require 'graphviz/family_tree' t = GraphViz::FamilyTree.new do ... end
# File lib/graphviz/family_tree.rb, line 17 def initialize( &block ) @persons = {} @graph = GraphViz.new( "FamilyTree", :use => :neato ) @generation_number = 0 @generations = [] @couples = {} instance_eval(&block) if block end
Public Instance Methods
couple( x, y )
click to toggle source
Get a couple (GraphViz::FamilyTree::Couple
)
# File lib/graphviz/family_tree.rb, line 57 def couple( x, y ) @couples[x][y] end
generation( &b )
click to toggle source
Add a new generation in the tree
require 'graphviz/family_tree' t = GraphViz::FamilyTree.new do generation do ... end generation do ... end end
# File lib/graphviz/family_tree.rb, line 38 def generation( &b ) gen = GraphViz::FamilyTree::Generation.new( @graph, @persons, self, @generation_number ) gen.make( &b ) @generations << gen @generation_number += 1 end
graph()
click to toggle source
Get the graph
# File lib/graphviz/family_tree.rb, line 71 def graph maxY = @generations.size biggestGen, maxX = biggestGenerationNumberAndSize puts "#{maxY} generations" puts "Plus grosse generation : ##{biggestGen} avec #{maxX} personnes" puts "traitement des générations..." puts " #{biggestGen}:" @generations[biggestGen].persons.each do |id, person| puts " - #{id} : #{person.class}" end puts " Up..." (0...biggestGen).reverse_each do |genNumber| puts " #{genNumber}:" @generations[genNumber].persons.each do |id, person| puts " - #{id} : #{person.class}" end end puts " Down..." ((biggestGen+1)...maxY).each do |genNumber| puts " #{genNumber}:" @generations[genNumber].persons.each do |id, person| puts " - #{id} : #{person.class}" end end @graph end
size()
click to toggle source
Family size
# File lib/graphviz/family_tree.rb, line 66 def size @persons.size end
Private Instance Methods
biggestGenerationNumberAndSize()
click to toggle source
# File lib/graphviz/family_tree.rb, line 105 def biggestGenerationNumberAndSize size = 0 number = 0 @generations.each do |gen| if gen.size > size size = gen.size number = gen.number end end return number, size end