Соглашения о присвоении имен в Ruby gem
Я создаю рубиновый драгоценный камень, и я заметил, что, похоже, не существует (насколько мне известно) соглашения об именах для драгоценных камней. Например, я видел оба:
gem 'foo-bar'
gem 'foo_bar'
Есть ли какое-то окончательное руководство/конвенция для обозначения рубиновых камней?
Ответы
Ответ 1
Пунктирная версия предназначена для расширений на других фреймворках, таких как rspec-rails
, а подчеркивание - для части нормального имени жемчужины и должно быть на камне в ваших классах.
Итак, если у вас есть драгоценный камень с именем foo_bar
, класс/модуль должен иметь имя FooBar
. Если этот жемчуг должен иметь расширение рельсов, которое поставляется в качестве другого драгоценного камня, его следует называть foo_bar-rails
, а модуль следует называть FooBar::Rails
, и он должен быть необходим как require "foo_bar/rails"
Это соглашение также требует Bundler.
По общему признанию, это соглашение не всегда соблюдается. jquery_rails
должно быть jquery-rails
и factory_girl_rails
должно называться factory_girl-rails
. Но эй, не все идеально.
Документы конвенции RubyGems:
Ответ 2
Оказывается, что на это правильно и лаконично даны ответы в документах rubygems: http://guides.rubygems.org/name-your-gem/
(Это может быть последнее дополнение к доктору, потому что я помню, что искал эту информацию в прошлом и не нашел ее.)
Ответ 3
Единственным преимуществом является соглашение о сворачивании foo_bar
в модуль или класс FooBar
в том, что касается автозагрузчиков. foo-bar
не имеет эквивалента по умолчанию.
В общем случае вариант подчеркивания предпочтительнее с точки зрения require
, но пунктирная версия встречается как более читаемая, поэтому она часто используется часто.
Ответ 4
В рекомендации @svenfuchs:
- подчеркивание = > camelized
- дефис = > имя: пробел
https://twitter.com/svenfuchs/status/135773593526206464
Но это правда, что я все еще вижу поведение, не связанное с когерентностью, например:
gem 'my_gem`, :require => 'my-gem'
https://twitter.com/#!/svenfuchs/status/135784542819713024