InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

RubyGems Gets Plugins

Posted by Mirko Stocker on Apr 22, 2009

Sections
Development,
Operations & Infrastructure
Topics
Package Managers ,
Ruby ,
RubyGems
Tags
RubyGems

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?

list by Roger Pack Posted
  1. Back to top

    list

    by Roger Pack

    Here's a list of plugins I know of:

    wiki.github.com/rdp/ruby_tutorials_core/rubygems

    Enjoy.
    -r

Educational Content

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.

Beauty Is in the Eye of the Beholder

Alex Papadimoulis discusses ugly code, where it comes from, how to avoid it, and how to get rid of it.

Architecting Visa for Massive Scale and Continuous Innovation

John Davies examines Visa’s architecture and shows how enterprises have architected complex integrations incorporating Hadoop, memcached, Ruby on Rails, and others to deliver innovative solutions.

Max Protect: Scalability and Caching at ESPN.com

Sean Comerford unveils ESPN.com’s architecture, what components are used and why, and the current changes the website goes through.

The Seven Deadly Sins of Enterprise Agile Adoption

Are there repeated patterns of failure on Enterprise Agile Enablement efforts? Sanjiv and Arlen discuss Seven Deadly Sins to avoid when adopting Agile in an enterprise.

Questions for an Enterprise Architect

Erik Dörnenburg answers: What is Enterprise and Evolutionary Architecture?, discussing 4 issues: Turning strategy into execution, Ensuring conformance, Where do the architects sit? Buying or building?

Wrap Your SQL Head Around Riak MapReduce

Sean Cribbs explains what Map-Reduce and Riak are, why and how to use Map-Reduce with Riak, and how to convert SQL queries into their Map-Reduce equivalents.