Пересдача № 1
Краткое описание процедуры
Задача будет выдана на ограниченное время, равное трём часам. Формат сдачи можно сравнить с обыкновенной контрольной по математическим предметам.
Текст задачи будет размещён на данной странице, а решение необходимо будет предоставить на ресурс moodle.uniyar.ac.ru. Пожалуйста удостоверьтесь, что у вас есть доступ к данному ресурсу. Если у вас нет доступа к задаче пересдачи, тогда отправьте её письмом до 2021-09-30 18:30 МСК на почтовый адрес andrey@crafted.su
. Тема письма: Пересдача № 1 Ruby ФАМИЛИЯ
.
Результат работы - архив с исходными кодами, который прикрепляется как решение задачи.
Требования к знаниям учащихся
- Уровень знакомства с синтаксисом языка Ruby:
- Запуск приложения.
- Переменные, методы.
- Работа контейнерами, итераторами, нумераторами.
- Описание собственных классов.
- Наследование классов.
- Использование модулей и примесей.
- Знание деталей работы чисел.
- Знание деталей вызова методов и указания их аргументов.
- Использование методов чисел и промежутков.
- Использование методов классов строк и регулярных выражений.
- Уровень знакомства с экосистемой Ruby:
- Установка, удаление зависимостей с помощью
gem
. - Управление зависимостями с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Запуск типичных задач разработчика с помощью Rake.
- Установка, удаление зависимостей с помощью
- Уровень знакомства с разработкой веб-приложений с помощью библиотеки Roda:
- Обработка запросов GET для получения данных.
- Использование шаблонов Foundation / Bootstrap для оформления сайта.
- Обработка запросов POST на редактирование данных.
- Передача аргументов в контроллер через адресную строку.
- Умение структурировать сложное приложение.
- Умение формировать интерфейс взаимодействия в стиле REST.
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако, к защите допускаются приложения, реализующие только часть задач.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога должен находится конфигурационный файл
rackup
с помощью которого можно запустить приложение. - Исходный код приложения может быть расположен в каталогах
helpers
,models
,lib
,routes
. - В каталоге
views
должны находиться шаблоны для описания вида.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
- Для обработки параметров запросов необходимо использовать специализированную библиотеку (
dry-schema
,dry-validations
и т.п.). - Для формирования содержимого формы необходимо использовать специализированную библиотеку (
forme
,simple_form
и т.п.). - Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом: показывать помощь по использованию, в случае ошибочных ситуаций сообщать пользователю причину ошибки и способы его устранения.
- Желательно автоматизировать следующие задачи с помощью системы выполнения задач Rake:
- Запуск приложения с помощью
rerun
. - Выполнение проверки исходного кода с помощью Rubocop.
- Запуск приложения с помощью
- Запрещено писать код для приложения на языке JavaScript или любом языке, который компилируется в JavaScript.
Задача
Вашей задачей является реализация логики приложения для просмотра учебного расписания. Шаблон проекта необходимо скачать!.
Данные расположены внутри шаблона в файле db/schedule.csv
.
Вам необходимо реализовать логику работы страниц:
- Страница выбора группы, путь к странице
/schedule/by_groups
. - Страница отображения расписания группы, путь к странице
schedule/by_groups/ГРУППА
Cтраница выбора группы
- Отображается список доступных групп. Если ни одна группа не доступна, то на странице должно отображаться сообщение, что групп нет.
- Название группы должно являться ссылкой, которая ведёт на страницу отображения расписания для конкретной группы.
- Пользователь должен иметь возможность отфильтровать список групп. В поле ввода фильтра вводится часть названия группы, пользователь нажимает на кнопку «Фильтровать». После этого список групп должен быть отфильтрован по принципу нахождения подстроки в имени группы. Если в результате фильтрации в списке не останется ни одной группы, то на странице должна отобразиться сообщение, что подходящих групп нет.
- Имеется возможность вернуться на главную страницу.
Страница отображения расписания группы
- Необходимо показывать расписание выбранной группы для понедельника, вторника, среды, четверга, пятницы и субботы. Порядок дней совпадает со порядком дней в неделе.
- На каждый день необходимо показать занятия данной группы. Занятия должны выводится по порядку пар.
- Для каждого занятия необходимо вывести:
- Номер пары.
- Номер аудитории.
- Название предмета.
- ФИО преподавателя.
- Если странице отображения расписания была открыта для несуществующей группы, то на странице должно отображаться соответствующее сообщение.
- Имеется возможность вернуться на страницу выбора группы.