Есть простые способы создания драгоценных камней и чуть менее простые способы. Я собираюсь использовать «сырой» подход, показав, как создать драгоценный камень с нуля. Позже мы рассмотрим библиотеку, которая сделает за вас большую часть черновой работы.

Давайте сначала создадим простую библиотеку, расширяющую класс String, и поместим ее в файл с именем string_extend.rb:

class String
  def vowels
    scan(/[aeiou]/i)
  end
end

Этот код добавляет к классу String метод vowels, который возвращает массив всех гласных в строке:

"This is a test".vowels

Вывод: ["i", "i", "a", "e"]

Как локальная библиотека в рамках более крупного приложения, она может быть загружена с помощью require или require_relative:

require_relative 'string_extend'

Однако вы хотите превратить его в драгоценный камень, который можно использовать где угодно. Создание драгоценного камня включает в себя три этапа:

1. Структурирование ваших файлов

Прежде чем вы сможете создать гем, необходимо собрать все файлы, из которых вы хотите составить гем. Обычно это делается с помощью стандартной структуры. На данный момент у вас есть файл string_extend.rb, и это единственный файл, который вам нужен в вашем геме.

Во-первых, необходимо создать папку, содержащую все папки драгоценного камня, поэтому вы создаете папку с именем string_extend. В этой папке вы создаете несколько других папок следующим образом:

  • lib: этот каталог будет содержать код Ruby, связанный с библиотекой.
  • test или spec: этот каталог будет содержать любые модульные тесты или другие сценарии тестирования, связанные с библиотекой.
  • doc: это необязательный каталог, который может содержать документацию о библиотеке, особенно документацию, созданную с помощью RDoc или с его помощью.
  • bin: это еще один необязательный каталог, который может содержать системные инструменты и сценарии командной строки, связанные с библиотекой. Например, RubyGems сама устанавливает инструмент командной строки gem; такой инструмент будет помещен в корзину.

В этом примере вы должны поместить string_extend.rb в каталог string_extend/lib. Если у вас есть тесты, документация или сценарии командной строки, поместите их в соответствующие каталоги.

2. Создание файла спецификации

После того, как ваши файлы организованы, пришло время создать файл спецификации, который описывает гем и предоставляет RubyGems достаточно информации для создания окончательного гем. Создайте текстовый файл с именем string_extend.gemspec (или с именем, соответствующим названию вашего проекта) в основной папке string_extend и заполните его следующим образом:

Gem::Specification.new do |s|
  s.name = 'string_extend'
  s.version = '0.0.1'
  s.summary = "StringExtend adds useful features to the String class"
  s.platform = Gem::Platform::RUBY
  s.files = Dir.glob("**/**/**")
  s.test_files = Dir.glob("test/*_test.rb")
  s.authors = ["Your Name"]
  s.email = "[email protected]"
  s.required_ruby_version = '>= 2.0.0'
end

Это базовый файл спецификации. Файл спецификации фактически представляет собой простой сценарий Ruby, который передает информацию в Gem::Specification. Информация, которую он предоставляет, в основном проста, но давайте рассмотрим несколько ключевых областей.

3. Создание драгоценного камня

После того, как файл спецификаций завершен, создание окончательного файла .gem выполняется так же просто:

сборка gem ‹спецификационный файл›

В моем случае:

сборка драгоценных камней string_extend.gemspec

Это заставляет gem создать окончательный файл gem с именем string_extend-0.0.1.gem. Вы можете получить некоторые предупреждения, если отсутствует какая-либо информация. Внимательно прочитайте предупреждение, чтобы определить, как его удалить.

Упрощенное создание драгоценных камней

Bundler позволяет легко управлять зависимостями ваших программ Ruby, но также имеет функцию создания всего шаблонного кода, который вы видели в прошлом примере. Важно знать, как работает этот код, поэтому мы рассмотрели его, но как только вы освоитесь, использование Bundler для автоматического создания файлов сэкономит ваше время.

Создать новый гем с помощью Bundler так же просто, как

комплект драгоценных камней string_extend

Вам будет предложено выбрать среду тестирования, хотите ли вы получить лицензию MIT и хотите ли вы включить кодекс поведения. В следующем выводе я использую RSpec, лицензию MIT и кодекс поведения. Результатом является каталог и набор файлов, а также инициализация репозитория Git:

Инициализация репозитория git в /users/jane/ruby/string_extend

require_relative 'lib/string_extend/version'
Gem::Specification.new do |spec|
  spec.name          = "string_extend"
  spec.version       = StringExtend::VERSION
  spec.authors       = ["Carleton DiLeo"]
  spec.email         = ["[email protected]"]
  spec.summary       = %q{TODO: Write a short summary, because RubyGems requires one.}
  spec.description   = %q{TODO: Write a longer description or delete this line.}
  spec.homepage      = "TODO: Put your gem's website or public repo URL here."
  spec.license       = "MIT"
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
  spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
  spec.metadata["homepage_uri"] = spec.homepage
  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
  spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  spec.files         = Dir.chdir(File.expand_path('..', __FILE__)) do
    `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
  end
  spec.bindir        = "exe"
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]
end

гем установить gem_name

RubyGems.org

RubyGems.org (https://rubygems.org/) — крупнейший репозиторий сообщества для проектов и библиотек Ruby. Он содержит тысячи проектов и действует как централизованное место для размещения драгоценных камней. Почти все основные библиотеки Ruby доступны или размещены там, включая Ruby on Rails.

Если вы хотите, чтобы ваш гем легко устанавливался пользователями, важно разместить его на RubyGems.org. И, к счастью, это совершенно бесплатно.

Чтобы разместить проект на RubyGems.org, вам сначала понадобится учетная запись, но как только вы настроите ее, вы сможете отправить любой действительный гем, созданный на вашем локальном компьютере, на сайт RubyGems.org следующим образом:

gem push your_gems_filename-0.0.1.gem

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

Надеюсь, вы поймете методологию создания гема в рельсах.

Спасибо:)