class Lingo::Language::LexicalHash

Die Klasse LexicalHash ermöglicht den Zugriff auf die Lingodatenbanken. Im Gegensatz zur Klasse Database, welche nur Strings als Ergebnis zurück gibt, wird hier als Ergebnis ein Array von Lexical-Objekten zurück gegeben.

Public Class Methods

new(id, lingo) click to toggle source
# File lib/lingo/language/lexical_hash.rb, line 45
def initialize(id, lingo)
  init_cachable
  init_reportable(id)

  @wc  = lingo.database_config(id).fetch('def-wc', LA_UNKNOWN)
  @src = Database.open(id, lingo)
end
open(*args) { |lexical_hash = new(*args)| ... } click to toggle source
# File lib/lingo/language/lexical_hash.rb, line 39
def self.open(*args)
  yield lexical_hash = new(*args)
ensure
  lexical_hash.close if lexical_hash
end

Public Instance Methods

[](key) click to toggle source
# File lib/lingo/language/lexical_hash.rb, line 57
def [](key)
  inc('total requests')
  key = key.downcase

  if hit?(key)
    inc('cache hits')
    return retrieve(key)
  end

  inc('source reads')

  if record = @src[key]
    record = record.map { |str|
      case str
        when %r^\*\d+$/           then str
        when %r^#(.)$/            then Lexical.new(key, $1)
        when %r^([^#]+?)\s*#(.)$/ then Lexical.new($1, $2)
        when %r^([^#]+)$/         then Lexical.new($1, @wc)
        else                          str
      end
    }

    record.compact!
    record.sort!
    record.uniq!

    inc('data found')
  end

  store(key, record)
end
close() click to toggle source
# File lib/lingo/language/lexical_hash.rb, line 53
def close
  @src.close
end