1
0
mirror of https://github.com/projekteuler/projekteuler.git synced 2025-12-10 08:46:41 +01:00

Add about pages

This commit is contained in:
Philipp Fischbeck 2017-11-24 14:26:48 +01:00
parent 703975adf5
commit f5d0e721a1
22 changed files with 364 additions and 24 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the About controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -22,3 +22,127 @@
.turbolinks-progress-bar {
background-color: $brand-primary;
}
/* Sticky footer styles
-------------------------------------------------- */
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 40px;
background-color: #f5f5f5;
}
.container .text-muted {
margin: 10px 0;
}
/* Custom css for fixing styles within problem content */
.problem-content blockquote {
margin: 0px;
font-size: 14px;
border-left: medium none;
}
.problem-content div {
margin: 0px 0px 10px;
}
.problem-content table {
border-collapse: separate;
border-spacing: 2px;
}
.problem-content td {
padding: 1px;
}
/* Side notes for calling out things
-------------------------------------------------- */
/* Base styles (regardless of theme) */
.bs-callout, .problem-content > .info:first-child, .problem-content > .info:last-child{
margin: 20px 0;
padding: 15px 30px 15px 15px;
border-left: 5px solid #eee;
}
.bs-callout h1,
.bs-callout h2,
.bs-callout h3,
.bs-callout h4,
.bs-callout h5,
.bs-callout h6 {
margin-top: 0;
}
.bs-callout-danger h1,
.bs-callout-danger h2,
.bs-callout-danger h3,
.bs-callout-danger h4,
.bs-callout-danger h5,
.bs-callout-danger h6 {
color: #B94A48;
}
.bs-callout-warning h1,
.bs-callout-warning h2,
.bs-callout-warning h3,
.bs-callout-warning h4,
.bs-callout-warning h5,
.bs-callout-warning h6 {
color: #C09853;
}
.bs-callout-info h1,
.bs-callout-info h2,
.bs-callout-info h3,
.bs-callout-info h4,
.bs-callout-info h5,
.bs-callout-info h6 {
color: #3A87AD;
}
.bs-callout-success h1,
.bs-callout-success h2,
.bs-callout-success h3,
.bs-callout-success h4,
.bs-callout-success h5,
.bs-callout-success h6 {
color: #3C763D;
}
.bs-callout p:last-child {
margin-bottom: 0;
}
.bs-callout code,
.bs-callout .highlight {
background-color: #fff;
}
/* Themes for different contexts */
.bs-callout-danger {
background-color: #fcf2f2;
border-color: #dFb5b4;
}
.bs-callout-warning {
background-color: #fefbed;
border-color: #f1e7bc;
}
.bs-callout-info, .problem-content > .info:first-child, .problem-content > .info:last-child {
background-color: #f0f7fd;
border-color: #d0e3f0;
}
.bs-callout-success {
background-color: #dff0d8;
border-color: #d6e9c6;
}

View File

@ -0,0 +1,16 @@
class AboutController < ApplicationController
def index
end
def info
end
def copyright
end
def legal
end
def roman_numerals
end
end

View File

@ -3,6 +3,7 @@ class ProblemsController < ApplicationController
def index
@problems = Problem.paginate(page: params[:page]).includes(:translation)
@translated_percentage = 100 * Problem.translated_count / Problem.count
end
def show

View File

@ -0,0 +1,2 @@
module AboutHelper
end

View File

@ -11,11 +11,14 @@ class Problem < ApplicationRecord
!!self.translation
end
def original_url
"https://projecteuler.net/problem=#{self.id}"
end
def self.translated_count
Problem.count(:translation_id)
end
def self.update_count(new_count)
old_count = Problem.count
raise ArgumentError, "new count has to be larger than old count" if new_count < old_count

View File

@ -0,0 +1,30 @@
<% provide(:title, 'Copyright') %>
<div class="page-header"><h1>Copyright</h1></div>
<div class="bs-callout bs-callout-info">Dieser Artikel dient gleichzeitig der Übersetzung der <a href="https://projecteuler.net/copyright">"Copyright Information" auf projecteuler.net</a> sowie der tatsächlich geltenden Copyright-Informationen für diese Seite.</div>
<h2>Kann ich die Probleme woanders benutzen?</h2>
<p>Ja! Es ist nicht nur erlaubt, sondern beherzt, das Material zu teilen und frei zu benutzen - für nichtkommerzielle Zwecke. Aber bitte lesen Sie weiter...<br />
<br />
Alle Probleme wurden von einer Vielzahl von Quellen gesammelt: Einige basieren auf interessanten Teilergebnissen von größeren mathematischen Theoremen, andere sind Variationen von klassischen Problemen, der Rest gilt als originell. Die Hauptmission von Project Euler ist es, hochqualitative Probleme zur Verfügung zu stellen, und zwar um sowohl zum Lernen zu motivieren als auch um in einem angenehmen Kontext herauszufordern.
Ebenso ist es die Mission von projekteuler.de, diese Probleme in der deutschen Sprache frei zur Verfügung zu stellen und sie so einem noch breiteren Publikum zu präsentieren.
</p>
<h2>Gibt es Einschränkungen?</h2>
<p>
Viel Aufwand und Gedanken wurden in das Design jedes Problems gesteckt, und in diesem Sinne sind alle Materialien neu und orginell. Daher dürfen die Probleme nicht für kommerzielle Zwecke benutzt werden. Dies gilt sowohl für die Original-Probleme auf projecteuler.net als auch die Übersetzungen auf projekteuler.de.
</p>
<h2>Muss ich Attribution (Namensnennung) zeigen?</h2>
<p>
Dieses Problem ist eher eine Sache der Höflichkeit. Es steht Ihnen komplett frei, das Material zu benutzen, wie es ist, oder es zu adaptieren. Wenn Sie sich entscheiden, den Inhalt so zu übernehmen, wie er auf der Webseite ist, könnten Sie etwas schreiben wie "Das folgende Problem stammt von Project Euler / projekteuler.de". Wenn Sie sich entscheiden, das Problem zu verändern, könnten Sie etwas schreiben wie "Das folgende Problem wurde inspiriert von Problem xxx auf Project Euler / projekteuler.de".
</p>
<h2>Gibt es einen Weg, direkt zu einem bestimmten Problem zu verlinken?</h2>
<p>Sie können zum Problem xxx mit der folgenden URI auf projecteuler.net verlinken:</p>
<pre>https://projecteuler.net/problem=xxx</pre>
<p>Ebenso können Sie zu der entsprechenden Übersetzung mit folgender URI verlinken:</p>
<pre>http://projekteuler.de/problems/xxx</pre>
<h2>Kann ich genauere Informationen zum Copyright erhalten?</h2>
<p>Der Inhalt von projecteuler.net ist lizenziert unter einer Creative Commons Lizenz:<br />
Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales.</p>
<p>Sie können entweder die <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/deed.de">Creative Commons Deed</a> (Zusammenfassung) oder den <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/legalcode">Legal Code</a> (Komplette Lizenz) lesen.</p>
<p>Der Inhalt dieser Seite (projekteuler.de) ist unter einer neueren Version derselben Creative Commons Lizenz lizenziert:<br />
Attribution-NonCommercial-ShareAlike 4.0 International.</p>
<p>Auch hier können Sie entweder die <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de">Creative Commons Deed</a> (Zusammenfassung) oder den <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode">Legal Code</a> (Komplette Lizenz) lesen.</p>

View File

@ -0,0 +1,35 @@
<div class="jumbotron">
<div class="container">
<h1>Willkommen auf Projekt Euler!</h1>
<p>Diese Seite ist eine Übersetzung der englischen Rätsel-Webseite <a href="https://projecteuler.net/">projecteuler.net</a>.</p>
<p>
<%= link_to about_info_path, class: 'btn btn-primary btn-lg' do %>
Mehr erfahren &raquo;
<% end %>
</div>
</div>
<div class="container">
<!-- Example row of columns -->
<div class="row">
<div class="col-md-4">
<h2>Ansehen</h2>
<p>Bisher wurden leider erst <%= Problem.translated_count %> der <%= Problem.count %> Probleme übersetzt, es gibt also noch einiges zu tun!</p>
<p>
<%= link_to problems_path, class: 'btn btn-default' do %>
Zu den Problemen &raquo;
<% end %>
</p>
</div>
<div class="col-md-4">
<h2>Erweitern</h2>
<p>Sie haben in Zukunft auch die Möglichkeit, eigene Übersetzungen vorzuschlagen. An diesem Feature wird aber zurzeit noch gearbeitet.</p>
<p><a class="btn btn-default disabled" href="#" role="button">Übersetzung vorschlagen &raquo;</a></p>
</div>
<div class="col-md-4">
<h2>Verbessern</h2>
<p>Haben Sie Verbesserungsvorschläge für eine der Übersetzungen? Fehlt Ihnen eine Funktion auf der Webseite, oder ist Ihnen ein Fehler aufgefallen? Dann schreiben Sie uns!</p>
<p><a class="btn btn-default disabled" href="#" role="button">Zum Kontaktformular &raquo;</a></p>
</div>
</div>
</div>

View File

@ -0,0 +1,21 @@
<% provide(:title, 'Über Project Euler') %>
<div class="page-header">
<h1>Über Project Euler</h1>
</div>
<h2>Was ist Project Euler?</h2>
<%= image_tag 'euler_main.jpg', alt: 'Leonhard Euler (1707-1783)', width: '150px', style: 'border:1px solid black;margin:10px;float:right' %>
<p>Project Euler ist eine Serie von herausfordernden mathematischen bzw. Programmier-Problemen, die mehr als nur mathematische Einblicke zum Lösen erfordern. Obwohl die Mathematik Ihnen helfen wird, auf elegante und effiziente Lösungswege zu kommen, ist der Gebrauch von Computer- und Programmierkenntnissen nötig, um den Großteil der Probleme zu lösen.<br /><br />Die Motivation für das Starten und die Instandhaltung von Project Euler ist die, dem Forschergeist eine Plattform bereitzustellen, die sich mit unbekannten Gebieten befasst, und neue Konzepte in einem spaßigen und freizeitlichen Kontext zu erlernen.</p>
<h2>Für welche Zielgruppe sind die Probleme?</h2>
<p>Die beabsichtigte Zielgruppe enthält Studenten, deren normaler Lehrplan ihr Verlangen nach Lernen nicht stillt, Erwachsene, deren Hauptinteresse zwar nicht die Mathematik selbst, aber mathematische Dinge waren, und Profis, die ihre Fähigkeiten im Problemlösen und der Mathematik auf dem Laufenden halten wollen.</p>
<h2>Kann jeder die Probleme lösen?</h2>
<p>Die Probleme variieren in ihrer Schwierigkeit, und viele werden die Erfahrung des induktiven Kettenlernens machen. Das heißt, ein gelöstes Problem zeigt Ihnen ein neues Konzept, das Ihnen das Lösen eines bisher nicht lösbaren Problems bringt. Somit wird sich der entschlossene Teilnehmer langsam, aber sicher durch jedes Problem arbeiten.</p>
<h2>Was jetzt?</h2>
<p>Um Ihren Fortschritt zu verfolgen, ist es nötig, einen Account zu erstellen und Cookies zu aktivieren. Wenn Sie bereits einen Account auf projecteuler.net haben, dann können Sie sich <a href="https://projecteuler.net/sign_in">einloggen</a>, ansonsten <a href="https://projecteuler.net/register">registrieren</a> Sie sich bitte - es ist komplett kostenfrei!
</p>
<p>Aber wenn die Probleme nach einer Herausforderung klingen, dann können Sie sich die <%= link_to 'Probleme', problems_path %> ansehen, bevor Sie sich registrieren.
</p>
<blockquote><p>&quot;Project Euler existiert zum Begeistern, Herausfordern und Entwickeln der Fähigkeiten und des Genusses von jedem mit einem Interesse für die faszinierende Welt der Mathematik.&quot;</p></blockquote>

View File

@ -0,0 +1,13 @@
<% provide(:title, 'Impressum') %>
<div class="page-header"><h1>Impressum</h1></div>
<p>Angaben gemäß § 5 TMG:<br/><br/></p>
<p>Philipp Fischbeck<br />
Großbeerenstraße 48<br />
14482 Potsdam<br />
</p>
<h2>Kontakt:</h2>
<p>E-Mail: projekteuler@gmail.com</p>
<h2>Haftungsausschluss:</h2>
<p><strong>Haftung für Inhalte</strong></p> <p>Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.</p> <p><strong>Haftung für Links</strong></p> <p>Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.</p> <p><strong>Urheberrecht</strong></p> <p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.</p> <p><strong>Datenschutz</strong></p> <p>Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben. </p> <p>Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich. </p> <p>Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.</p><p> </p>
<p><i>Quellverweis: <a href="http://www.e-recht24.de/muster-disclaimer.htm" target="_blank">eRecht24 Disclaimer</a></i></p>

View File

@ -0,0 +1,31 @@
<%= provide(:title, 'Über römische Zahlen') %>
<div class="page-header">
<h1>Über römische Zahlen</h1>
</div>
<h3>Wie liest und schreibt man römische Zahlen?</h3>
<br />
<p>Traditionelle römische Zahlen bestehen aus den folgenden Werten:</p>
<p style="margin-left:100px;">I = 1<br>
V = 5<br>
X = 10<br>
L = 50<br>
C = 100<br>
D = 500<br>
M = 1000</p>
<p>Sie werden von vielen verschiedenen Regeln in Bezug auf die römischen Zahlen lesen, aber die Wahrheit ist, dass die Römer nur eine einfache Regel hatten:</p>
<p style="text-align:center;"><b>Zeichen müssen in absteigender Größen-Reihenfolge angeordnet sein.</b></p>
<p>Beispiel: Drei Wege, wie sechzehn geschrieben werden könnte, sind XVI, XIIIIII, VVVI; dabei ist die erste Variante die bevorzugte Form, da sie die wenigesten Zeichen benutzt.</p>
<p>Die "Absteigende Größe"-Regel wurde eingeführt, um die Benutzung von subtraktiven Kombinationen zu erlauben. Beispiel: vier kann als IV geschrieben werden, denn es ist eins vor fünf. Da die Regel erfordert, dass die Zeichen in der Größen-Reihenfolge angeordnet sind, sollte es dem Leser klar sein, dass das Vorkommen eines kleineren Zeichens, sozusagen fehl am Platz, eindeutig da ist, um vom folgenden Zeichen abgezogen zu werden. Beispiel: neunzehn könnte geschrieben werden als XIX = X + IX (9). Beachten Sie auch, wie die Regel erfordert, dass X (zehn) vor IX (neun) platziert werden muss, und dass IXX keine gültige Konfiguration wäre.</p>
<p>Allgemein haben die Römer versucht, so wenig Zeichen wie möglich zu benutzen, um Zahlen anzuzeigen. Aus diesem Grund wäre XIX die bevorzugte Form von neunzehn im Vergleich zu anderen gültigen Kombinationen wie XVIIII oder XVIV. Jedoch war es KEINE Regel, und es gibt in Rom immer noch viele Beispiele, wo die Einsparung der Zeichen nicht benutzt wurde. Beispiel: im berühmten Kolosseum sind die Zeichen über dem neunundvierzigsten Eingang geschrieben als XXXXVIIII, und nicht IL oder XLIX (siehe Regeln unten).</p>
<p>Trotzdem haben wir über die Zeit neue, einschränkende Regeln eingeführt. Bis zum Mittelalter war es üblich geworden, mehr als drei aufeinanderfolgende identische Zeichen zu benutzen. Das heißt, IV wurde geschrieben anstatt von IIII, IX anstatt von VIIII und so weiter. Außerdem wurden den subtraktiven Kombinationen folgende Regeln auferlegt:</p>
<ol style="list-style-type:lower-roman;">
<li>Nur I, X und C können als führendes Zeichen im Teil eines subtraktiven Paars benutzt werden.</li>
<li>I kann nur vor V und X stehen.</li>
<li>X kann nur vor L und C stehen.</li>
<li>C kann nur vor D und M stehen.</li>
</ol>
<p><b>Diese letzten vier Regeln gelten als Gesetz</b>, und allgemein ist es bevorzugt, aber nicht notwendig, Zahlen unter Benutzung der minimalen Anzahl von Zeichen darzustellen. Das bedeutet, dass IL als ungültige Weise gilt, neunundvierzig zu schreiben, und wobei XXXXVIIII, XXXXIX, XLVIIII und XLIX alle zulässig sind, ist das letzt die bevorzugte (minimale) Form.</p>
<p>Es wird also erwartet, die höheren Werte zu benutzen, wann immer es möglich ist; Beispiel: L sollte benutzt werden statt XXXX, oder C sollte benutzt werden statt LL. Jedoch wurde sogar diese "Regel" missachtet: in der Kirche von Sant'Agnese fuori le Mura (Sankt Agnes vor den Mauern), gefunden in Rom, ist das Datum MCCCCCCVI (1606) an der vergoldeten und verwahrten Holzdecke geschrieben; Ich bin sicher, dass viele argumentieren würden, dass es als MDCVI hätte geschrieben werden sollen.</p>
<p>Jedoch, wenn man dem Spruch "Wenn in Rom, tu es wie die Römer" folgt, und wir sehen, wie die Römer Zeichen schreiben, dann gibt es uns deutlich mehr Freiheit, als viele zugeben würden.</p>

View File

@ -0,0 +1,5 @@
<footer class="footer">
<div class="container">
<p class="text-muted text-center"><%= link_to t('application.copyright'), about_copyright_path %> | <%= t('application.bootstrap_html')%></p>
</div>
</footer>

View File

@ -0,0 +1,22 @@
<%= navbar position: :static do %>
<%= vertical do %>
<%= link_to t(:site_title), root_path %>
<% end %>
<%= horizontal do %>
<%= nav class: 'navbar-left' do %>
<%= link_to t('application.info'), about_info_path %>
<%= link_to Problem.model_name.human(count: 2), problems_path %>
<% if admin_signed_in? %>
<%= link_to t('admin.dashboard.index.administration'), :admin %>
<% end %>
<% end %>
<%= nav class: 'navbar-right' do %>
<%= link_to t('application.legal'), about_legal_path %>
<% if admin_signed_in? %>
<%= link_to(t('application.sign_out'), destroy_admin_session_path, method: :delete) %>
<% else %>
<%= link_to(t('application.sign_in'), new_admin_session_path) %>
<% end %>
<% end %>
<% end %>
<% end %>

View File

@ -20,26 +20,7 @@
<%= csrf_meta_tags %>
</head>
<body>
<%= navbar position: :static do %>
<%= vertical do %>
<%= link_to t(:site_title), root_path %>
<% end %>
<%= horizontal do %>
<%= nav class: 'navbar-left' do %>
<%= link_to Problem.model_name.human(count: 2), problems_path %>
<% if admin_signed_in? %>
<%= link_to t('admin.dashboard.index.administration'), :admin %>
<% end %>
<% end %>
<%= nav class: 'navbar-right' do %>
<% if admin_signed_in? %>
<%= link_to(t('application.sign_out'), destroy_admin_session_path, method: :delete) %>
<% else %>
<%= link_to(t('application.sign_in'), new_admin_session_path) %>
<% end %>
<% end %>
<% end %>
<% end %>
<%= render 'layouts/header' %>
<div class="container">
<%= flash_messages %>
<div class="row">
@ -49,5 +30,6 @@
</div>
</div>
<%= render 'layouts/footer' %>
</body>
</html>

View File

@ -1,6 +1,9 @@
<% provide(:title, Problem.model_name.human(count: 2)) %>
<h1><%= Problem.model_name.human(count: 2) %></h1>
<div class="page-header"><h1><%= Problem.model_name.human(count: 2) %></h1></div>
<p><%= t('problems.index.translated_count', translated: Problem.translated_count, total: Problem.count) %></p>
<%= progress_bar percentage: @translated_percentage, label: true, striped: true %>
<%= render 'problem_pagination' %>
<table class="table table-striped table-bordered">

View File

@ -4,3 +4,7 @@ de:
application:
sign_in: 'Einloggen'
sign_out: 'Ausloggen'
info: "Info"
legal: "Impressum"
copyright: "Copyright-Informationen"
bootstrap_html: 'Entworfen mit <a href="http://getbootstrap.com/">Bootstrap</a>'

View File

@ -5,6 +5,7 @@ de:
not_yet_translated: Dieses Problem wurde noch nicht übersetzt.
index:
suggest_translation: Übersetzung vorschlagen
translated_count: "Übersetzte Probleme: %{translated} von %{total}"
show:
improve_translation: Übersetzung verbessern
problem_subtitle: Problem %{id}

View File

@ -1,4 +1,10 @@
Rails.application.routes.draw do
get 'about/index'
get 'about/info'
get 'about/copyright'
get 'about/legal'
get 'about/roman_numerals'
devise_for :admins, skip: :registrations
resources :problems, only: [:index, :show] do
resources :translations, only: [:new, :create]
@ -16,7 +22,7 @@ Rails.application.routes.draw do
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
root 'problems#index'
root 'about#index'
# Example of regular route:
# get 'products/:id' => 'catalog#view'

View File

@ -0,0 +1,29 @@
require 'test_helper'
class AboutControllerTest < ActionDispatch::IntegrationTest
test "should get index" do
get about_index_url
assert_response :success
end
test "should get info" do
get about_info_url
assert_response :success
end
test "should get copyright" do
get about_copyright_url
assert_response :success
end
test "should get legal" do
get about_legal_url
assert_response :success
end
test "should get roman_numerals" do
get about_roman_numerals_url
assert_response :success
end
end

View File

@ -18,12 +18,17 @@ class ProblemTest < ActiveSupport::TestCase
assert_equal "https://projecteuler.net/problem=1", problems(:one).original_url
end
test "should return correct number of translated problems" do
assert_equal 2, Problem.translated_count
end
test "should allow for problem count updating" do
Problem.update_count(10)
assert_not Problem.where(id: 0).exists?
(1..10).each do |i|
assert Problem.where(id: i).exists?
end
assert_not Problem.where(id: 11).exists?
assert_equal "First title", Problem.find(1).title
end
@ -33,5 +38,6 @@ class ProblemTest < ActiveSupport::TestCase
Problem.update_count(1)
end
assert_equal 3, Problem.count()
assert_equal "First title", Problem.find(1).title
end
end