En Ruby, la variable $LOAD_PATH contient tous les chemins vers les bibliothèques chargées.

>> $LOAD_PATH
[
    [0] "/home/xavier/.rvm/gems/ruby-2.1.0/gems/awesome_print-1.2.0/lib",
    [1] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0",
    [2] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/i686-linux",
    [3] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby",
    [4] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby/2.1.0",
    [5] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby/2.1.0/i686-linux",
    [6] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby",
    [7] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0",
    [8] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/i686-linux"
]

Si je charge Rspec, par exemple, son chemin va être ajouté dans la variable $LOAD_PATH, ainsi que toutes les bibliothèques dont dépend Rspec:

>> require 'rspec'
true
>> $LOAD_PATH
[
    [ 0] "/home/xavier/.rvm/gems/ruby-2.1.0/gems/awesome_print-1.2.0/lib",
    [ 1] "/home/xavier/.rvm/gems/ruby-2.1.0/gems/rspec-2.14.1/lib",
    [ 2] "/home/xavier/.rvm/gems/ruby-2.1.0/gems/rspec-core-2.14.8/lib",
    [ 3] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0",
    [ 4] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/i686-linux",
    [ 5] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby",
    [ 6] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby/2.1.0",
    [ 7] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby/2.1.0/i686-linux",
    [ 8] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/vendor_ruby",
    [ 9] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0",
    [10] "/home/xavier/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/i686-linux"
]

Il y a encore quelques jours, je faisais systématiquement cela au début de toutes mes gems:

$LOAD_PATH.unshift File.dirname(__FILE__)

Ceci pour que ma gem ajoute son propre chemin dans le LOAD_PATH. Et bien je viens d’apprendre que non, c’est inutile ! L’utilitaire gem fait très bien cela tout seul.

Aujourd’hui j’ai (encore) appris quelque chose ;)

À demain.