Статьи

Создание вашего первого драгоценного камня

Вы видите драгоценные камни повсюду в мире Ruby. Они являются основой практически любого приложения на Ruby. Я признаю, что я был немного напуган, когда впервые попытался создать драгоценный камень, но вскоре обнаружил, что он очень прост. В этой серии блогов я начну с рассмотрения основ создания драгоценного камня с нуля, а затем перейду к более сложным темам, включая инструменты для создания драгоценных камней и Rails Engines. Перво-наперво, для всех вас, новичков в Ruby: что такое драгоценный камень? Проще говоря, это упакованный код Ruby. Как минимум, гем включает в себя файл Ruby и гемспек. Gemspec (спецификация gem) описывает gem и используется менеджером пакетов RubyGems для установки gem.

RubyGems

Менеджер пакетов RubyGems может загружать и устанавливать гемы в вашу систему и позволяет использовать гемы в других программах Ruby. Ruby 1.9 поставляется с RubyGems, установленным по умолчанию. Если вы используете версию до Ruby 1.9, вы можете скачать RubyGems здесь . Чтобы использовать RubyGems в приложении до Ruby 1.9, вам нужно добавить эту строку
в вашем приложении:

require 'rubygems'

Ruby 1.9 не нуждается в этой строке, так как RubyGems включен в язык.

Gem Спецификация

Как я упоминал ранее, спецификация драгоценного камня описывает драгоценный камень. Давайте посмотрим на основной файл gemspec:

 Gem::Specification.new do |s|
  s.name = %q{my_gem}
  s.version = "0.0.1"
  s.date = %q{2011-09-29}
  s.summary = %q{my_gem is an awesome gem}
  s.files = [
    "Gemfile",
    "Rakefile",
    "VERSION",
    "lib/my_gem.rb"
  ]
  s.require_paths = ["lib"]
end

Gemspec — это довольно простой файл, который описывает различные аспекты вашего драгоценного камня. Я перечисляю только обязательные атрибуты и файлы в приведенном выше примере gemspec. Первые 4 атрибута говорят сами за себя. Атрибут «files» содержит список всех файлов, которые включены в гем. Атрибут require_paths указывает каталог, содержащий файлы Ruby, которые должны быть загружены с гемом. Полный список атрибутов, которые можно использовать в gemspec, находится здесь .

Это настолько академично, насколько я могу без засыпания, так что давайте перейдем к поиску и перейдем к хорошему.

Создание драгоценного камня с нуля

1. Создайте базовую файловую структуру гема:

Запустите вашу оболочку и создайте каталоги, которые будут необходимы в вашем геме:

 $ mkdir awesome_gem
$ cd awesome_gem
$ mkdir lib

Это оно! Вам нужен корневой каталог для вашего гема и каталог lib для хранения вашего файла Ruby.

2. Создайте gemspec

Мы будем использовать шаблон из предыдущего раздела для нашего файла gemspec. Создайте файл с именем «awesome_gem.gemspec» в корневом каталоге вашего драгоценного камня. Затем добавьте некоторый код для создания правильной gemspec:

 Gem::Specification.new do |s|
  s.name = %q{awesome_gem}
  s.version = "0.0.0"
  s.date = %q{2011-09-29}
  s.summary = %q{awesome_gem is the best}
  s.files = [
    "lib/awesome_gem.rb"
  ]
  s.require_paths = ["lib"]
end

Этот файл содержит стандартные обязательные атрибуты для gemspec и показывает, что у нас есть один файл в каталоге «lib». Файл «awesome_gem.rb» в каталоге lib является основным файлом, который будет использоваться для хранения кода Ruby в этом геме.

3. Добавьте код

Для простоты мы будем использовать только один файл Ruby в этом геме: /lib/awesome_gem.rb
Вы увидите этот тип структуры в большинстве драгоценных камней, с которыми вы сталкиваетесь. Корневой файл внутри «lib» обычно совпадает с именем драгоценного камня. В этом случае «awesome_gem» и «/lib/awesome_gem.rb».

Создайте этот файл и добавьте в него следующий код:

 module AwesomeGem
  class WhoIs
    def self.awesome?
      puts "YOU ARE AWESOME!!"
    end
  end
end

Это не совсем код, который изменит мир, но, по крайней мере, метод «круто?» Поднимет вашу самооценку! Этот гем позволит вам использовать метод класса «awesome?» Из WhoIs в других программах Ruby. Как я упоминал в первом разделе, RubyGems установит гем в ваше приложение и предоставит вам доступ к классам в вашем геме.

4. Сгенерируйте файл gem

Теперь, когда у вас есть какой-то потрясающий код, вы захотите создать гем, чтобы вы могли использовать этот потрясающий код в другой программе Ruby. Rubygems имеет интерфейс командной строки, который позволяет создавать гем. Запустите эту команду в корневом каталоге вашего драгоценного камня:

 $ gem build awesome_gem.gemspec

Эта команда создаст драгоценный камень и выведет файл драгоценного камня, который будет содержать номер версии в имени файла. Поскольку gemspec содержит атрибут версии со значением «0.0.0», файл gem будет называться awesome_gem-0.0.0. Вы должны увидеть следующий вывод и некоторые предупреждения о пропущенных атрибутах:

 Successfully built RubyGem
  Name: awesome_gem
  Version: 0.0.0
  File: awesome_gem-0.0.0.gem

Но вас не волнуют предупреждения, потому что вы живете на грани, и вы «великолепны». Итак, вы решили перейти и установить этот драгоценный камень в вашей системе. Обратите внимание, что файл gem был создан в вашем текущем каталоге.

5. Установите драгоценный камень

Теперь, когда у вас есть гем-файл, вы можете использовать RubyGems для установки гема на свой компьютер. Обычно вы устанавливаете драгоценные камни из внешних источников, но вы не ограничены этим. Если у вас есть доступ к файлу gem, вы можете установить его локально, указав расположение файла gem, который будет установлен. Вот команда для локальной установки awesome_gem.gem:

 $ gem install awesome_gem.gemspec

Вы должны получить следующий вывод:

 Successfully installed awesome_gem-0.0.0
1 gem installed
Installing ri documentation for awesome_gem-0.0.0...
Installing RDoc documentation for awesome_gem-0.0.0...

О да! Вы только что создали драгоценный камень! Gem теперь установлен в вашей системе и готов к использованию в другой программе Ruby.

6. Добавьте Gem в другую Ruby-программу

Создайте новый файл Ruby, который будет использоваться для тестирования нашего драгоценного камня. Давайте назовем это «be_awesome.rb». Вы можете создать этот файл в любом месте вашей системы, а затем добавить следующий код, чтобы мы могли использовать метод класса «awesome?» Из нашего гема. Вам просто нужно указать «awesome_gem», и RubyGems сможет найти камень и сделать класс доступным для вашей программы. Затем вы просто вызываете метод класса из вашего пространства имен. Вот код:

 require 'awesome_gem'

AwesomeGem::WhoIs.awesome?

Теперь вы можете запустить программу Ruby и протестировать ваш недавно созданный гем и посмотреть, насколько вы круты. Запустите его через командную строку:

 $ ruby be_awesome.rb

Вы должны увидеть следующий вывод в вашей оболочке:

 YOUR ARE AWESOME!

Поздравляем, вы только что использовали свой новый драгоценный камень в программе! Я не думаю, что поместил бы это на github и хвастался этим, но эй .. Вы все еще узнали, как создать драгоценный камень с нуля и использовать его в другой программе. Теперь вы можете перейти к большему и лучшему.

Вывод

Хотя это руководство было довольно простым и охватывало только основы создания драгоценного камня, я думаю, что оно все еще является очень важной информацией для тех, кто новичок в разработке драгоценных камней. Основы дадут вам хорошую основу для более сложных тем. Я использую Jeweler для создания драгоценных камней, и хотя это отличный инструмент для повышения производительности, я чувствую, что погружение в инструменты генерации до того, как вы создадите драгоценный камень с нуля, может быть вредным. Вам нужно понять, как построить гем в простейшей форме, прежде чем вы сможете понять, что стоит за кодом, который может дать вам такой инструмент генерации, как Jeweler. Хотя я рекомендую создавать драгоценные камни с нуля, когда вы впервые изучаете разработку драгоценных камней, я не вижу абсолютно никакой причины, по которой вам не следует использовать генератор после того, как вы поймете основы. Генераторы значительно экономят время, поскольку они дают вам хороший каркас для начала. Следующий пост в этой серии будет посвящен более сложным темам, связанным с разработкой драгоценных камней, а также ознакомит вас с использованием инструментов генерации, чтобы дать вам отправную точку для ваших драгоценных камней. В следующих статьях будет рассказано, как вы разрабатываете гемы для Ruby on Rails.

Будьте на связи….