class Nutmeg::TreeFromYaml
Attributes
base_tree[RW]
tag_tree[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