На rubygems.org есть несколько хороших руководств, которые познакомят вас с конвенциями и обоснованием некоторых из них. В целом, соглашения об именах и каталогах Rubygems соблюдаются большинством разработчиков Ruby.
Я бы создал пользовательские классы исключений, только если бы я не смог найти ни одного класса в стандартной библиотеке, соответствующей описанию ошибки. Вложите свой класс ошибок в класс или модуль, который его вызывает:
class Parser::Error < RuntimeError; end
begin
Parser.new(:invalid).parse!
rescue Parser::Error => e
puts e.message
end
Модульные тесты входят либо в /test
, если вы используете Test::Unit
, либо в /spec
, если вы используете RSpec
. Я рекомендую последнее.
Bundler
- это отличный способ управления траекторией загрузки. Он автоматически настроит вашу среду, используя только зависимости, указанные в Gemfile
и, необязательно, gemspec
. Это также позволяет вам легко require
ваш код, не делая его драгоценным камнем.
Однако, поскольку в будущем вы можете связать свой код с гемом, я рекомендую изучить , как создать спецификации гема . Вы должны написать свою спецификацию вручную. Не используйте какой-либо инструмент для его автоматической генерации - это, на мой взгляд, подходы грубой силы, которые бесполезно дублируют информацию и наносят ущерб при использовании с контролем версий.
Я создал камень , который может оказаться полезным. Имея файл gemspec
, он определяет множество полезных задач Rake
для работы с вашим гемом, в том числе задачи по сборке, установке и выпуску вашего гема в репозиторий rubygems
и git
с автоматическим тегированием версий. Он также предоставляет простой способ загрузки кода в сеансе irb
или pry
.
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!