Software Challenge : Umfragen

Um Umfragen in der Webapp umzusetzen verwenden wir nun das Surveyor-Gem welches aktuell noch sehr aktiv weiterentwickelt wird.

Eine neue Umfrage erstellen

Umfragen werden in einer Domain Specific Language beschrieben. Ein gutes Beispiel mit einer Übersicht der Möglichkeiten kann man unter unter "/surveys/kitchen_sink_survey.rb" finden. Neue Umfragen können um "/surveys/" Folder erstellt werden. Die neu erstellt Umfrage kann man mit diesem Rake-Task importieren:

RAILS_ENV=<Umgebung> bundle exec rake surveyor FILE=surveys/<Dateiname>.rb

ist natürlich durch "development", "staging" oder "production" zu ersetzen und durch den entsprechenden Namen.

Konkrete Anleitung zur Erstellung der Umfragen für eine neue Saison

  1. Die beiden Umfragespezifikationen im Verzeichnis surveys aus dem letzten Jahr kopieren. Im Namen die Jahreszahl anpassen.
  2. In den Dateien mindestens die Jahreszahl überall ersetzen.
  3. Eventuell die Fragen aktualisieren
  4. Änderungen deployen
  5. bundle exec rake surveyor FILE=surveys/<Dateiname>.rb für jede Datei auf dem Produktivsystem ausführen
  6. Anwendung neu starten (sonst bekommt man beim Auswaehlen und Speichern der Umfragen fuer eine Saison "ungueltiger Wert" Fehler): touch tmp/restart.txt
  7. Umfragen sind jetzt für die neue Saison auswählbar

Eine Umfrage entfernen

Man kann Umfragen auch wieder aus dem System entfernen. Dies geschieht mit:

RAILS_ENV=<Umgebung> bundle exec rake surveyor:remove

Dabei können jedoch nur Umfragen ausgewählt werden, welche keine ResponseSets mehr besitzen.

Sollte man aus einer Umfrage die in der Datenbank gespeichert ist wieder ein DSL File erzeugen wollen, kann man verwenden:

RAILS_ENV=<Umgebung> rake surveyor:unparse

Das Surveyor Model

Ein UML Diagramm des Models kann man auf Github finden. Hier eine kurze Erläuterung der wichtigsten Grundeinheiten:

  • Survey: Ist die eigentliche Umfrage, also die Sammlung von Fragen usw. die das Ganze darstellt, was im DSL File gefunden wurde

  • ResponseSet: Wenn ein User die Umfrage bearbeitet, entsteht ein ResponseSet welches die Sammlung aller Antworten darstellt.

  • Response: Gehört zu einem ResponseSet und stellt die Verbindung zwischen Frage und Antwort auf diese dar.

Survey-Tokens

Ich habe ein Token-System implementiert, was es erlaubt an folgende Gruppen SurveyTokens auszugeben:

  • Voranmeldungen: Die Anmelder der vorangemeldeten Teams des Wettbewerbs, ist kein Team für eine Schule angemeldet, so erhält der Anmelder der Schule ein Token

  • Personen: Die ausgewählten Personen erhalten jeweils ein Token

  • Teams: Das ausgewählte Team erhält jeweils X-Tokens. Dabei kann definiert werden, ob Schüler, Lehrer oder Tutoren Zugriff auf dieses Token haben.

Ein Token verbindet jeweils einen token_owner, dem dieses zugeteilt ist mit einer Umfrage. Es hält das entsprechende ResponseSet vor, wenn eins vorhanden ist und definiert von welcher Person die Umfrage absolviert wurde. Außerdem kann ein Token einen Gültigkeitszeitraum besitzen. Somit berechtigt 1 Token immer nur dazu 1x an einer Umfrage teilzunehmen.

Umfrage-Ergebnisse

Als Administrator hat man unter Administration/Umfrage-Ergebnisse einen Überblick über die Umfragen und die entsprechenden Ergebnisse. In der Detailansicht für die Ergebnisse eines SurveyTokens erhält man standardmäßig eine Tabelle, welche durch das Partial "app/views/surveyresults/result.erb" dargestellt wird. Möchte man eine neue Ansicht, z.B. mittels Javascript für eine entsprechende Umfrage erstellen, so kann man einfach ein entsprechend benanntes Partial erstellen: "app/views/survey_results/.erb" Als Name wir der access_code des Surveys verwendet, wobei "-" durch "" ersetzt wird.