Should one use dashes or underscores when naming a gem with more than one word?

RubyNaming Conventions

Ruby Problem Overview


I'm confused about what the gem naming convention is when the gem name has more than one word.

  • thinking-sphinx is the name of the gem, but the base *.rb file for this gem is lib/thinking_sphinx.rb (underscores)

  • acts-as-taggable-on is the name of the gem, and the base *.rb file is called lib/acts-as-taggable-on.rb (hyphens)

  • factory_girl uses an underscore in both the gem name and in the name of the base *.rb file

Does it matter if one uses underscores or hyphens? Is any emerging consensus here?

Ruby Solutions


Solution 1 - Ruby

Eric Hodel has a blog post on this: A Project Naming Recommendation

> Rails solidified the convention of > mapping CamelCase class names to > underscored file names (class > IMAPProcesor is defined in > imap_processor.rb). Using underscored > gem names makes it easy for people to > figure out what file to require (same > as the project name) or what class > name to look for in ri. > > If I have a plugin gem or an extension > I’ll tack on the sub-project’s name > with a dash. If I wanted to add a new > handler for imap_to_rss for Chase bank > email, the gem would be named > imap_to_rss-chase.

Solution 2 - Ruby

Following the advice here, here is a table of how things would break down:

Gem name Require statement Main class or module
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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondanView Question on Stackoverflow
Solution 1 - RubyAndrew GrimmView Answer on Stackoverflow
Solution 2 - Rubyuser160917View Answer on Stackoverflow