Как создать Ruby-гем, который предоставляет интерфейс командной строки (CLI) для внешнего источника данных
В этом посте предоставлена информация о:
_· _Интерфейсе командной строки_: (Более подробно: _1_ / _2)
_· _Ruby-гемах
_· _Bundler
_· _Парсинге веб-страниц с помощью Nokogiri_: (Более подробно: _1_ / _2_ / _3_ / _4)
_· _Gemspec_: (Более подробно: _1)
_· _Локальном выполнении Ruby-гема
Обзор: В этом посте описывается, как создать и опубликовать Ruby-гем для разбора веб-страницы и предоставления пользователю извлеченных данных через интерфейс командной строки.
Интерфейс командной строки
Интерфейс командной строки (CLI) предоставляет пользователю возможность выполнять действия в программном приложении. В отличие от графического пользовательского интерфейса (GUI), который в основном использует графические изображения, пользователи CLI вводят текстовые команды в командную строку.
Пример приложения, которое мы создадим в этой статье, предоставит командную строку, позволяющую пользователю взаимодействовать с программой, вводя команды и получая ответы программы таким же образом.
Ruby Gems
Шаг 1: Создание гема
Для начала мы создадим гем. Создав гем, мы сможем управлять, устанавливать и делиться приложением с другими пользователями или использовать его в других библиотеках или приложениях, подключив гем.
Ruby gems упаковывают вместе Ruby-код. Многие программы, которыми мы пользуемся каждый день, полагаются на полезные библиотеки, которые можно найти в сообществе Rubygems. Любой может легко искать, устанавливать или делиться Ruby-гемом с сообществом Rubygems.
Ruby-гемы обычно содержат одну и ту же стандартную структуру организации кода. Основные компоненты гема включают:
· Код - обычно находится в папке lib
· Документация - обычно файл README с инструкциями по установке
· Gemspec - обычно содержит информацию о файлах гема, информацию о тестировании, платформу, номер версии и многое другое, а также электронную почту и имя автора
Bundler
Шаг 2: Создание структуры файлов для гема
Bundler - это инструмент для создания основных компонентов гема. Чтобы создать гем с использованием Bundler, перейдите в папку вашего приложения. Затем введите следующую команду в командной строке (CLI):
bundle gem
<имя вашего нового приложения>
Пример:
bundle gem my_new_program
Эта команда создаст структуру файлов для вашего нового гема и инициализирует репозиторий Git, если Git установлен. Если вы впервые используете Bundler, вам будет предложено включить файлы CODE_OF_CONDUCT.md и LICENSE.txt в ваш проект.
Вывод CLI для вашего проекта будет похож на следующий:
MIT License включена в конфигурацию Правила поведения включены в конфигурацию create
<имя вашего нового приложения>
/Gemfile create<имя вашего нового приложения>
/lib/nonono.rb create<имя вашего нового приложения>
/lib/nonono/version.rb create<имя вашего нового приложения>
/nonono.gemspec create<имя вашего нового приложения>
/Rakefile create<имя вашего нового приложения>
/README.md create<имя вашего нового приложения>
/bin/console create<имя вашего нового приложения>
/bin/setup create<имя вашего нового приложения>
/.gitignore create<имя вашего нового приложения>
/LICENSE.txt create<имя вашего нового приложения>
/CODE_OF_CONDUCT.md Инициализация репозитория Git в<местоположение вашей новой папки приложения>
Гем ‘<имя вашего нового приложения>
’ был успешно создан. Для получения дополнительной информации о создании RubyGem посетите https://bundler.io/guides/creating_gem.html
Структура файлов, предоставленная Bundler, предоставляет необходимые каталоги для начала процесса разработки кода для вашего приложения. При увеличении сложности вашего приложения могут потребоваться дополнительные файлы.
Веб-парсинг с использованием Nokogiri
Шаг 3: Сбор данных из внешнего источника
Для этого примера мы будем использовать Nokogiri для разбора данных с веб-страницы в формате HTML. Nokogiri - это гем, который ищет документы с помощью XPath или селекторов CSS3. Чтобы установить Nokogiri, введите следующую команду в командной строке:
gem install nokogiri
Чтобы использовать гем Nokogiri в вашем приложении, нам нужно его подключить. Метод require импортирует определения классов и методов из подключаемого файла гема, чтобы выполнить все его операторы в вашем приложении. Чтобы подключить Nokogiri в вашем приложении, добавьте следующую строку в файл кода, в котором вы хотите использовать гем:
require ‘nokogiri’
Перейдите к файлу gemspec вашего приложения и добавьте следующую строку в зависимость:
spec.add_dependency “nokogiri”
Nokogiri - это большая библиотека и имеет множество применений. Мы используем Nokogiri для разбора селекторов CSS и возврата данных с внешней веб-страницы. Чтобы открыть веб-страницу, как если бы это был файл, мы будем использовать обертку OpenURI. Чтобы подключить OpenURI в вашем приложении, добавьте следующую строку в файл кода, в котором вы хотите использовать гем:
require ‘open-uri’
Затем мы получим и разберем HTML. Добавьте следующую строку в файл кода:
<любая переменная>
= Nokogiri::HTML(open(<любая веб-страница>
))
Пример:
doc = Nokogiri::HTML(open('https://nokogiri.org/tutorials/installing_nokogiri.html'))
Это откроет веб-страницу в формате HTML и предоставит доступ к разбору селекторов CSS. Извлечение данных из веб-элементов называется парсингом. Затем мы будем парсить данные, используя селекторы CSS. Умение выбирать элементы с помощью CSS - отличное навык, который стоит развивать, узнайте больше здесь.
Возможно, потребуется перебирать селекторы CSS, чтобы получить все данные. Парсите и выводите HTML с помощью CSS, добавив следующую строку в файл кода:
<переменная для получения>
.css(‘Селектор CSS’).each do |<переменная итерации>
|
puts <переменная итерации>
.text
end
Пример:
doc.css('nav ul.menu li a', 'article h2').each do |link|
puts link.content
end
Это вернет текст, найденный с помощью селектора CSS. Возможно, вам понадобится использовать другие методы или регулярные выражения, чтобы получить данные, которые вы хотите парсить.
Gemspec
Шаг 4: Создание gemspec файла
Файл gemspec определяет содержимое гема, его создателя и версию. Он также содержит всю информацию, необходимую для публикации гема в сообществе Rubygems. Большая часть компонентов gemspec уже заполнена, когда вы создаете базовую структуру файлов с помощью Bundler.
После заполнения gemspec вы можете запустить гем локально для тестирования или опубликовать его, чтобы поделиться им с сообществом Rubygems. Некоторые важные поля для заполнения:
· spec.summary — краткое описание гема
· spec.description — более подробное описание гема
· spec.homepage — URL домашней страницы гема
· spec.executables — исполняемые Ruby файлы, которые будут запускаться гемом
· spec.require_paths — пути в геме, которые будут добавлены в $LOAD_PATH при активации гема
· spec.add_development_dependency — добавляет зависимость для разработки с указанными требованиями. Зависимости для разработки не устанавливаются по умолчанию и не активируются при подключении гема.
· spec.add_dependency — зависимости, необходимые для работы гема
После заполнения gemspec вы можете сгенерировать файл gemspec. Для этого введите следующую команду в командной строке:
gem build <имя вашего нового приложения>
.gemspec
Пример:
gem build my_new_program
Результатом выполнения этой команды будет создание гема и файла gemspec, который будет содержать номер версии в имени файла и будет похож на следующий:
Успешно создан RubyGem
Имя: my_new_program
Версия: 0.0.0
Файл: my_new_program -0.0.0.gem
Локальное выполнение Ruby-гема
Шаг 5: Запуск и тестирование вашего приложения локально
После того, как вы завершили написание кода приложения и создали файл гема, вы можете запустить гем локально для тестирования или использования его в другом приложении. Чтобы установить гем локально, введите следующую команду в командной строке:
gem install <имя вашего нового приложения>
.gemspec
Пример:
gem install my_new_program.gemspec
Вывод для этой команды будет похож на следующий:
Успешно установлен гем my_new_program-0.0.0
1 гем установлен
Установка документации ri для my_new_program-0.0.0…
Установка документации RDoc для my_new_program0.0.0…
Гем теперь установлен на вашей локальной системе. Чтобы использовать гем, последний шаг - подключить гем и запустить его в сеансе irb. Для этого выполните следующие шаги:
1) откройте командную строку и запустите новый сеанс irb
2) введите следующую команду в сеансе irb:
require ‘<имя вашего нового приложения>
’
Пример:
require ‘my_new_program’
3) выполните приложение на основе вашего кода - это может быть сделано путем создания нового экземпляра, выполнения файла, размещенного в каталоге bin, выполнения файла с шебангом и т. д.
Публикация Ruby Gems
Шаг 6: Поделиться вашим приложением
Когда вы закончили разработку вашего приложения и протестировали его локально, вы готовы поделиться им с сообществом Rubygems. Чтобы поделиться вашей гемой, вам нужно создать аккаунт или войти, указав адрес электронной почты, имя пользователя и пароль.
Чтобы опубликовать вашу гему, введите следующую команду в командной строке (CLI):
gem push <имя вашего нового приложения>
-<версия>
.gem
Пример:
gem push my_new_program-0.1.1.gem
Вывод этой команды отправит гему на RubyGems.org и будет похож на следующий:
Отправка гемы на RubyGems.org...
Успешно зарегистрирована гема: my_new_program (0.1.0)
Вашу гему теперь можно найти, выполнив поиск в сообществе Rubygems, установить и использовать Ruby-пользователями по всему миру.