A few weeks ago, during a period of frustration, I found myself repeatedly mistyping ‘sudo.’ So, in a fit of silliness I wrote a short script to insult me when I did it, and put it in the path.
Later, I packaged it as a gem, because a) I had never built a gem with an executable and b) gems are a great way to share things.
The end result?
http://github.com/baroquebobcat/usdo
It isn’t particularly smart, but I happen to find it funny. It also showed to me how far gem packaging has come. Gemcutter and Jeweler make building and distributing ruby gems freakishly easy. This is especially awesome in light of the recent announcement that gemcutter is going to be the default gems host(though at rubygems.org)
How I put it together
I ran jeweler to create the default directory structure and added a bin dir to it, for the files I wanted to end up in the path.
$ jeweler usdo
cd usdo
mkdir bin
I put my gist from before in the bin directory, and set up git.
Set up my gem info in my Rakefile
#...
Jeweler::Tasks.new do |gem|
gem.name = "usdo"
gem.summary = %Q{adds usdo command to ridicule mispellings of sudo}
gem.description = %Q{...}
gem.email = "ndh@baroquebobcat.com"
gem.homepage = "http://github.com/baroquebobcat/usdo"
gem.authors = ["Nick Howard"]
end
then did the jeweler gem initialization dance
rake version:write
rake gemspec
rake install
Testing it out:
$ usdo -l
----USDO----
You mispelled sudo
You can't do anything, you can't even spell sudo
are you really sure you want to try running
'sudo -l'????
Now that was working, to send it up for distribution.
Jeweler is awesome and now has gemcutter support. I followed the jeweler README‘s directions on uploading to gemcutter. Which makes pushing your gem as simple as
$ rake gemcutter:release
Awesome.
Check out my code if you want.