`require` vs. `gem` methods?

require, ruby, rubygems

Solution

Say you have two versions of the gem `foo` installed:

$ gem list foo

*** LOCAL GEMS ***

foo (2.0.1, 2.0.0)

If you use only `require`, the newest version will be loaded by default:

require 'foo'       # => true

Foo::VERSION        # => "2.0.1"

If you use `gem` before calling `require`, you can specify a different version to use:

gem 'foo', '2.0.0'  # => true
require 'foo'       # => true

Foo::VERSION        # => "2.0.0"

Note: using `gem` without subsequently calling `require` does not load the gem.

gem 'foo'           # => true

Foo::VERSION        # => NameError: uninitialized constant Foo

Problem

What's the difference between the `require` and `gem` methods? For example, what's the difference between`require 'minitest'` and `gem 'minitest'`?

Original source