How to Name Gems - A STRONG Recommendation

If you went to the first round of RubyConf lightning talks you saw me say this already, but I got enough applause that this needs wider dissemination.

Here is my STRONG recommendation on how to name gems:

== Use underscores

* fancy_require
* newrelic_rpm
* ruby_parser

This matches the file the user will require and makes it easier for the user to start using your gem. gem install my_gem will be loaded by require 'my_gem'.

== Use dashes for extensions

* net-http-persistent
* rdoc-chm
* autotest-growl

If you're adding functionality to another gem use a dash. The dash is different-enough from an underscore to be noticeable. If you tilt the dash a bit it becomes a slash as well, making it easier for the user to know what to require. gem install net-http-persistent becomesrequire 'net/http/persistent'

== Don't use UPPERCASE letters

OS X and Windows have case-insensitive filesystems by default. Users may mistakenly require files from a gem using uppercase letters which will be non-portable if they move it to a non-windows or OS X system. While this will mostly be a newbie mistake we don't need to be confusing them more than necessary.

If you would like to pass this around outside the list I've got this on my blog as well:

Short: http://bit.ly/gem_names
Long: http://blog.segment7.net/articles/2010/11/15/how-to-name-gems

Also, don't forget to name your gem after something common to the outside-world. Really common. Plugging up Google is a team effort, people.

Scott

···

On Nov 15, 2010, at 2:19 PM, Eric Hodel wrote:

If you went to the first round of RubyConf lightning talks you saw me say this already, but I got enough applause that this needs wider dissemination.

Here is my STRONG recommendation on how to name gems:

== Use underscores

* fancy_require
* newrelic_rpm
* ruby_parser

This matches the file the user will require and makes it easier for the user to start using your gem. gem install my_gem will be loaded by require 'my_gem'.

== Use dashes for extensions

* net-http-persistent
* rdoc-chm
* autotest-growl

If you're adding functionality to another gem use a dash. The dash is different-enough from an underscore to be noticeable. If you tilt the dash a bit it becomes a slash as well, making it easier for the user to know what to require. gem install net-http-persistent becomesrequire 'net/http/persistent'

== Don't use UPPERCASE letters

OS X and Windows have case-insensitive filesystems by default. Users may mistakenly require files from a gem using uppercase letters which will be non-portable if they move it to a non-windows or OS X system. While this will mostly be a newbie mistake we don't need to be confusing them more than necessary.

If you would like to pass this around outside the list I've got this on my blog as well:

Short: http://bit.ly/gem_names
Long: http://blog.segment7.net/articles/2010/11/15/how-to-name-gems

Puns intended, but this post is really a gem!

Cheers,
Mohit.
16/11/2010 | 7:00 PM.

···

On 16/11/2010 6:19 AM, Eric Hodel wrote:

If you went to the first round of RubyConf lightning talks you saw me say this already, but I got enough applause that this needs wider dissemination.

Using the name of a well known Japanese game should be highly recommended...

-- Matt
It's not what I know that counts.
It's what I can remember in time to use.

···

On Tue, 16 Nov 2010, Scott Gonyea wrote:

Also, don't forget to name your gem after something common to the outside-world. Really common. Plugging up Google is a team effort, people.