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.
# 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
# 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
# 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
# File lib/lingo/language/lexical_hash.rb, line 53 def close @src.close end