class FamilyReunion::TopNode
Attributes
data[R]
Public Class Methods
new(data)
click to toggle source
# File lib/family-reunion/top_node.rb, line 5 def initialize(data) @data = data @valid_names_hash = nil @valid_names_duplicates = nil @synonyms_hash = nil @ids_hash = nil @paths_hash = nil end
Public Instance Methods
ids_hash()
click to toggle source
# File lib/family-reunion/top_node.rb, line 48 def ids_hash return @ids_hash if @ids_hash @ids_hash = valid_names_hash.inject({}) do |res, key_val| res[key_val[1][:id].to_s.to_sym] = key_val[1] res end data[:empty_nodes].each do |node| @ids_hash[node[:id].to_s.to_sym] = node end @ids_hash end
paths_hash()
click to toggle source
# File lib/family-reunion/top_node.rb, line 41 def paths_hash unless @paths_hash valid_names_hash end @paths_hash end
populate_paths_hash(path, path_ids)
click to toggle source
# File lib/family-reunion/top_node.rb, line 87 def populate_paths_hash(path, path_ids) name = path[-1] unless @paths_hash[name] @paths_hash[name] = [path.dup, path_ids.dup] end end
root_paths()
click to toggle source
# File lib/family-reunion/top_node.rb, line 94 def root_paths unless @root_name && @root_id @root_id = data[:leaves][0][:path_ids][0].to_s.to_sym @root_name = data[:leaves][0][:path][0] end [[@root_name], [@root_id]] end
synonyms_hash()
click to toggle source
# File lib/family-reunion/top_node.rb, line 60 def synonyms_hash return @synonyms_hash if @synonyms_hash @synonyms_hash = {} @valid_names_hash.keys.each do |name| synonyms = @valid_names_hash[name][:synonyms] synonyms.each do |syn| @synonyms_hash.has_key?(syn[:canonical_name]) ? @synonyms_hash[syn[:canonical_name]] << @valid_names_hash[name] : @synonyms_hash[syn[:canonical_name]] = [@valid_names_hash[name]] end end @synonyms_hash end
update_paths_hash(node)
click to toggle source
# File lib/family-reunion/top_node.rb, line 77 def update_paths_hash(node) path = node[:path].map { |n| n.to_sym } path_ids = node[:path_ids].map { |i| i.to_s.to_sym } until path.empty? populate_paths_hash(path, path_ids) path.pop path_ids.pop end end
valid_names_duplicates()
click to toggle source
# File lib/family-reunion/top_node.rb, line 72 def valid_names_duplicates valid_names_hash unless @valid_names_duplicates @valid_names_duplicates end
valid_names_hash()
click to toggle source
# File lib/family-reunion/top_node.rb, line 14 def valid_names_hash return @valid_names_hash if @valid_names_hash #TODO: make it more robust for situations with exceptions etc. @valid_names_duplicates = {} @valid_names_hash = {} @paths_hash = {} @data[:leaves].each do |row| canonical = row[:valid_name][:canonical_name] update_paths_hash(row) if @valid_names_hash.has_key?(canonical) if @valid_names_duplicates.has_key?(canonical) @valid_names_duplicates[canonical] << row else @valid_names_duplicates[canonical] = [row] end else @valid_names_hash[canonical] = row end end @valid_names_duplicates.keys.each do |k| @valid_names_duplicates[k] << @valid_names_hash.delete(k) end data[:empty_nodes].each do |row| update_paths_hash(row) end @valid_names_hash end