Class: Lingo::Attendee::Debugger

Inherits:
Lingo::Attendee show all
Defined in:
lib/lingo/attendee/debugger.rb

Overview

– Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom eingeschleust werden, um Schritt für Schritt zu schauen, durch welchen Attendee das Ergebnis verfälscht wird um so den Fehler einzugrenzen und schließlich zu lösen.

Der Debugger wird jedoch auch gerne für die Verfolgung der Verarbeitung am Bildschirm verwendet.

Achtung: Um Irritationen bei der Anwendung mehrerer Debugger zu vermeiden wird empfohlen, den Debugger in der Konfiguration immer unmittelbar nach dem Attendee zu platzieren, dessen Ausgabe debugt werden soll. Ansonsten kann es zu scheinbar unerklärlichen Interferrenzen bei der Ausgabe kommen.

Mögliche Verlinkung

Erwartet

Daten beliebigen Typs

Parameter

Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.

in

siehe allgemeine Beschreibung des Attendee

out

siehe allgemeine Beschreibung des Attendee

eval

(Standard: true) Gibt eine Bedingung an, die erfüllt sein muss, damit ein Datenobjekt ausgegeben wird (siehe Beschreibung Objectfilter)

ceval

(Standard: true) Gibt eiune Bedingung an, die erfüllt sein muss, damit ein

Kommandoobjekt ausgegeben wird.
prompt

(Standard: ‘lex:) ’) Gibt an, mit welchem Prefix die Ausgabe versehen werden soll. Insbesondere wenn mit mehreren Debuggern gearbeitet wird, sollte dies genutzt werden.

Beispiele

Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des Textwriters mit der Ablaufkonfiguration t1.cfg

meeting:
  attendees:
    - text_reader: { out: lines, files: '$(files)' }
    - debugger:    { in: lines, prompt: 'LINES:) ' }
    - tokenizer:   { in: lines, out: token }
    - debugger:    { in: token, prompt: 'TOKEN:) ' }

ergibt die Ausgabe

LINES:)  *FILE('test.txt')
TOKEN:)  *FILE('test.txt')
LINES:)  "Der Debugger kann was."
TOKEN:)  :Der/WORD:
TOKEN:)  :Debugger/WORD:
TOKEN:)  :kann/WORD:
TOKEN:)  :was/WORD:
TOKEN:)  :./PUNC:
TOKEN:)  *EOL('test.txt')
LINES:)  "Lingo auch :o)"
TOKEN:)  :Lingo/WORD:
TOKEN:)  :auch/WORD:
TOKEN:)  ::/PUNC:
TOKEN:)  :o/WORD:
TOKEN:)  :)/OTHR:
TOKEN:)  *EOL('test.txt')
LINES:)  *EOF('test.txt')
TOKEN:)  *EOF('test.txt')

++

Direct Known Subclasses

DebugFilter

Constant Summary

Constants inherited from Lingo::Attendee

DEFAULT_SKIP, TERMINALS

Constants included from Language

Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_ABBREVIATION, Language::TA_HELP, Language::TA_HTML, Language::TA_NUMBER, Language::TA_OTHER, Language::TA_PUNCTUATION, Language::TA_SKIP, Language::TA_SPACE, Language::TA_URL, Language::TA_WIKI, Language::TA_WORD, Language::WA_COMPOUND, Language::WA_IDENTIFIED, Language::WA_MULTIWORD, Language::WA_SEQUENCE, Language::WA_UNKMULPART, Language::WA_UNKNOWN, Language::WA_UNSET

Instance Attribute Summary

Attributes inherited from Lingo::Attendee

#lingo, #subscribers

Instance Method Summary collapse

Methods inherited from Lingo::Attendee

#command, #forward, #initialize

Constructor Details

This class inherits a constructor from Lingo::Attendee

Instance Method Details

#control(cmd, param = nil) ⇒ Object



107
108
109
110
111
112
113
# File 'lib/lingo/attendee/debugger.rb', line 107

def control(cmd, param = nil, *)
  if @cmd_eval
    debug(eval(@cmd_eval)) { "*#{cmd}('#{param}')" }
  elsif cmd == :EOL
    :skip_command
  end
end

#init(default_prompt = 'lex:) ') ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/lingo/attendee/debugger.rb', line 94

def init(default_prompt = 'lex:) ')
  @prompt = get_key('prompt', default_prompt)

  unless @filter ||= get_key('filter', false)
    @cmd_eval = get_key('ceval', 'true')
  else
    @cmd_eval = nil
  end

  @obj_eval = get_key('eval', 'true')
  @preamble = get_key('preamble', true)
end

#process(obj) ⇒ Object



115
116
117
118
# File 'lib/lingo/attendee/debugger.rb', line 115

def process(obj, *)
  debug(eval(@obj_eval)) { obj.inspect }
  forward(obj) unless @filter
end