Как создать gem и опубликовать его

Vladislav Kopylov
3 min readFeb 26, 2017

--

Введение

В процессе работы каждый ruby-разработчик пользуется сторонними библиотеками (так называемые гемы). Не всегда получается найти гем с нужным функционалом, в таких ситуациях приходится писать собственное решение. Чаще всего такие решения не входят за рамки проекта, но иногда разработчики задумываются о том чтобы обернуть свое решение в гем и поделится им с сообществом.

У меня возникла потребность парсить мета-теги на веб-странице. Найденные готовые решения не удовлетворяли меня, потому я написал свой модуль. Для полного счастья не хватало обернуть решение в гем, чем я и занялся. Результаты работы можно посмотреть по ссылке:

Данное руководство написано с целью помочь начинающим разработчикам. Оно является пересказом собственного опыта. Более подробную информацию можно получить на сайте официального руководства http://guides.rubygems.org

Начало работы

Для начала нужно создать новый каталог который будет содержать код с нужным функционалом. Так как решение состоит из одного модуля, его следует положить в папку lib/

В корне проекта создаем Gemfile и прописываем там версию ruby и необходимые зависимости. После этого ставим их через bundle install.

Очень рекомендую написать юнит тесты. Они должны быть в папке test/ или spec/

После того как функционал написан, покрыт тестами и протестирован, начинаем создавать гем. Прописываем стандартный .gitignore и коммитим наш код.

Выкладываем его на github

git remote add origin git@github.com:USER_NAME/REP_NAME.gitgit push -u origin master

Создаем файл с описанием гема GEM_NAME.gemspec куда прописываем всю необходимую информацию включая название, описание, версию, ссылки, зависимости, и файлы.

Пробуем собрать свой гем.

$ gem build meta_information.gemspec
Successfully built RubyGem
Name: meta_information
Version: 1.0.1
File: meta_information-1.0.1.gem

Проверим установку только что собранного гема.

$ gem install ./meta_information-1.0.1.gem
Successfully installed meta_information-1.0.1
Parsing documentation for meta_information-1.0.1
Done installing documentation for meta_information after 0 seconds
1 gem installed

Обязательно проверим работоспособность в консоли.

$ irb
2.3.3 :001 > require 'meta_information'
=> true
2.3.3 :002 > MetaInformation::VERSION
=> "1.0.1"
2.3.3 :006 > MetaInformation.get_meta('https://www.yandex.ru’)

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

$ curl -u USER_NAME https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials

Обновляем репозиторий на github

$ git add —all
$ git commit
$ git push origin master

Публикуем гем и проверяем что он доступен

$ gem push meta_information-1.0.1.gem
$ gem list -r meta_information

Если все прошло удачно, то он доступен по прямой ссылке (rubygems.orb/gems/GEM_NAME).

Пример: https://rubygems.org/gems/meta_information

Ура, гем удачно опубликован 🎉 , теперь его можно смело установить следующей командой.

$ gem install meta_information

Дальнейшие обновления гема

Со временем каждый гем развивается, к нему добавляется новый функционал, убираются ошибки, на github появляются issues которые надо решить и pull-requests которые надо мерджит. Все это являются предпосылками к новому релизу. Для того чтобы выложить новый релиз на rubygems, нужно повторять следующие действия.

Обновить .gemspecfile. В нем нужно как минимум обновить версию. После этого снова собрать обновленный гем, проверить установку и работу.

$ gem build meta_information.gemspec
$ gem install ./meta_information-1.0.2.gem

Если все работает то опубликовать новую версию.

$ gem push meta_information-1.0.2.gem

Вот, собственно все. Ниже публикую полезные ссылки с подробной информацией.

Publishing your gem: http://guides.rubygems.org/publishing/

Specification reference: http://guides.rubygems.org/specification-reference/

--

--

Vladislav Kopylov
Vladislav Kopylov

Responses (1)