Ruby gem 命名规范

42
我在创建一个 Ruby Gem,但我注意到似乎没有(据我所知)针对 Gems 的命名规范。例如,我见过以下两种写法:

我正在创建一个 Ruby Gem,但我注意到似乎没有(据我所知)针对 Gems 的命名规范。例如,我见过以下两种写法:

gem 'foo-bar'
gem 'foo_bar'

是否有关于命名Ruby gems的权威指南/约定?


可能会有帮助:https://shivab.com/blog/ruby/2019/08/30/convert-your-ruby-script-to-a-ruby-gem/ - Shiva
4个回答

70

虚线版本用于其他框架的扩展,如rspec-rails,下划线版本用于普通宝石名称的一部分,并且应在类中使用驼峰命名法。

因此,如果您有一个名为foo_bar的宝石,那么类/模块的名称应为FooBar。 如果该宝石应该有一个作为不同宝石发行的rails扩展,那么它应该被称为foo_bar-rails,并且该模块应该被称为FooBar :: Rails,并且应该被要求为require "foo_bar/rails"

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

诚然,这个约定并不总是被遵循。 jquery_rails实际上应该叫做jquery-rails,而factory_girl_rails应该被称为factory_girl-rails。 但是嘿,不是所有的事情都是完美的。

RubyGems约定文档:


5
这得益于 rubygems patterns 文档的支持,链接在这里:http://guides.rubygems.org/patterns/。 - turboladen
1
关于这个话题的一次相当古老但有趣的讨论可以在 bundler 的 GitHub 存储库中找到:https://github.com/bundler/bundler/issues/1255 - thutt

5
原来,在rubygems文档中已经非常清晰和简洁地回答了这个问题:http://guides.rubygems.org/name-your-gem/
(可能是最近才添加的文档,因为我记得在过去搜索此信息时没有找到。)

4

唯一的好处就是把 foo_bar 转换为模块或类 FooBar,对于自动加载程序而言这是惯例。但是,foo-bar 没有默认的等效项。

一般来说,从 require 的角度来看,下划线版本更可取,但破折号版本确实更易读,因此经常被使用。


5
虚线版本更易读吗? 对我来说看起来完全错误,哪种语言的标识符可以包含破折号呢? - Nemo157
@Nemo157 - 例如在CLIPS中。我曾经用它编程,标识符中有破折号是很好的。您不需要按<SHIFT +“-”>来获取“_”,而且您可以编写类似这样的内容:purple-cow_painter-module,cat_painter-module(我使用“_”将事物分隔开)。 - Szymon Jeż

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接