Zuordnung von Orten der Anfrage zu `Nodes`
@kenoboss @milenaduerr @Bierbuero @siwer
TL;DR:
Nach dem Parsen der Anfrage haben wir zwar String Repräsentationen von Start und Ziel, diese müssen aber noch den eigentlichen nodes unseres campusgraphen zugeordnet werden. Wir müssen uns darüber verständigen, wie das geschehen soll.
Persönlich denke ich, dass sich der größte Teil unseres Codes nicht mehr damit auseinander zu setzen haben sollte, in welcher Form der Campusgraph abgespeichert ist (XML), sondern auf eine interne Datenstruktur zurückgreifen sollte (separation of concerns). Wir können auch die nokogiri-Elemente quer durch unsere Methoden durchreichen, aber damit binden wir uns sehr an diese Library und daran, dass wir unsere Daten immer in einer XML-Datei abgespeichert haben werden.. Keine Ahnung ob das perspektivisch ein Problem werden könnte.
Ich stelle mir den Kontrollfluss folgendermaßen vor:
- Sobald lita das
:loadedEvent feuert, rufen wir eine Methodeload_graph_from_xml, die das XML einliest und abspeichert. - Sobald ein User Befehl hereinkommt, extrahiert die Abfrage-Methode Start und Ziel. Dafür existiert grundlegender Code der Anfragegruppe.
- Eine Methode
get_nodes(start_string, target_string)schlägt in unserer Datenstruktur nach, welche Nodes gemeint sind (oder seien könnten). Für's erste könnten wir fordern, dass der Beschreibungstext und/oder der Node Name buchstäblich in der Anfrage vorkommen müssen. Perspektivisch sollten wir wahrscheinlich eine cleverere Methode benutzen. - Die beiden Nodes reichen wir an eine Methode
get_pathweiter, die den kürzesten Pfad aus unserer Graph-Datenstruktur ermittelt. Dafür habe ich bereits funktionierenden Code. - Die Liste von Knoten, die den kürzesten Pfad darstellt, geht weiter an die Ausgabe-Methode. Jedes Element in dieser Liste bietet über Attribute
:descriptionund:typeZugriff auf die Informationen, die ursprünglich im XML abgelegt waren und die die Antwortgruppe zum Füllen ihrer Schablonen braucht. Den existierenden Code könnten wir entsprechend vereinfachen, weil nokogiri nicht mehr direkt benutzt werden muss.
Zur Pfadsuche schreib ich gleich noch etwas in einem separaten Issue. Ich freu mich auf eure Einschätzungen! :)
Zu den default events von lita (wie loaded) findet ihr hier weitere Informationen.
Zu 1: wir müssen litas event system gar nicht benutzen. Es reicht schon, den constructor unseres Handlers zu ergänzen.
Zu 2, 3: Wir haben uns in der letzten Sitzung darauf verständigt, fürs erste nur genaue Treffer der Node-Beschreibungen in unseren Anfragen zu akzeptieren. Die Regex passt alllerdings noch nicht auf unsere Daten. (@kenoboss)
Zu 4, 5: Ist vorbereitet, siehe auch ben-tinc@4a085f3269c4ea249ca837af2b95fe7b81f36ad7
@ben-tinc https://github.com/kenoboss/chatbot2/commit/42db69ae8d63d30b3dcc4633d59baa50d454763a
sollte jetzt funktionieren