Skip to content

Latest commit

 

History

History
105 lines (69 loc) · 5.85 KB

ruby_gem_publish.md

File metadata and controls

105 lines (69 loc) · 5.85 KB

CLI Gem, публикация на rubygems

В предыдущей статье мы написали небольшой гем для вычисления чисел Фибоначчи. В этой статье мы доработаем его в CLI приложение, немного доработаем исходный код, чтобы ускорить подсчет чисел Фибоначчи и опубликуем все это дело на rubygems.

Для начала в корневой папке гема создадим новую папку. Назовем её exe. В этой папке создадим файл для вызова из консоли, обычно имя файла совпадает с именем гема.

Предоставим этому файлу права на исполнение, чтобы мы смогли запускать его:

    chmod +x exe/fib 

В файле описываем что должно происходить при вызове нашей утилиты:

    #!/usr/bin/env ruby   # указываем консоли, что используем интерпретатор руби

    require 'fib' 

    # ARGV - массив параметров, берем первый аргумент
    puts Fib.number(ARGV[0].to_i) 

Дальше собираем гем командой:

    rake install

Теперь, когда гем собран и установлен в систему, перезапустим терминал и попробуем запустить утилиту:

Рис. 1. Использование гема в CLI режиме Использование гема в CLI режиме

Теперь допишем пару тестов, в ходе тестирования выяснилось, что в CLI режиме результат возвращается в виде строки с символом переноса строки, поэтому тест выглядит так:

    it “CLI Fib 32th number equal 2178309 do
      expect(%x{Fib 32}).to eq(“2178309\n)
    end

Запустим тесты, убедимся, что все работает:

Рис. 2. Успешно пройденные тесты Успешно пройденные тесты

Рекурсия это, конечно, хорошо, но в нашем алгоритме есть как минимум две проблемы. Во-первых, мы рискуем получить ошибку переполнения стека вызовов, а во-вторых, мы расходуем больше памяти и увеличиваем время выполнения нашей программы. Давайте доработаем алгоритм и убедимся, что логика не изменилась, что все тесты выполняются успешно.

    def number(n)
      (0..n-2).reduce([0,1]) do |acc, n|
        acc = [acc.last, acc.sum]
      end.last
    end

Регистрация на rubygems

Переходим на страницу регистрации, вводим учетные данные, жмём Sign up и готово!

Рис. 3. Форма регистрации rubygems Форма регистрации rubygems

Подготовка к публикации

Перед публикацией гема необходимо внести пару правок в файле fib.gemspec:

  1. Необходимо проверить, существует ли гем с таким же именем, как у вашего. Если да, то вы не сможете опубликовать свой, пока не измените его имя в параметре spec.name

  2. В файле спецификации существует заглушка, которая не позволит опубликовать гем в каким-либо репозитории.

Рис. 4. Заглушка на публикацию гема Заглушка на публикацию гема

Необходимо указать доменное имя нужного репозитория, либо удалить этот блок кода для публикации в различных репозиториях.

Гем с именем fib занят, поэтому я переименовал его в fib_test, чтобы люди понимали, что это тестовый/учебный гем, и устанавливать его не стоит

Публикация гема

Сначала необходимо собрать гем с обновленной спецификацией, делаем это командой rake build

    rake build

    # => fib_test 0.2.0 built to pkg/fib_test-0.2.0.gem.

Дальше командой gem push мы опубликуем его на rubygems.

Во время выполнения надо будет ввести почту и пароль, указанную при регистрации

    gem push pkg/fib_test-0.2.0.gem
    Enter your RubyGems.org credentials.
    Don’t have an account yet? Create one at [https://rubygems.org/sign_up](https://rubygems.org/sign_up)
    Email: [email protected]
    Password: **************
    Signed in.
    Pushing gem to [https://rubygems.org...](https://rubygems.org...)
    Successfully registered gem: fib_test (0.2.0)

Теперь гем доступен по ссылке: https://rubygems.org/gems/fib_test