class TrieNode

Attributes

child_nodes[RW]
god_node[RW]
parent_node[RW]
value[RW]

Public Class Methods

create(word, parent_node=nil, god_node=nil) click to toggle source

has_many # belongs_to # belongs_to

# File lib/trie_node.rb, line 5
def self.create(word, parent_node=nil, god_node=nil) 
  if word.to_s.length < 1
    return nil
  else
    self.new(word, parent_node, god_node)
  end
end
new(word, parent_node=nil, god_node=nil) click to toggle source
# File lib/trie_node.rb, line 13
def initialize(word, parent_node=nil, god_node=nil)
  self.god_node = god_node
  self.child_nodes = []
  self.value = word[0]
  self.insert_word(word) if word.length > 1 
  self.parent_node = parent_node unless parent_node.nil?
end

Public Instance Methods

insert_letter(letter) click to toggle source
# File lib/trie_node.rb, line 47
def insert_letter(letter)
  if !(next_letter_node=self.child_nodes.find{|child_node| child_node.value == letter }).nil?
    return next_letter_node
  else
    new_node = TrieNode.create(letter, self, self.god_node)
    self.child_nodes << new_node if !new_node.nil?
    return new_node
  end
end
insert_word(word) click to toggle source
# File lib/trie_node.rb, line 33
def insert_word(word)
  return self if word.empty?
  letters = word.split('').map(&:strip)
  if self.value == letters.shift
    next_letter = letters[0]
    next_node = self.insert_letter(next_letter)
    return if next_node.nil?
    next_node.insert_word(letters.join(''))
  else
    puts "THIS WORD DOES NOT BELONG TO THIS TRIE"
    return
  end
end
to_a(base_word="") click to toggle source
# File lib/trie_node.rb, line 21
def to_a(base_word="")
  new_base = "#{base_word}#{self.value}" 
  return if base_word == new_base
  generated_words = self.child_nodes.map{|cd| cd.to_a(new_base) }
  self.god_node.generated_words << generated_words if !generated_words.empty?
  return new_base
end
to_h() click to toggle source
# File lib/trie_node.rb, line 29
def to_h
  {@value => @child_nodes.map(&:to_h).inject({}){|mem, hash| mem.merge!(hash) } }
end