Retour

Créer et publier sa première gem Ruby avec slugfy_me : un tutoriel complet

Enregistrer
Temps de lecture: 4 min Vues: 219 Niveau: Intermédiaire
4 jours par Franci-lobbie LALANE
Default Post Image
Tags:
#ruby #gem #bundler #ruby-on-rails #dev débutant #open-source #publication #outils ruby #captain ruby

🚀 Objectif de ce tutoriel



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)
Exemple de code minimal :
module SlugfyMe
  def self.slugify(string, separator: '-')
    string = remove_accents(string)
    string.downcase
          .gsub(/[^a-z0-9\s]/, '')
          .strip
          .gsub(/\s+/, separator)
  end

  def self.remove_accents(string)
    accents = {
      'àáâãäå' => 'a',
      'ç'      => 'c',
      'èéêë'   => 'e',
      'ìíîï'   => 'i',
      'ñ'      => 'n',
      'òóôõö'  => 'o',
      'ùúûü'   => 'u',
      'ýÿ'     => 'y'
    }

    accents.each do |group, replacement|
      string = string.gsub(/[#{group}]/i, replacement)
    end

    string
  end
end

🧪 Étape 3 - Tester avec RSpec

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.
Comment faire :
  1. Va sur rubygems.org/profile/edit
  2. Descends jusqu'à API access > clique sur New API Key
  3. Donne un nom (ex : dev-laptop) et valide
  4. Ensuite, dans ton terminal :
gem signin

Renseigne ton mail + mot de passe RubyGems, et la clé est automatiquement enregistrée dans ~/.gem/credentials.
C’est ce qui permet ensuite de publier sans retaper ton mot de passe à chaque fois ✅

🚢 Étape 6 - Publier la gem sur RubyGems

  1. Build la gem :
gem build slugfy_me.gemspec

  1. Push vers RubyGems :
gem push slugfy_me-0.1.0.gem

Et voilà ✨ Ta gem est en ligne ici :
 👉 https://rubygems.org/gems/slugfy_me

📦 Code source sur GitHub

Le code est open-source ici :
 👉 https://github.com/francilobbie/slugfy_me
Tu peux l’étudier, le forker, ou proposer des améliorations via une Pull Request.

🎒 Aller plus loin

Maintenant que tu sais créer une gem, pourquoi ne pas explorer celles que tu utilises déjà ?
🔍 bundle open : comprendre comment une gem fonctionne
La commande bundle open te permet d’ouvrir le dossier source d’une gem installée sur ta machine, dans ton éditeur par défaut (souvent VS Code ou Vim).
Par exemple :
bundle open slugfy_me

Tu seras directement dans le dossier slugfy_me tel qu’il est installé sur ta machine, et tu pourras voir son code, ses tests, sa spec, etc.
📚 C’est un excellent moyen d’apprendre comment sont conçues les gems populaires (devise, sidekiq, pagy, etc.)
✨ Améliore ta gem !
Voici quelques pistes :
  • Ajouter d’autres options (:upcase, :max_length, etc.)
  • Supporter plus d’accents (ou utiliser I18n.transliterate pour déléguer)
  • Ajouter une CLI (bin/slugfy) pour l’utiliser depuis le terminal
  • Ajouter une doc avec yard
Et pourquoi pas en faire une vraie gem utile à partager ? 😎

🧠 Conclusion

Tu viens de :
  • Créer une gem Ruby from scratch
  • Ajouter une logique utile
  • Écrire des tests
  • Documenter proprement
  • Publier sur RubyGems
Pas mal pour un premier tour de chauffe, non ? 😄
N’hésite pas à te lancer sur ta propre gem, même toute simple. C’est l’un des meilleurs moyens d’apprendre Ruby autrement.

Happy coding ! 😄

Laissez un commentaire

Se connecterpour laisser un commentaire.