class Nutmeg::TreeFromJson
Attributes
base_tree[RW]
tag_tree[RW]
tree[RW]
tree_hash[RW]
Public Class Methods
new(data)
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 5 def initialize(data) @data = JSON.load(data) @base_tree = @data @tag_tree = Tree::TreeNode.new("ROOT", {:tag => "root",:otag => "root", :level => nil, :slug => "root"}) base_tree.each do |node| node_tree = @tag_tree << Tree::TreeNode.new(node["id"], node_hash(node)) build_node(node_tree, node) end @tree = Nutmeg::TagTree.new(@tag_tree) nil end
Private Instance Methods
build_node(parent, node)
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 28 def build_node(parent, node) # puts "Building node #{node['id']}" # puts "====" #puts node["children"].map{|d| d["id"]} node["children"].each do |child| #puts "Adding #{child['id']} to #{node['id']}" node_tree = parent << Tree::TreeNode.new(child["id"], node_hash(child)) build_node(node_tree, child) end end
get_children(parent, level)
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 46 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_json.rb, line 40 def get_levels @levels = @tree_hash.collect do |tag| tag[:level] end.uniq.sort end
node_hash(node)
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 18 def node_hash(node) { :tag_id => node["data"]["id"], :tag => node["id"], :slug => node["data"]["slug"], :name => node["data"]["name"], :description => node["data"]["description"] } end
traverse_tree()
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 50 def traverse_tree base_tree.each do |node| walk(node.symbolize_keys!) end end
walk(array, level = 0, parent = nil)
click to toggle source
# File lib/nutmeg/tree_from_json.rb, line 56 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