Multiversion

Overview

Use Bundler and RVM to test your library against different gem versions and/or ruby versions.

How it works

In your project create several Gemfiles with specified rvm alias in name. E.g:

Gemfile.RVM_ALIAS_NAME

Examples:

Gemfile.ar12_r186
Gemfile.ar30_r187
Gemfile.ar30_r192
Gemfile.ar31_r192

Create aliases

rvm alias create ar12_r186 ruby-1.8.6-p420
rvm alias create ar30_r187 ruby-1.8.7-p352
rvm alias create ar30_r192 ruby-1.9.2-p290
rvm alias create ar31_r192 ruby-1.9.2-p290

So in each Gemfile you specify certain gem versions gems you need. Gemfile file name extension contains some unique name optionaly suffixed with ruby version. So in our example Gemfiles with rvm aliases compination mean:

  • ar12_r186 - test library with ActiveRecord v1.15.6 and ruby-1.8.6-p420
  • ar30_r187 - test library with ActiveRecord v3.0.10 and ruby-1.8.7-p352
  • ar30_r192 - test library with ActiveRecord v3.0.10 and ruby-1.9.2-p290
  • ar31_r192 - test library with ActiveRecord v3.1.0 and ruby-1.9.2-p290

So Gemfile extension says about main traits of testing environment. All certain gem versions are specified in corresponding Gemfile.

So for each extension name we explicit knows:

  • which ruby version is required (through rvm alias)
  • which gems versions are required (through Gemfile filename )

Executing commands

Common syntax

Synopsis:

multiversion [all|alias1,alias2,...] [exec|bundle|rspec] [args]

Examples:

multiversion ar1_186 exec ruby --version
multiversion ar3_193 exec ruby --version

Main execution wrapper

Execute any command under environment modified rvm/bundler:

multiversion [all|alias1,alias2,...] exec [command] [args]

Bundle command wrapper

Execute bundle command under environment modified rvm/bundler:

multiversion [all|alias1,alias2,...] bundle [bundler_command] [args]

Examples:

multiversion all bundle install

Rspec command wrapper

Execute rspec command under environment modified rvm/bundler:

multiversion [all|alias1,alias2,...] rspec [rspec args]

Examples:

multiversion all rspec -fs -c spec

Note. It use multiversion-rspec bin that detects rspec version.