Should one use dashes or underscores when naming a gem with more than one word?
RubyNaming ConventionsRuby 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 |