当给一个由多个单词组成的宝石命名时,应该使用破折号还是下划线?

62

当gem名称有多个单词时,我对gem命名约定感到困惑。

  • thinking-sphinx是该gem的名称,但此gem的基本*.rb文件为lib/thinking_sphinx.rb(下划线)

  • acts-as-taggable-on是该gem的名称,基本的*.rb文件称为lib/acts-as-taggable-on.rb(连字符)

  • factory_girl在gem名称和基本*.rb文件的名称中都使用下划线

是否使用下划线或连字符有关系?这里是否有任何共识?

2个回答

55

Eric Hodel在他的博客发布了一篇文章:一个项目命名建议

Rails巩固了将CamelCase类名映射为下划线文件名的约定(class IMAPProcesor被定义在imap_processor.rb中)。使用下划线命名的gem名称使人们很容易找到要require的文件(与项目名称相同),或者在ri中查找哪个类名。

如果我有一个插件gem或扩展,我会在子项目名称后面添加一个破折号。如果我想为Chase银行电子邮件添加一个新的imap_to_rss处理程序,那么gem将被命名为imap_to_rss-chase。


5
这符合官方Ruby Gems指南中的建议-一致的命名 - stevenharman
那么yajl-ruby或bcrypt-ruby呢?它们是现有C库的Ruby封装。我确实希望在我的代码中使用简单的require 'bcrypt',但我不想将我的github项目命名为“yajl”或“bcrypt”,因为这些名称(可能)已经被原始的C库占用了。 - dubek
1
这个指向 Eric Hodel 文章的链接已经失效了。我试图在网上找到它,但在三分钟的谷歌搜索中没有成功。 - gardenofwine

38

按照这里的建议,以下是一个表格,展示了如何分解:

宝石名称 要求语句 主类或模块
fancy_require require 'fancy_require' FancyRequire
ruby_parser require 'ruby_parser' RubyParser
net-http-persistent require 'net/http/persistent' Net::HTTP::Persistent
rdoc-data require 'rdoc/data' RDoc::Data
autotest-growl require 'autotest/growl' Autotest::Growl
net-http-digest_auth require 'net/http/digest_auth' Net::HTTP::DigestAuth

我创建了一个名为tout_suite的gem,但我仍然需要使用require 'tout/suite'来引用它。有任何想法吗?我正在使用ruby 2.0和rails 4.1.1。 - gardenofwine
@gardenofwine,主类或模块是什么?你的宝石文件结构是什么样子的?这些决定了宝石应该被命名为什么,而不是反过来。 - user160917
1
这对我来说很有效.. 我创建了一个名为calabash-shared的gem,我必须要求 'calabash/shared' - 请查看此文章以创建gems http://www.smashingmagazine.com/2014/04/08/how-to-build-a-ruby-gem-with-bundler-test-driven-development-travis-ci-and-coveralls-oh-my/ - Tejasvi Manmatha

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