🕷 zenspider.com

by ryan davis

Looking for the Ruby Quickref?


Published 2012-06-11 @ 00:00

Tagged productivity, hoe

This is part of the Productivity Pr0n series.

I’ve extensively written about hoe’s features, releasing with hoe, writing extensions with hoe. So in some ways there’s nothing to really add to this blog post. Or is there?

After all these years, with newgem, mr.bones, bundler… I still use Hoe. Emphatically. Why?

Because it saves me time. Lots of it.

Because it saves me from pain. Lots of it.

Because it saves me from my own stupidity. (Lots of it)

Once you have 2+ gems, there are so many reasons to use Hoe and so few legitimate (to me) ones not to.

I’m at about ~600 releases across ~90 projects using Hoe. In that time, Hoe has unified all the project’s common meta-everything. It’s cleaned up the Rakefiles and yet provided me with much more functionality than almost every other gem-whatsit out there. I can test, package, publish, document, announce… all with rake. Everything is verified to be correct from the tests to the gem contents.

If I need special functionality for a single project, I don’t just lump than in with Hoe. I use Hoe’s powerful plugin system. First, I look to see if someone else has already added this functionality via their own gem. There are many:

  • hoe-bundler - Generates a Gemfile based on a Hoe’s declared dependencies.
  • hoe-debugging - A Hoe plugin to help you debug your codes.
  • hoe-deveiate - A collection of Rake tasks and utility functions.
  • hoe-doofus - A Hoe plugin that helps me keep from messing up gem releases.
  • hoe-gemcutter - Adds gemcutter release automation to Hoe.
  • … and so on …

If one doesn’t already exist, then I create my own gem (eg gem-seattlerb) and add it there. Then I can extend that one project. It is as customizable as you want it to be. (See JB’s project hoe-plugin-examples for more plugin examples)

In short, if you’ve got more than one gem, you need to be using something like Hoe. Period. Life is short, time is valuable, and you’ll fuck something up otherwise.

  • If you write a dirglob, you’re doing it wrong.
  • If you are hand editing a gemspec, you’re doing it wrong.
  • If you are merging or copying tasks from one project to another, you’re doing it wrong.
  • If you don’t know exactly what is being packaged in your gem, you’re doing it wrong.