class MailProvider::Trie

Attributes

name[R]

Public Class Methods

base_for(name, directory) click to toggle source
# File lib/mail_provider/trie.rb, line 18
def self.base_for(name, directory)
  File.join(directory, "#{name}.dump")
end
create(name, entries, opts = {}) click to toggle source
# File lib/mail_provider/trie.rb, line 5
def self.create(name, entries, opts = {})
  new(name).tap do |trie|
    entries.each { |key, val| trie.put! key, val }
    trie.save opts[:directory]
  end
end
load(name, opts = {}) click to toggle source
# File lib/mail_provider/trie.rb, line 12
def self.load(name, opts = {})
  new(name).tap do |trie|
    trie.load opts[:directory]
  end
end
new(name) click to toggle source
# File lib/mail_provider/trie.rb, line 24
def initialize(name)
  @name = name
  @native = Hamster::Trie.new(0)
end

Public Instance Methods

ending_with(str) click to toggle source
# File lib/mail_provider/trie.rb, line 40
def ending_with(str)
  entries { |en| en.end_with?(str) }
end
entries()
Alias for: entries_where
entries_where() { |en| ... } click to toggle source
# File lib/mail_provider/trie.rb, line 29
def entries_where
  selected = []
  @native.each { |en| selected << en if !block_given? || yield(en[0]) }
  selected.sort_by(&:last).to_h
end
Also aliased as: entries
load(directory) click to toggle source
# File lib/mail_provider/trie.rb, line 48
def load(directory)
  base = self.class.base_for(@name, directory)
  unless File.exist?(base)
    raise TrieLoadError, "Saved trie does not exist at: #{base}"
  end

  @native = Hamster::Trie[Marshal.load(File.read(base))]
end
matching(regex) click to toggle source
# File lib/mail_provider/trie.rb, line 36
def matching(regex)
  entries { |en| en =~ regex }
end
method_missing(m, *a, &b) click to toggle source
Calls superclass method
# File lib/mail_provider/trie.rb, line 62
def method_missing(m, *a, &b)
  return @native.send(m, *a, &b) if @native.respond_to?(m, true)

  super
end
respond_to_missing?(m, *a, &b) click to toggle source
Calls superclass method
# File lib/mail_provider/trie.rb, line 68
def respond_to_missing?(m, *a, &b)
  @native.respond_to?(m, *a, &b) || super
end
save(directory) click to toggle source
# File lib/mail_provider/trie.rb, line 57
def save(directory)
  base = self.class.base_for(@name, directory)
  File.open(base, 'wb') { |f| f.write Marshal.dump(entries) }
end
starting_with(str) click to toggle source
# File lib/mail_provider/trie.rb, line 44
def starting_with(str)
  entries { |en| en.start_with?(str) }
end