Приложение со списком элементов
Задача
Создать веб-приложение, позволяющее пользователю составить список из треугольников. Список треугольников можно фильтровать по значению площади в диапазоне от минимального до максимального.
Приложение должно позволять пользователю добавлять новые треугольники. Они должны добавляться в список только из данных сторон можно составить треугольник.
Приложение также должно содержать в себе информацию о разработчике.
Технические аспекты реализации
Сайт должен содержать в себе следующие страницы:
- Главная страница, содержащая ссылки на все другие страницы, а также описание решаемой задачи. Маршрут
/
. - Страница для вывода всех списка треугольников. Маршрут
/triangles
. - Страница для ввода данных для решения задачи. Маршрут
/triangles/new
. - Страница для показа информации о создателе приложения. Маршрут
/about
.
Общий макет страниц должен содержать навигационную панель, с которой можно перейти на главную страницу, страницу ввода информации, а также страницу для показа информации о создателе сайта.
Главная страница должна содержать описание назначения данной системы, а также условие задачи, которая будет решена.
Страница для ввода данных должна содержать в себе форму для ввода данных. На форме должно быть три поля для ввода числа и кнопка для выполнения запроса на вычисление. У каждого поля для ввода данных должно быть разумное описание, состоящее более чем из одной буквы.
Страница для показа списка треугольников должна отображать текущий список, а также поля для ввода фильтра по площади.
Страница о создателе приложения должна содержать имя и фотографию создателя.
Подумайте какие из данных страниц должны быть динамическими, т.е. для них должен выполняться код на Ruby, а какие статическими, для которых этого не нужно.
Предлагаемый подход к решению задачи
- Создайте каталог для сайта. Разместите в корне данного каталога следующие директории:
models
,public
,views
. - В каталог
public
поместите файлы CSS-фреймворка Bootstrap. - Создайте
Gemfile
и добавьте в качестве зависимостейroda
,rubocop
,rerun
,puma
. Для Windows также желательно установить джемwdm
. - Создайте файл
app.rb
в корне проекта, в котором подключите джемroda
. - Добавьте обработчик маршрута по умолчанию
'/'
, выведите пользователю сообщение ‘Маршрут работает’. - Создайте файл
config.ru
, подключите туда приложение, определённое вapp.rb
. - Запустите приложение с использованием
rackup
и откройте браузер по ссылкеhttp://localhost:9292
и убедитесь, что всё работает. - Завершите работу приложения, нажав комбинацию клавиш
Ctrl+C
. Запустите приложение с помощьюrerun
:bundle exec rerun rackup
. Теперь после сохранения файлов сервер будет автоматически перезапущен. Для остановки Rerun введитеq
и нажмите ввод. - Добавьте файл
views/layout.erb
, в котором разместите навигационную панель, а для центральной части разместите вызовyield
. То есть сделайте общую раскладку для сайта. В навигационной панели должны быть ссылки на все страницы сайта. - Добавьте файл
views/index.erb
, в котором разместите необходимое содержимое для первой страницы. Исправьте обработчик пути по умолчанию, чтобы он выводил содержимое файлаindex.erb
. - В каталоге
lib
создайте классы, описывающие треугольник и список треугольников.- Класс Triangle должен содержать методы:
- Конструктор, принимающий длины сторон в качестве аргументов.
triangle?
— возвращаетtrue
илиfalse
в зависимости можно ли создать треугольник из данных сторон или нет.area
— возвращает площадь для треугольника и 0, если фигура не является треугольником.
- Класс TriangleList должен содержать методы:
add_triangle
, принимающий объекты типа Triangle и добавляющий их в конец списка.all_triangles
— метод для получения списка всех треугольников.triangles_by_area
— метод для получения фильтрованного списка.
- Модуль InputValidators, содержащий методы:
check_min_and_max
— метод для проверки ввода минимальных и максимальных значений.check_side_lengths
— метод для проверки ввода на странице добавления нового треугольника.
- Класс Triangle должен содержать методы:
- Подключите класс TriangleList в файл
app.rb
и поместите экземпляр данного класса в переменную@triangles
. - Создайте страницу
views/triangle_new.erb
, содержащую форму для ввода данных. Отобразите эту страницу при переходе по маршруту/triangles/new
. Форма должна посылать результаты обработки с помощью POST-запроса. - Корректно обработайте данные, передаваемые со страницы ввода данных. Ошибочными ситуациями считается отсутствие данных в поле ввода, а также отсутствие вещественных чисел в поле ввода.
- Создайте страницу
views/triangles.erb
, которая может отобразить результаты ввода данных. Странице в качестве параметра должна передаваться ссылка на объект TriangleList. - Добавьте на страницу
views/triangles.erb
форму для фильтрации. Добавьте обработку фильтрации для данных этой формы.
Важно удостоверьтесь, что ваши исходные файлы могут быть успешно проверены с помощью Rubocop.