You don't have to use Bundler to create new RubyGems

Warning: Controversial Content

If you are morally or ethically opposed to using Project Generators
and prefer to create RubyGems by hand,
STOP READING AND CLICK THE BACK BUTTON.

I am perfectly aware that one does not need any tools to create a RubyGem,
and that all you really need is RubyGems and a *.gemspec
file. However, the majority of users do not have the time or patience
to create each Ruby project from scratch. Thus developers have historically
used project generators such as Hoe, Jeweler and now Bundler.

If you are a diehard Bundler user, please read the entire blog post.
This blog post is not putting Bundler down,
nor is it posing a binary choice between Bundler and some new tool.

Enter Bundler

Bundler was initially created as a more robust way to manage dependencies
of Rails3 applications. Once Bundler was integrated
into the Rails3 generator templates, developers realized Bundler could also
be used to manage the dependencies of any large Ruby application or library.

In order to help developers create projects with Bundler already setup,
template files and a bundle gem command were added.
Since Bundler was the “new hotness” and developers were becoming increasingly
dissatisfied with Jeweler/Hoe, the community began to
cargocult Bundler as the defacto way to create RubyGems.

Looking Back

After having extensively used Bundler with Ronin, to keep it’s many
repositories in-sync with each other, I can definitely say Bundler
solved dependency management for large Ruby projects.
However, I began to question using bundle gem to create new RubyGems.

At first it made sense to provide a bundle gem command, but project
generation is outside of the original scope of Bundler (dependency management).
Furthermore, adding Bundler to an existing project isn’t that difficult;
just add a .gemspec file and a Gemfile.

Given that Bundler’s stated goal is to “manage an application’s dependencies”,
it doesn’t seem very pragmatic to use Bundler in libraries with
zero or only one runtime dependency.

Bundler’s template files are a bit spartan as well.
The Rakefile template does not include Rake tasks for RDoc or RSpec.
This omission might encourage developers to not write documentation or tests,
and rush to release.

The bundle gem command isn’t very configurable either. If you want to generate
a project with Textile markup, YARD documentation, RSpec tests and
Mercurial, you are out of luck.

Enter Ore

Ore is a flexible Ruby project generator. Unlike other Ruby project
generators, Ore provides many built in templates and allows custom templates
to be installed from Git repositories.

Unlike other project generators, Ore focuses only on project generation and
does not force a specific project layout or workflow upon the developer.
You can even generate projects with Bundler, YARD + Markdown and
Mercurial instead of Git:

Think Outside of the Bundle

Now that you have been introduced to Ore, I hope you will at the very least
give it a try. I also hope you will understand that I am not
simply anti-Bundler / pro-Ore. Ore gives you the option of generating Ruby
projects with/without Bundler. The two tools are not mutually exclusive.