Каков современный способ структурирования рубинового драгоценного камня?

Много изменилось с выпуском Bundler? Есть ли шаблон, который можно использовать в качестве базы? Каковы наилучшие методы?

Ответ 1

Некоторые сообщения, которые я нашел полезными:

Изменить (2012-01-10): превосходный всесторонний справочник по лучшим практикам: Руководство по RubyGems. Я настоятельно рекомендую начать здесь.

Подводя итог ключевым моментам:

  • Используйте базовую структуру lib/gem.rb и lib/gem/ для кода.
  • Поместите любые исполняемые файлы в bin, любые файлы данных в data и тесты в test или spec.
  • Не require или зависит от файлов, находящихся за пределами пути загрузки. (VERSION файлы часто, кажется, живут в нечетных местах в драгоценных камнях.)
  • Не require 'rubygems'.
  • Не вмешивайтесь в $LOAD_PATH.
  • Если вы написали require File.join(__FILE__, 'foo', 'bar'), вы делаете это неправильно.

Ответ 2

Самый простой способ использовать bundler:

bundle gem <gem_name>

Вы даже можете использовать его в существующем проекте из родительского каталога.

Ответ 3

При написании жирных (двоичных) драгоценных камней структура обычно такова:

lib/1.8/binary.so

lib/1.9/binary.so

lib/my_gem.rb (этот файл просто выбирает загрузку binary.so в зависимости от версии ruby)

И для собственных расширений:

lib/ext/my_gem/my_sources.*

lib/my_gem.rb

Я также обычно помещаю файл version.rb здесь:

lib/my_gem/version.rb

и он просто содержит что-то вроде:

module MyGem
    VERSION = "0.1.0"
end

Кроме того, IMO, не помещайте файлы .rb кроме файла, который вы хотите использовать для загрузки драгоценного камня, в каталог lib/. Вместо этого поместите все вспомогательные файлы в lib/my_gem/

Ответ 4

Совет Telemachus хорош. Если вы последуете за ним, ваш драгоценный камень будет настроен так, чтобы хорошо играть с поставщиком.

Вы также можете попробовать использовать ювелир. Это драгоценный камень, который генерирует скелеты для драгоценных камней. Скелет по умолчанию, который он выплевывает, соответствует всем соглашениям Telemachus, упомянутым, и он также будет делать некоторые приятные вещи, например, добавить вашу любимую тестовую среду или создать репозиторий GitHub.

Ответ 5

Этот руководство rubygems содержит информацию о структуре драгоценного камня, а затем подробно рассказывает о том, что должно быть включено в ваш gemspec

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

bundle gem <gem_name>

my_gem$ bundle gem my_gem create my_gem/Gemfile create my_gem/Rakefile create my_gem/LICENSE.txt create my_gem/README.md create my_gem/.gitignore create my_gem/my_gem.gemspec create my_gem/lib/my_gem.rb create my_gem/lib/my_gem/version.rb Initializing git repo in /Users/keith/projects/my_gem/my_gem