Приложение со списком элементов
Задача
Создать веб-приложение, позволяющее пользователю составить список из треугольников. Список треугольников можно фильтровать по значению площади в диапазоне от минимального до максимального.
Приложение должно позволять пользователю добавлять новые треугольники. Они должны добавляться в список только из данных сторон можно составить треугольник.
Приложение также должно содержать в себе информацию о разработчике.
Технические аспекты реализации
Сайт должен содержать в себе следующие страницы:
- Главная страница, содержащая ссылки на все другие страницы, а также описание решаемой задачи. Маршрут
/. - Страница для вывода всех списка треугольников. Маршрут
/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.