class Nutmeg::TreeFromYaml

Attributes

base_tree[RW]
tag_tree[RW]
tags[RW]
tree[RW]
tree_hash[RW]

Public Class Methods

new(params) click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 5
def initialize(params)
  @data = YAML.load_file(params[:file])
  @tags = @data["tags"]
  @base_tree = @data["tree"]
  @tree_hash = []
  traverse_tree
  get_levels
  @tag_tree = Tree::TreeNode.new("ROOT", {:tag => "root",:otag => "root", :level => nil, :slug => "root"})
  @tree_hash.select{|node|node[:level] == 0}.each do |node|
    node_tree = @tag_tree << Tree::TreeNode.new("tag_#{node[:tag]}_#{node[:level]}_root", node)
    build_node(node_tree, node)
  end
  @tree = Nutmeg::TagTree.new(@tag_tree)
  nil
end

Private Instance Methods

build_node(start, node) click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 22
def build_node(start, node)
  get_children(node[:tag], node[:level]).each do |node|
    node_tree = start << Tree::TreeNode.new("tag_#{node[:tag]}", node)
    build_node(node_tree, node)
  end
end
get_children(parent, level) click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 35
def get_children(parent, level)
  @tree_hash.select{|node| node[:parent] == parent && node[:level] > level }
end
get_levels() click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 29
def get_levels
  @levels = @tree_hash.collect do |tag|
    tag[:level]
  end.uniq.sort
end
traverse_tree() click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 39
def traverse_tree
  base_tree.each do |l|
    walk(l,0,"root")
  end
end
walk(array, level = 0, parent = nil) click to toggle source
# File lib/nutmeg/tree_from_yaml.rb, line 45
def walk(array, level = 0, parent = nil)
  array.keys.each do |key|
    @tree_hash << {:tag => [key, level,parent].join("_"), :level => level, :parent => parent, :otag => key, :slug => @tags[key], :tag_id => key}
    return if array[key].nil?
    array[key].compact.each do |child|
      walk(child, level + 1, [key, level,parent].join("_"))
    end
  end
end