Ruby gem命名约定

时间:2012-01-22 04:18:18

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems

我创造了一颗红宝石,并且我注意到(据我所知)宝石的命名惯例似乎并不存在。例如,我见过两者:

gem 'foo-bar'
gem 'foo_bar'

是否有某种明确的指南/惯例用于命名红宝石宝石?

4 个答案:

答案 0 :(得分:66)

虚线版本用于其他框架的扩展,例如rspec-rails,下划线是普通宝石名称的一部分,应该在您的类中加入。

因此,如果您有名为foo_bar的宝石,则类/模块应命名为FooBar。如果该gem应该具有作为不同gem运行的rails扩展,则应该将其称为foo_bar-rails,并且该模块应该被称为FooBar::Rails,并且应该被要求为require "foo_bar/rails"

此约定也是Bundler试图要求的。

诚然,并不总是遵循这一惯例。 jquery_rails实际应该是jquery-rails,而factory_girl_rails应该被称为factory_girl-rails。但是,嘿,并非一切都很完美。

RubyGems惯例文档:

答案 1 :(得分:5)

事实证明,在rubygems文档中可以非常清楚和简洁地回答这个问题:http://guides.rubygems.org/name-your-gem/

(这可能是最近添加的文档,因为我记得在过去搜索此信息而未找到它。)

答案 2 :(得分:4)

一个优点是,就自动加载器而言,将foo_bar折叠到模块或类FooBar中的惯例。 foo-bar没有默认的等价物。

通常情况下,下划线版本从require角度来看是优选的,但虚线版本确实更具可读性,因此它往往会被频繁使用。

答案 3 :(得分:4)

在@svenfuchs的推荐中:

  • 下划线 =>骆驼源化
  • 连字符 =>名::空间

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

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

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

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