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