Motivation und Hintergrund
Ich habe diese App gebaut als Pilotprojekt zum Erlernen von Ruby on Rails als neue Programmiersprache und neues Framework. Wer mir einen Hinweis zur App geben möchte, sei es funktionaler Art oder weil er einen Bug gefunden hat, ist herzlich eingeladen, mir eine Email zu schreiben an info@heiniger-net.ch.
In der App umgesetzte Features
- Modernes Frontend (Hotwire/Turbo/Stimulus): Hotwire und Turbo für reaktive Single-Page-App-Effekte, ohne schweres JavaScript.
- Eingabeformular und Validierung: Die Startseite hat ein Formular für die Erfassung von Vor- und Nachnamen und weiteren Angaben als Basis für die Analysen.
- Berechnungslogik als Service: Implementierung spezifischer numerologischer und kabbalistischer Zuordnungstabellen (Gematria) zur Ermittlung von Seelenzahl, Persönlichkeitszahl und Schicksalszahl.
- Reporting: Bereitstellung von detaillierten Deutungstexten und Analysen basierend auf den berechneten Werten in Teilscreens für verschiedene Aspekte, teilweise mit Tabellen.
- PDF-Export: Generierung eines Reports als PDF und herunterladen als File.
- ActiveRecord: Datenbank mit per Foreign Keys verknüpften Tabellen.
- CRUD: Gespeicherte Analysen können erstellt, gelesen, geändert und gelöscht werden.
- Authentifizierung: OAuth-Login via Google für den Benutzerzugang, inklusive Security-Gegenmassnahmen wie CSRF-Protection via omniauth-rails_csrf_protection.
- Zugriffsschutz und Berechtigung: Eingeloggte User können nur die eigenen früheren Analysen sehen, nicht die von anderen Usern.
- Build-Automatisierung (CI/CD): Aufsetzung einer Gitlab-Pipeline mit direktem Deployment auf einen Live-Server.
- Testing (RSpec & Capybara): Absicherung der Geschäftslogik und UI-Flows mit automatisierten Unit- und System-Tests.
- Rails 8 Background-Komponenten: Die modernen Core-Komponenten von Rails 8 solid_queue, solid_cache, solid_cable werden im Projekt eingesetzt.
Architektur
Das System folgt einer sauberen, losgekoppelten Schichtenarchitektur (Layered Architecture) innerhalb des Ruby-on-Rails-Monolithen, um Geschäftslogik, Datenhaltung und Benutzeroberfläche klar voneinander zu trennen.
- Presentation Layer (Präsentationsschicht): Verantwortlich für das Rendering der Benutzeroberfläche und die Darstellung der Ergebnisse. Neben klassischen Views beinhaltet diese Schicht auch die Template-Engine für den PDF-Export, damit Nutzer ihre Analysen in einem sauberen Format herunterladen können.
- Controller Layer (Steuerungsschicht): Nimmt die HTTP-Requests entgegen, steuert den Programmfluss und delegiert die Aufgaben. Hier ist unter anderem der Google-OAuth-Login integriert, der die sichere Authentifizierung der Nutzer über externe Provider abwickelt.
- Service Layer (Logik-Schicht / Fachlichkeit): Das Herzstück für die Domain-Logik. Um die Controller schlank zu halten (“Skinny Controllers, Fat Models/Services”), sind die komplexen mathematisch-kabbalistischen Berechnungsvorschriften (Gematria-Algorithmen) in eigene Service-Klassen ausgelagert.
- Model und Persistence Layer (Datenhaltungsschicht): Nutzt ActiveRecord als Object-Relational Mapper (ORM). Hier wird die objektorientierte Welt auf die relationale Datenbank abgebildet. Kernstück ist das ERM (Entity-Relationship-Model) mit zwei fachlich verknüpften Tabellen über Foreign Keys (z. B. die Verknüpfung von Benutzern mit ihren gespeicherten Analysen/Historien).
- Database Layer (Datenbankschicht): Die physische Speicherung der Daten in einer relationalen Datenbank (PostgreSQL/SQLite), gewährleistet durch standardkonforme Migrationen.

MVC
Das Model-View-Controller-Prinzip, mit dem Ruby-on-Rails arbeitet, funktioniert so:

State Engine
Das Erfassungsformular des Hauptbildschirms wird gemäss dieser State Engine mit Daten vorausgefüllt: