Требования к лабораторной работе

Требования к знаниям учащихся

  • Уровень знакомства с синтаксисом языка 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