Данная статья рассчитана на тех, кому интересен язык Ruby, и хочется создать собственный Gem.*
Условные обозначения: • gem — гем
В данной статье мы создадим гем расчета чисел Фибоначчи.
Прежде всего необходимо установить bundler, он все подготовит для разработки собственного гема.
gem install bundlerПосле установки вводим команду:
bundle gem <имя_разрабатываего_гема>выбрать инструмент для тестирования кода (rspec/minitest/none);
выбрать тип распространения пакета (лицензия);
создать пользовательское соглашение.
Рассмотрим созданный bandler’ом каркас поподробней:
bin/console — запуск ruby консоли с загруженным гемом fib; bin/setup — описание необходимых действий и зависимостей для * установки гема, в данном случае — bundle install;
lib/fib/version.rb — константа, описывающая версию гема;
lib/fib/fib.rb — основные функции гема;
spec/*_spec.rb — тесты; spec/spec_helper.rb — набор функций, необходимый для запуска * тестов;
.gitignore — сообщает git, какие файлы (или шаблоны) он должен * игнорировать;
.rspec — файл конфигурации тестов rspec;
.travis.yml — файл конфигурации CI travis;
fib.gemspec — файл конфигурации/описания гема Fib;
Gemfile — файл зависимостей/подключения gem’ов;
LICENSE.txt — лицензия гема Fib;
Rakefile — предоставляет DSL для написания задач на ruby, * которые можно запускать из командной строки;
Создадим репозиторий (на github, bitbucket и т.п.). Неважно где, он нам понадобится, чтобы указать домашнюю страницу в спецификации гема (fib.gemspec).
Теперь, когда bundler создал нам все необходимые файлы, заполняем информацию в файле спецификации fib.gemspec: указываем автора, его электронную почту, краткое и полное описание гема, домашнюю страницу.
spec.authors = [“Dmitry Shpagin]
spec.email = [“sofakingcode@gmail.com”]
spec.summary = %q{This gem does calculate Fibonacci number}
spec.description = %q{Long description}
spec.homepage = “<ссылка_на_репозиторий>”
Давайте применим методологию TDD, при которой сначала пишется тест, а потом код. В папке spec генератором создан fib_spec.rb, в нем уже по умолчанию есть тест на проверку номера версии гема, добавим полезные для нас тесты: первое и второе числа Фибоначчи равны 1, третье равно 2, а двадцатое равно 6765.
it"Fib first number equal 1"doexpect(Fib.number(1)).toeq(1)endit"Fib second number equal 1"doexpect(Fib.number(2)).toeq(1)endit"Fib third number equal 2"doexpect(Fib.number(3)).toeq(2)endit"Fib 20th number equal 6765"doexpect(Fib.number(20)).toeq(6765)endДальше добавим в файл lib/fib.rb метод number, который принимает аргумент n (номер числа Фибоначчи). Запустим тесты командой rspec, тесты должны провалиться.
Теперь допишем реализацию метода number. Листинг fib.rb представлен ниже.
moduleFibextendselfdefnumber(n)ifn > 2thennumber(n-1)+number(n-2)else1endendendЕсли заново запустим тесты, то они должны быть успешно пройдены.
На данном этапе наш гем готов. Далее перейдем в корень папки и выполним следующую команду:
rake install
В результате гем будет собран и помещен в папку pkg. Он так же будет сразу установлен в систему.
Проверим работоспособность гема, запустим консоль руби:
# Подключим только что созданный гемrequire'fib'Fib.number(15)=>610В следующей статье мы доработаем гем в CLI пакет, после чего опубликуем его на rubygems.



