Лабораторная № 3
Требования к лабораторной работе
Требования к знаниям учащихся
- Уровень знакомства с синтаксисом языка Ruby:
- Запуск приложения.
- Переменные, методы.
- Работа контейнерами, итераторами, нумераторами.
- Описание собственных классов.
- Наследование классов.
- Использование модулей и примесей.
- Знание деталей работы чисел.
- Знание деталей вызова методов и указания их аргументов.
- Использование методов чисел и промежутков.
- Использование методов классов строк и регулярных выражений.
- Уровень знакомства с экосистемой Ruby:
- Установка, удаление зависимостей с помощью
gem
. - Управление зависимостями с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Установка, удаление зависимостей с помощью
- Уровень знакомства с разработкой веб-приложений с помощью библиотеки Roda:
- Обработка запросов GET для получения данных.
- Использование шаблонов Foundation / Bootstrap для оформления сайта.
- Передача аргументов в контроллер через адресную строку.
- Умение структурировать простое Roda-приложение.
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако к защите допускаются приложения, реализующие только часть задач.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога должен находится конфигурационный файл
rackup
, с помощью которого можно запустить приложение. - Исходный код приложения может быть расположен в каталогах
helpers
,models
,lib
,routes
. - В каталоге
views
должны находиться шаблоны для описания вида.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не принадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки данных предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом:
- все страницы приложения должны быть доступны из пользовательского интерфейса;
- показывать помощь по использованию;
- в случае ошибочных ситуаций сообщать пользователю причину ошибки и способы её устранения.
- Запрещено писать код для приложения на языке JavaScript или любом языке, который компилируется в JavaScript.
Требования к формату сдачи
Каталог приложения с исходным кодом должен быть загружен в качестве ответа на задание в Moodle.
Задача
Разработайте веб-приложение для анализа списка школьников города.
Инициализация данных происходит из файла students.csv, включающего следующие поля:
- Фамилия
- Имя
- Отчество
- Дата рождения в формате YYYY-MM-DD
- Пол мужской/женский
- Номер класса с буквой, гарантируется корректное числовое значение класса (от 1 до 11) и наличие буквы у всех классов
- Наименование учебного заведения с номером в формате
[Название] №[Натуральный номер]
Требуется реализовать веб-приложение, позволяющее анализировать список школьников города. Приложение должно состоять из следующих страниц:
- Страница со списком школ
- Страница конкретной школы
- Страница конкретного класса
Страница со списком школ должна содержать:
- Список всех школ, упорядоченный по названию и номеру. По нажатию на название школы должна открываться страница этой школы.
- Кнопки «Школа», «Лицей» и «Гимназия», при нажатии на которые список школ должен фильтроваться, отображая только школы, лицеи или гимназии соответственно.
Страница конкретной школы должна содержать:
- Название школы.
- Общее количество учеников в школе, количество мальчиков/девочек.
- Список всех классов школы, сгруппированный и отсортированный по параллелям. Для каждого класса должна быть реализована возможность перехода на его страницу.
- Кнопка «↑/↓», которая меняет тип сортировки списка: по возрастанию или убыванию номера параллели
Страница конкретного класса должна содержать:
- Список всех учеников, упорядоченный по ФИО.
- Кнопки с буквами от «А» до «Я», при нажатии на которые список учеников должен фильтроваться, отображая только учеников, чья фамилия начинается на соответствующую букву.
- Название школы, позволяющее вернуться на страницу школы.
Предложения по реализации
Передача аргументов
Передачу аргументов приложению можно организовать:
- либо по пути:
/schools/type/school
,/schools/type/lyceum
- либо путём передачи параметров
/schools?type=school
,/schools?type=lyceum
Структура путей к страницам приложения
- Страница со списком школ,
/
- Страница конкретной школы,
/school/ID
- Страница конкретного класса,
/class/ID