Créer une gem Ruby, la tester, l'emballer et la publier sur RubyGems.org à travers un exemple simple et concret : slugfy_me, une mini-gem qui transforme une chaîne de caractères en un "slug" propre pour les URL.
Ce guide est fait pour toi si :
Tu veux comprendre comment fonctionne une gem Ruby de l’intérieur
Tu rêves de publier ton propre code réutilisable
Tu aimes les projets pédagogiques bien guidés 😄
🧠 C'est quoi un "slug" ?
Un slug, c’est une version simplifiée d’un titre ou d’une chaîne de caractères, souvent utilisée dans les URLs. Par exemple :
"C'est quoi Ruby ?" devient => "cest-quoi-ruby"
C’est plus propre, plus lisible et meilleur pour le référencement.
🏗️ Étape 1 - Générer la structure de la gem
On utilise Bundler pour créer le squelette de notre gem :
bundle gem slugfy_me
Réponds aux questions :
Test framework : rspec
Licence : MIT
README, changelog, code of conduct : oui
Tu obtiens une arborescence complète avec :
lib/slugfy_me.rb → le cœur du code
slugfy_me.gemspec → les infos de ta gem
spec/ → les tests
✍️ Étape 2 - Écrire la méthode slugify
On veut une méthode simple :
SlugfyMe.slugify("Crème brûlée au Café !")
# => "creme-brulee-au-cafe"
Elle va :
Mettre en minuscules
Supprimer les caractères spéciaux
Remplacer les lettres accentuées
Remplacer les espaces par un tiret (ou un séparateur custom)
Les tests se trouvent dans spec/slugfy_me_spec.rb. Exemples :
RSpec.describe SlugfyMe do
it "transforme une chaîne simple" do
expect(SlugfyMe.slugify("Ruby rocks!")).to eq("ruby-rocks")
end
it "supprime les accents" do
expect(SlugfyMe.slugify("Crème brûlée au Café")).to eq("creme-brulee-au-cafe")
end
it "utilise un séparateur personnalisé" do
expect(SlugfyMe.slugify("Ruby est top", separator: '_')).to eq("ruby_est_top")
end
end
Exécute les tests :
bundle exec rspec
📄 Étape 4 - Préparer la publication
Modifier le .gemspec
Assure-toi que ton fichier slugfy_me.gemspec contient :
spec.name = "slugfy_me"
spec.version = SlugfyMe::VERSION
spec.authors = ["francilobbie"]
spec.email = ["ton.email@email.com"]
spec.summary = "An educational Ruby gem to generate clean slugs from strings"
spec.description = "SlugfyMe is a minimalist gem created for Captain Ruby, to help you learn how to build and publish a gem."
spec.homepage = "https://github.com/francilobbie/slugfy_me"
spec.license = "MIT"
🔑 Étape 5 - Générer une clé API RubyGems.org
Avant de publier, tu dois être connecté avec une clé API RubyGems.