Использование джемов
Материалы для подготовки
- Официальный сайт rubygems.org
- Описание структуры джема на rubygems.org
- Список популярных ждемов по категориям ruby-toolbox.com
- Официальный сайт инструмента Bundler bundler.io
- Официальный сайт инструмента Rubocop http://batsov.com/rubocop/
- Руководство по стилю оформления Ruby Ruby Style Guide
- Официальный перевод руководства на русский язык руководства по стилю офомления Ruby Ruby Style Guide
Документация
Подключение внешних файлов
Во время обработки кода интерпретатору можно дать команду на подключение кода из другого файла. В результате выполнения данной команды интерпретатор считает файл и выполнит весь код, который написан в данном файле. Если файл ранее подключался, то он не будет считан с жёсткого диска ещё раз.
Для подключения файлов применяются следующие методы:
- Kernel#require — подключить файл по стандартному пути поиска, обычно применяется для внешних библиотек.
- Kernel#require_relative — подключить файл по относительному пути, обычно применяется для файлов собственного приложения или библиотеки.
Рассмотрим следующий пример. Пусть у нас имеется следующая структура каталогов:
sample-app
├── bin/
│ └── sample-app.rb
└── lib/
└── common.rb
В каталоге sample-app
находятся подкаталоги bin
и lib
. Для того, чтобы из файла sample-app.rb
получить доступ к содержимому из файла common.rb
в него необходимо добавить require_relative '../lib/common.rb'
.
Полный код sample-app.rb
:
require_relative '../lib/common.rb'
main
Полный код common.rb
:
def main
puts 'Hello, world!'
end
Общий объём скриптового кода, который не принадлежит ни одному методу, или классу, или модулю не должен превышать пяти строк кода.
Задачи на поиск и установку библиотек (№ 1)
Цель: научиться искать джемы по названию, использовать инструментарий gem
для просмотра и управлением установленными джемами.
Микро-задачи на изучение инструмента gem
.
- Найдите все библиотеки, в названиях которых есть
json
. Повторите поиск на сайте https://rubygems.org. - Найдите все библиотеки, в названиях которых есть
xlsx
. Повторите поиск на сайте https://rubygems.org. - Посмотрите список установленных библиотек.
- Установите библиотеку
write_xlsx
. - Какие джемы помимо
write_xlsx
были установлены в систему? - Удалите джем
write_xlsx
. Были ли удалены все джемы, что были поставлены вместе с ним? - Узнайте каталог, в который были установлены
Задачи на исправление собственного исходного кода (№ 2)
Для решения задач вам необходимо иметь код с одной из выполненных ранее практик.
Для каждого приложения, разработанного в рамках практики, выполните следующие задачи.
Исправление структуры приложения
- Скопируйте старый код приложения в новый каталог.
- Исправьте структуру приложения согласно структуре джема.
- Сравните полученный результат с изначальной структурой каталогов.
Важно после исправления структуры каталогов проверьте, что приложение продолжает выполнять свои функции.
Проверка исходного кода с помощью Rubocop
- Создайте файл
Gemfile
в корне проекта. - Добавьте зависимость от джема
Rubocop
. -
Скопируйте в конфигурационный файл
Rubocop
.rubocop.yml
разрешённую конфигурацию:Metrics/AbcSize: # Отключение ABC-проверок Enabled: false Layout/LineLength: # Длина строк 80 Max: 80 Metrics/MethodLength: # Количество строк кода 15 Max: 15 Style/NegatedIf: # Не форсировать unless Enabled: false AllCops: # Автоматически включать все проверки NewCops: enable
- Проверьте исходный код своего проекта с помощью Rubocop и исправьте его в соответствии с его сообщениями.
Задачи на использование новых джемов (№ 3)
Ввод данных от пользователя с помощью tty-prompt
Внимание библиотека tty-prompt
имеет ограничения по работе с русскими символами под ОС Windows. Необходимо производить настройку преобразования кодировок в потоках ввода-вывода.
Постановка задачи: реализуйте приложение, которое позволяет пользователю добавлять информацию о сотрудниках и просматривать её. Для реализации ввода информации используйте джем tty-prompt
.
При старте приложение должно показывать меню, состоящее из трёх пунктов:
- Добавить информацию о сотруднике.
- Отобразить список сотрудников.
- Завершить работу приложения.
При выборе первого пункта приложение должно запросить у пользователя следующую информацию:
- Фамилию, имя и отчество. Тип данных: строка. Не пустая.
- Уровень образования. Строка, выбор из вариантов: Среднее, Среднее профессиональное образование, Бакалавр, Магистр. Можно расширить список по выбору.
- Текущий оклад. Тип данных: положительное вещественное число.
При выборе второго пункта приложение должно отобразить информацию обо всех известных ему сотрудниках.
После вывода приложение должно отображать меню заново.
Требования к реализации:
- Исходный код должен быть организован согласно структуре джемов.
- Исходный код должен удовлетворять требованиям Rubocop.
- Для строк и чисел должно быть запрещено вводить пустое значение. При вводе пустого значения приложение должно просить повторить ввод.
- Для выбора одного из вариантов воспользуйтесь соответствующим методом
tty-prompt
select
. - При реализации вам необходимо создать только один экземпляр объекта
TTY::Prompt
, запрещено создавать множество экземпляров данного класса.
Отображение информации на изображениях с помощью chunky_png
Внимание данная библиотека не поддерживает функцию растеризации шрифтов. В результате с её помощью решать задачу отображения текста невозможно. Однако она хорошо справляется с простыми фигурами: линиями, прямоугольниками, кругами и ломанными линиями.
Постановка задачи: расширьте предыдущее приложение возможностью создания гистограммы сотрудников в соответствии с их уровнем образования. То есть для каждого уровня образования необходимо подсчитать количество сотрудников и отобразить эту информацию в формате столбчатой диаграммы.
Для решения задачи в основное меню приложения добавить опцию “Сформировать диаграмму уровней образования”. При выборе данного пункта необходимо рядом с исполняемым файлом создать файл histogram.png
, который будет содержать в себе изображение гистограммы. Можно использовать формат столбчатой диаграммы для этих целей.