Tunnel
Ein Tunnel ist eine Reise, die in Schritte unterteilt ist – eine Anmeldung, ein Checkout, eine Verlängerung – deren Weg sich je nach den Antworten des Besuchers ändern kann. Das Paket merkt sich, wo jeder Besucher steht, lässt sie durch die Schritte gehen, die sie sehen können, und schickt sie dorthin zurück, wo sie hingehören, wenn sie versuchen, voranzuspringen.
Ein Baum von Cursorn
Ein Tunnel wird als Baum aufgebaut, nicht als Liste. Ein Schritt, der von zwei Stellen erreicht wird, ist zwei Cursors, jeder mit seinem eigenen Hash und seinen eigenen gespeicherten Werten: das ermöglicht es einem Ast, Schritte zu wachsen, die ein anderer nicht hat, und der Weg, den du gekommen bist, wird am Ende jedes Tunnels abgelesen.
Eine Sitzung in der Datenbank
Das Öffnen eines Tunnels erstellt eine Sitzung, die die Browsersitzung nur durch ihre ID kennt. Sie enthält die Werte, die die Schritte speichern, und läuft einen Tag nach dem letzten angezeigten Schritt ab – oder früher, wenn dieser Schritt danach fragt. Abgelaufene Sitzungen werden vom Scheduler alle 15 Minuten gelöscht; abgeschlossene und ausstehende werden behalten.
Wohin der Besucher gehen kann
Jeder Schritt entscheidet, ob er angezeigt werden kann und wohin der Besucher andernfalls geschickt wird. Links und Schaltflächen werden nach den gleichen Regeln gezeichnet, sodass ein Link niemals zu einer Umleitung zurückführt: kein nächster Button, wo der Weg sich teilt, kein Weg zurück über eine Zahlung, nichts, zu dem man in einer geschlossenen Sitzung zurückkehren könnte.