Знакомство с Gem. Часть первая

    Доброго времени суток!

    Введение


    Каждый рубист, да и вообще программист, рано или поздно начинает задумываться о написании своих библиотек. Ему начинает надоедать перетаскивание одних и тех же кусков кода в другие проекты. В Ruby лекарством от данного заболевания являются gem'ы. Итак, давайте познакомимся с ним поближе.


    С чего начать


    Для начала неплохо было бы отыскать запылившийся файлик с расширением .rb. Нашли? Ok, двигаемся дальше.
    Далее нам необходимо создать файл с названием hello-world.gemspec, где, как вы, вероятно, догадались hello-world — имя вашего будущего gem'a.
    Следующим нашим шагом будет заполнение этого самого файла (если так можно выразиться, файла-спецификации). Содержание его должно выглядеть следующим образом:
    Gem:Specification.new do |g|
         g.name = 'hello-world' # имя нашего gem'a
         g.version = '1.0' # его текущая версия
         g.summary = 'This is the first gem in my life.' # описание... сами знаете чего
         g.files = ['lib'/helloworld.rb'] # список файлов
         g.author = 'krovatti' # и, разумеется, автор... как же без него...
    end
    

    Отлично, но собирать то нам пока нечего! Почему? Мы забыли создать helloworld.rb. Давайте немедленно исправим нашу оплошность:
    class HelloWorld
         def initialize
              puts "Hello, World!'
         end
    end
    

    Фуууух! Теперь, когда мы имеем минимальный набор файлов, мы можем приступить к сборке нашего с вами gem'a. Для его сборки мы должны использовать команду
    gem build hello-world.gemspec
    

    В случае удачного выполнения данной операции на выходе мы получим файл с название hello-world-1.0.gem. Всё, наш gem собран.

    Постойте-ка


    Вы хотите поделиться своим gem'ом с другими людьми? Если да, то вы запросто можете это сделать следующей командой:
    gem push hello-world-1.0.gem
    

    После выполнения этой команды мы должны увидеть следующее:

    Pushing gem to RubyGems.org...
    Successfully registered gem: hello-world (1.0)

    Увы, мы этого не увидим. Знаете почему? Потому, что мы с вами ещё не зарегистрированы на RubyGems. Сделать это можно здесь.
    Теперь повторите команду push и всё будет ok.

    All over the world


    Теперь наш gem сможет установить любой рубист (хоть из Австралии), выполнив команду
    gem install hello-world
    

    После того, как установка будет завершена напишем следующий код и выполним его:
    require 'rubygems'
    require 'hello-world'
    
    inst = HelloWorld.new
    

    В результате чего мы увидим заветное
    Hello, World!
    в нашей консоли.

    Стопэ!


    Вообще-то мы наследили на RubyGems. Вы же об этом не забыли? Удалим наш gem следующей командой:
    gem yank hello-world -v 1.0
    

    Да и из нашего списка gem'ов можно удалить. Поигрались и хватит!
    gem uninstall hello-world -v 1.0
    


    Заключение


    Вот и сказочке конец, а кто слушал — молодец.
    Сегодня мы с вами познакомились с поистине замечательным инструментом по имени gem. Теперь вы знаете, что если что-то случиться, gem обязательно придёт к вам на помощь. А Чип, Чип, Чип… И Дейл к нам спешат...

    Поделиться публикацией

    Похожие публикации

    Комментарии 31
      +2
      А что с конфликтом имен?
        +1
        Если на RubyGems уже имеется gem с таким именем, то при попытке push'a нам выдаст ошибку.
        +3
        А мне bundler больше нравится — нормальный шаблон создаст, добавит нужных rake task-ов и все сам опубликует в пару движений
          0
          Я тоже пользуюсь bundler'ом. Целью данного топика я ставил лишь начальное ознакомление.
            0
            В следующем топике расскажу о самих свойствах спецификации, а потом уже и рассмотри текущие средства, с помощью которых можно всё сделать в два клика.
            +2
            Завидую, в питоне все жостче.
              +2
              Да, знаю. Я хоть и рубист, но и с python достаточно хорошо знаком. Надеюсь, что о «жостче» когда-нибудь расскажет G0ran
                +2
                Ну Игорь-то раааскажет :)
                  +2
                  Расскажет. Куда он денется.
              +2
              В питоне можно запустить архив на выполнение, например «python file.egg» выполнит из архива «file.egg» файл "__main__.py". Есть ли для гемов что-то похожее?
                0
                Если честно, не знаю. Не приходилось сталкиваться, но завтра поэкспериментирую.
                  +1
                  Всё же нет, т.к. гем нельзя запустить.
                    0
                    Несмотря на то, что гем — по сути тот же архив, запускать напрямую его нельзя. Его моего только заrequireть, а потом использовать готовые в нём классы.

                    require 'hello-world'
                    inst = HelloWorld.new
                    
                      +1
                      Не совсем так. Гем — это не только библиотека, но также дополнительно возможны документация, бинарники, тесты и нативный код.
                        0
                        Библиотека, в которой содержится всё необходимое. Во второй части рассмотрю все возможные свойства в файле спецификации. Будем составлять документацию.
                      +1
                      гем это скорее библиотека
                        0
                        Гем — это библиотека (по типу использования) — согласен. Архив (по типу файлов) — в нем содержатся файлы в сжатом виде. :)
                      +1
                      а мне мультик понравился))))
                        0
                        А пост? :)
                          +2
                          мультик — приятное дополнение)) как переменка после урока))
                        0
                        Спасибо за мультик )
                          +1
                          Спасибо, все просто и интересно написано!
                          Если можно, в том же стиле, про гитхаб :)
                            0
                            Спасибо. Ваши комментарии для меня — высшая оценка. Про гитхаб… в каком смысле? Вернее, что именно в нем интересует.
                              0
                              Должен признаться, совсем недавно с гитом познакомился. Всё просто и очень просто. Расскажу. Добавил в ToDo лист.
                              +4
                              Интересно, а эти бурундуки хоть раз гайку… как бы это… накручивали?
                                0
                                Кто знает…
                                  +1
                                  > Сделать это можно здесь.

                                  Ссылка неверная (.org а не .com)
                                    0
                                    Да, прошу прощения. Ошибся.
                                      0
                                      А исправить?
                                    0
                                    что-то подсказывает мне, что в этой строчке:

                                    g.files = ['lib'/helloworld.rb'] # список файлов

                                    не совсем верно все )
                                      0
                                      Т.е. попросту говоря, Gem это и есть библиотека или набор библиотек?

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое