В качестве лабораторной работы необходимо решить задачу из пункта 2.2 задачника. Номер задачи - это номер задачи для лабораторной работы №2.

Если вы не получили номер первой лабораторной работы у преподавателя, то обратитесь к нему на занятии для получения задачи для второй лабораторной.

Срок сдачи лабораторной работы - 27 декабря 2018 года.

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

  • Уровень знакомства с синтаксисом языка Ruby
    • Запуск приложения
    • Переменные, методы
    • Работа контейнерами, итераторами, нумераторами
    • Описание собственных классов
    • Наследование классов
    • Использование модулей и примесей
    • Знание деталей работы чисел
    • Знание деталей вызова методов и указания аргументов
    • Использование методов чисел и промежутков.
    • Использование методов классов строк и регулярных выражений.
  • Уровень знакомства с экосистемой Ruby
    • Установка, удаление зависимостей с помощью gem
    • Управление зависимостями с помощью Bundler
    • Проверка качества исходного кода с помощью Rubocop
  • Уровень знакомства со средствами тестирования обычных приложений
    • Настройка окружения для модульного тестирования с помощью RSpec
    • Написание модульных тестов в стиле спецификаций с использованием RSpec
    • Использование rspec-mocks для изоляции тестируемого объекта в рамках теста
    • Оценивать степень покрытия исходного кода с помощью инструмента SimpleCov.
  • Уровень знакомства с разработкой веб-приложений с помощью библиотеки Sinatra:
    • Обработка запросов GET для получения информации.
    • Использование шаблонов Foundation / Bootstrap для оформления сайта.
    • Обработка запросов POST на редактирование информации.
    • Сохранение данных пользователя в настройках приложения.
    • Передача аргументов в контроллер через адресную строку.
    • Написание системных тестов для проверки функциональности приложения.

Требования к выполнению задания

  • Приложение должно реализовать все требования, указанные в задании. Однако, к защите допускаются приложения, реализующие только часть задач.
  • Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
  • Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью gem запрещена. Исключением является джем bundler.
  • Для разрабатываемого приложения должны быть создан отдельный каталог.
    • В корне каталога должны располагаться конфигурационные файлы: Gemfile, Gemfile.lock.
    • В корне каталога приложения должны находится каталоги bin, lib, в которых должен находиться исходный код приложения. В каталоге bin находится исполняемый файл, в каталоге lib находится описание всех собственных классов и модулей.
  • Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
  • Необходимо выделить отдельные классы, описывающие предметную область.
  • В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
  • Приложение должно корректно обрабатывать неправильный ввод от пользователя.
  • Для приложения необходимо написать модульные тесты, которые будут проверять ключевую логику из предметной области.
  • Необходимо написать модульные тесты для логики ввода-вывода.
  • Степень покрытия исходного кода должна быть не менее 95%.
  • Для приложения необходимо написать системные тесты, которые будут проверять работу всех сценариев работы приложения. Системные тесты не должны влиять на степень покрытия модульных тестов.
  • Желательно автоматизировать задачи запуска тестов с помощью системы выполнения задач Rake.