Ruby的gem命名约定

我创build了一个ruby,我注意到似乎没有(据我所知)gem的命名约定。 例如,我已经看到:

gem 'foo-bar' gem 'foo_bar' 

是否有一些明确的gem命名指南/公约?

虚线的版本适用于其他框架的扩展,比如rspec-rails ,下划线是正常的gem名字的一部分,应该在你的类中join。

所以如果你有一个名为foo_bar的gem,那么类/模块应该被命名为FooBar 。 如果这个gem应该有一个作为不同gem出货的rails扩展,应该叫做foo_bar-rails ,模块应该叫做FooBar::Rails ,它应该被要求为require "foo_bar/rails"

这个约定也是Bundler试图要求的。

诚然,这个惯例并不总是遵循。 jquery_rails实际上应该是jquery-railsfactory_girl_rails应该叫factory_girl-rails 。 但是,嘿,不是一切都是完美的。

RubyGems公约文档:

  • 命名gem
  • 命名模式
  • 做你自己的gem

原来,这个问题在rubygems文档中得到了非常清晰和简洁的回答: http : //guides.rubygems.org/name-your-gem/

(这可能是最近的文档添加,因为我记得过去search这个信息,没有find它。)

其中一个好处就是将自动加载器的foo_bar合并到模块或类FooBar中。 foo-bar没有默认的等价物。

一般来说,从requireangular度来看,下划线的版本是可取的,但是虚线的版本确实更具可读性,所以经常使用它。

在@svenfuchs的build议中:

  • 下划线 =>骆驼化
  • hyphen => name :: space

https://twitter.com/svenfuchs/status/135773593526206464

但是,我确实仍然看到非连贯的行为,如:

 gem 'my_gem`, :require => 'my-gem' 

https://twitter.com/#!/svenfuchs/status/135784542819713024