Sorry this page looks weird. It was automatically migrated from my old blog, which had a different layout and different CSS.

Gem Versions

The problem: finding out how out of date a gem is

Recently I have been wading through several Gemfiles, deciding whether to upgrade each gem. To help me decide, I always want to know how recent (or not) the currently installed version is.

First I used gem list --both GEMNAME:

$ gem list --both thinking-sphinx

*** LOCAL GEMS ***

thinking-sphinx (2.0.4, 2.0.1, 1.4.0, 1.3.16)

*** REMOTE GEMS ***

thinking-sphinx (2.0.7)
thinking-sphinx-099 (1.3.2)
thinking-sphinx-allen (1.3.18.4)
thinking-sphinx-raspell (1.1.2)

But there are two problems:

So then I tried each gem’s versions page on Rubygems.org. Here’s Thinking Sphinx’s. On the plus side it shows all the available versions but, on the down side, it doesn’t know which ones I’ve got already.

The solution

I wrote a gem command plugin called gem-versions. Install it with gem install gem-versions and then do gem versions GEMNAME.

For example:

$ gem versions thinking-sphinx
  2.0.7
  2.0.6
  2.0.5
* 2.0.4
  2.0.3
  2.0.2
* 2.0.1
  2.0.0
  2.0.0.rc2
  2.0.0.rc1
  1.4.7
  1.4.6
  1.4.5
  1.4.4
  1.4.3
  1.4.2
  1.4.1
* 1.4.0
  1.3.20
  1.3.19
  1.3.18
  1.3.17
* 1.3.16
  1.3.15
  1.3.14
  1.3.13
  1.3.12
  1.3.11
  1.3.10
  1.3.9
  1.3.8
  1.3.7
  1.3.6
  1.3.4
  1.3.3
  1.3.2
  1.3.1
  1.3.0
  1.2.13
  1.2.12

It shows all the available versions of the gem, and it stars the ones I already have locally. It’s easy to see how up to date my versions are.

Implementation

Rubygems has supported command plugins since 1.3.2 but it would not be entirely true to say I found a massive amount of documentation on this.

The most helpful sources were defunkt’s gem-man, jnunemaker’s gemwhois, and cldwalker’s gem_grep.

I was pleasantly surprised at how little code is actually needed to put a gem command plugin together. Admittedly my versions command doesn’t take any options and is about as simple as they come, but even gem-man is pretty straightforward.

Conclusion

If you’re deciding whether to upgrade a gem, and you want to see how out of date your installed versions are, use gem-versions.

Andrew Stewart • 22 September 2011 • Ruby
You can reach me by email or on Twitter.