Bundler made gem dependencies in Rails projects a lot easier. It creates a “bubble” of gems you listed in your
Gemfile, which means it only loads the ones you specified. While this might sound annoying, it keeps you from having incomplete gem dependency specifications like you did when you were still using
config.gem. This makes it easier to keep your
Gemfile complete and your project simple to get up and running.
But what about gems themselves? We use the
.gemspec file to specify gem dependencies for our gems, which — when complete — makes installing and using gems a breeze since it installs all dependencies automatically. Great.
I’m not talking about using gems, though. I’m talking about working on and contributing to gems. Your
.gemspec doesn’t help contributors when they clone your project and want to get the tests running, they still have to read through it and install everything manually.
Giving your gem a
Gemfile partially solves this problem. If you specify everything your gem depends on in your
Gemfile, contributors can quickly install everything they need without having to look anything up. The downside is that now we have two files (the
Gemfile) that specify dependencies, which is nasty.
Lucky for you, Bundler loves you. I didn’t know this, but it can read and install gems from your
.gemspec. To get it up and running, create a
Gemfile and add:
This will check your
.gemspec for runtime and development dependencies (specified with
gem.add_development_dependency) and install them to the correct group when running:
$ bundle install
Now the only place we specify dependencies is in the
.gemspec, but Bundler can install everything for us making our gem and its dependencies easy to install for users and contributors.
Oh, since you have a
Gemfile in your project now, here’s a little bonus: You can use Envy Labs’ Ruby Tracker to get notified when new versions of your dependencies get released so you can make sure your gem keeps working with the latest stuff. Nice tip, right?