2 min read

Utiliser Bundler dans un script en Ruby

On peut utiliser Bundler sans Gemfile, le saviez-vous ?

Parfois lorsque l’on écris un script Ruby on a besoin d’utiliser des gems externes pour s’intégrer avec une API tierce, ou faciliter la connexion à une base de donnée.

Par exemple si on peut souhaiter ajouter de la coloration pour produire des messages

require 'rainbow'

puts Rainbow("My very important message in red").red

Mais au moment de déployer ce script comment s’assurer que ces dépendances seront bien présentes ? Et seront-elles installées dans les version attendues pour lequel notre script a été testé ?

Que faire alors ? Créer une gem semble trop lourd pour notre script, et il est pas conseillé d’attendre des utilisateurs qu’ils fassent l’installation d’eux-mêmes (ça passe pour une gem mais pour un script qui commencerait à en avoir 4-5 ça fait beaucoup).

Heureusement Bundler est là pour nous, en effet l’installateur offre un module qu’on peut inclure dans notre script et qui offre toutes les fonctionnalités d’un fichier Gemfile mais pour définir nos gems à l’intérieur du script.

require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'

  gem 'rainbow', '~> 3.0.0'
end

puts Rainbow("My very important message in red").red

Ainsi au lancement du script Bundler se chargera de vérifier que les gems déclarées seront bien installées, procédera au téléchargement si besoin, et enfin celles-ci seront  automatiquement chargées pour être utilisées.

Pour aller plus loin

Bundler: How to use Bundler in a single-file Ruby script
GitHub - sickill/rainbow: Ruby gem for colorizing printed text on ANSI terminals
Ruby gem for colorizing printed text on ANSI terminals - GitHub - sickill/rainbow: Ruby gem for colorizing printed text on ANSI terminals