Class: Lingo::Database::Source::MultiKey

Inherits:
Lingo::Database::Source show all
Defined in:
lib/lingo/database/source/multi_key.rb

Overview

– Abgeleitet von Source behandelt die Klasse Dateien mit dem Format MultiKey. Eine Zeile "Triumph;Sieg;Erfolg\n" wird gewandelt in [ 'triumph', ['sieg', 'erfolg'] ]. Die Sonderbehandlung erfolgt in der Methode Database#convert, wo daraus Schlüssel-Werte-Paare in der Form [ 'sieg', ['triumph'] ] und [ 'erfolg', ['triumph'] ] erzeugt werden. Der Trenner zwischen Schlüssel und Projektion kann über den Parameter separator geändert werden. ++

Constant Summary collapse

DEFAULT_SEPARATOR =
';'.freeze

Constants inherited from Lingo::Database::Source

DEFAULT_DEF_WC, LEXICAL_SEPARATOR, MAX_LENGTH

Instance Attribute Summary

Attributes inherited from Lingo::Database::Source

#pos

Instance Method Summary collapse

Methods inherited from Lingo::Database::Source

#each, #each_dump, #each_lexical, #each_line, from_config, from_id, lexicals, #rejected, #size

Constructor Details

#initializeMultiKey

Returns a new instance of MultiKey.



45
46
47
48
# File 'lib/lingo/database/source/multi_key.rb', line 45

def initialize(*)
  super
  @pat = /^#{@wrd}(?:#{Regexp.escape(@sep)}#{@wrd})*$/
end

Instance Method Details

#dump_line(key, val, sep = @sep) ⇒ Object



60
61
62
# File 'lib/lingo/database/source/multi_key.rb', line 60

def dump_line(key, val, sep = @sep, *)
  val.map(&:form).unshift(key).join(sep)
end

#parse_line(line, key, val) ⇒ Object



55
56
57
58
# File 'lib/lingo/database/source/multi_key.rb', line 55

def parse_line(line, key, val)
  values = line.split(@sep).each(&:strip!)
  [values.shift, values]
end

#set(db, key, val) ⇒ Object



50
51
52
53
# File 'lib/lingo/database/source/multi_key.rb', line 50

def set(db, key, val)
  key = lexical(key, @def) if @def
  val.each { |v| db[v] = [key] }
end