The How and Why of Bundler Groups
Since version 0.9, Bundler has had a feature called “groups”. The purpose of this feature is to allow you to specify groups of dependencies which may be used in certain situations, but not in others. For instance, you may use ActiveMerchant only in production. In this case, you could say: group :production do gem "activemerchant"...
Ruby 1.9 Encodings: A Primer and the Solution for Rails
UPDATE: The DataObjects drivers, which are used in DataMapper, are now updated to honor default_internal. Let’s keep this moving. Since Ruby 1.9 announced support for encodings, there has been a flurry of activity to make existing libraries encoding aware, and a tornado of confusion as users of Ruby and Rails have tried to make sense...
The Web Doesn’t Suck. Browsers Are Innovating.
This week saw a flurry of back-and-forth about the future of the web platform. In the “web sucks” camp were Sachin Agarwal of Posterous (The Web Sucks. Browsers need to innovate) and Joe Hewitt (Sachin summarized some of his tweets at @joehewitt agrees with me). Chris Blizzard responded with a few narrow examples of what...
Named Gem Environments and Bundler
In the beginning, Rubygems made a decision to allow multiple versions of individual gems in the system repository of gems. This allowed people to use whatever versions of gems they needed for individual scripts, without having to partition the gems for specific purposes. This was a nice starting place. Being able to just install whatever...
Ruby Require Order Problems
Bundler has inadvertantly exposed a number of require order issues in existing gems. I figured I’d take the opportunity to talk about them. There are basically two kinds of gem ordering issues: Missing Requires Imagine a gem that uses nokogiri, but never requires it. Instead, it assumes that something that is required before it will...
Using .gemspecs as Intended
When you clone a repository containing a Unix tool (or download a tarball), there’s a standard way to install it. This is expected to work without any other dependencies, on all machines where the tool is supported.
$ autoconf
$ ./configure
$ make
$ sudo make install
This provides a standard way to download, build and install Unix tools. In...
Ruby’s Implementation Does Not Define its Semantics
When I was first getting started with Ruby, I heard a lot of talk about blocks, and how you could “cast” them to Procs by using the & operator when calling methods. Last week, in comments about my last post (Ruby is NOT a Callable Oriented Language (It’s Object Oriented)), I heard that claim again.
To...
Ruby is NOT a Callable Oriented Language (It’s Object Oriented)
I recently ran across a presentation entitled Python vs. Ruby: A Battle to the Death. I didn’t consider it to be a particularly fair battle, and may well reply in more detail in a later post.
However, what struck me as most worthy of explanation was the presenter’s concern about the fact that Procs are not...
AbstractQueryFactoryFactories and alias_method_chain: The Ruby Way
In the past week, I read a couple of posts that made me really want to respond with a coherent explanation of how I build modular Ruby code.
The first post, by Nick Kallen of Twitter, gushed about the benefits of PerQueryTimingOutQueryFactory and called out Ruby (and a slew of other “hipster” languages) for using language...
The Blind Men and the Elephant: A Story of Noobs
If you will indulge me, I’d like to paraphrase a familiar tale:
Once upon a time, deep in the forest, there was a tribe of elephant curators. The elders of this tribe kept sophisticated, detailed notes about the proper care and feeding of elephants, and the villagers tended to follow along.
Eventually, they dedicated a large section...
Using Bundler in Real Life
A lot of people have asked me what the recommended workflows for bundler are. Turns out, they’re quite simple.
Let’s step through a few use-cases.
You Get a Repo for the First Time
You’ve just checked out a git (or other) repository for an application that uses bundler. Regardless of any other features of bundler in use, just...
The Building Blocks of Ruby
When showing off cool features of Ruby to the uninitiated (or to a language sparring partner), the excited Rubyist often shows off Ruby’s “powerful block syntax”. Unfortunately, the Rubyist uses “powerful block syntax” as shorthand for a number of features that the Pythonista or Javaist simply has no context for.
To start, we usually point at...

