BT
x Your opinion matters! Please fill in the InfoQ Survey about your reading habits!

RubyGems Gets Plugins

by Mirko Stocker on Apr 22, 2009 |

The recently released RubyGems version 1.3.2 is more than just a minor bugfix release, it also contains new features:

As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named 'rubygems_plugin' are discovered via Gem::find_files then loaded.

An example comes from Ryan Davis: the Graph plugin generates a graph of the dependencies and information (outdated, incoming dependencies) of your installed Gems.

We talked to RubyGems maintainer Eric Hodel to learn more about the general idea of RubyGems plugins:

The feature request tracker for RubyGems has lots of stuff people want to add, and some of it can be done as a stand-alone package. There's also things you may want to do at install time that otherwise would require manual intervention from the user.

The plugins started with a patch from Neil Wilson to add install hooks to RubyGems for Debian that would make it easier to integrate the two. With his patch we added two special files that RubyGems would try to require at startup, rubygems/defaults/operating_system.rb for ruby packagers and rubygems/defaults/#{RUBY_ENGINE}.rb for ruby implementors to add special functionality. For example, Rubinius could pre-compile all the .rb files in the gem to reduce startup time.

Around the same time I added Gem.find_files that would allow gem authors to easily construct their own plugin system. RDoc uses this to automatically load its plugins.

Since it turned out rather well for RDoc I decided that RubyGems should have the same feature.

I didn't try to make the plugins have a comprehensive way to hook into every possible corner of RubyGems. I'm sure that people will want to hook into areas that aren't currently easy to access, and I hope they submit feature requests against RubyGems to help me find them. It's much easier for me to improve the API a little for a plugin than it is to maintain an entire new feature.

My hope is that creative people will provide amazing and useful things that I don't have to ship or maintain inside RubyGems.

Besides the Graph plugin, there's also rubypan to search rubypan.org and they are working on "a plugin that will create an OS X dictionary from ri data that would be updated whenever you install or uninstall a gem".

Plugin writers can hook into RubyGems pre and post install and uninstall actions, see the Gem Documentation. Writing a plugin for your own command is also straightforward: subclass Command and register it with the Gem::CommandManager.

Do you miss a feature in RubyGems that could now be provided by a plugin?

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

list by Roger Pack

Here's a list of plugins I know of:

wiki.github.com/rdp/ruby_tutorials_core/rubygems

Enjoy.
-r

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

1 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT