Boire ou coder ... Pourquoi choisir?
Publié le 13 décembre 2009 23:00

Read Eval Print Loop

Ou repl ! Le dernier projet open source de Chris Wanstrath. Il est plutôt productif. Donc je ne parle pas de tous ses projets, même si plusieurs sont particulièrement intéressants (jetez donc un coup d'oeil à resque et à fakefs (j'ai fait deux commits sur ce dernier)).

Mais revenons en à repl. Supposons que vous soyez en train de travailler sur un projet utilisant GIT. En bon barbu que vous êtes, vous n'utilisez évidemment pas d'interface graphique (c'est tout à fait faisable, j'en suis la preuve vivante). Cependant passer son temps à taper "git add", "git rm", "git commit", ... est parfois assez rébarbatif (j'éviterai le terme chiant). Pouvoir avoir un terminal spécific à git et avoir uniquement à taper "add", "rm", "commit" etc serait plus intéressant. Et c'est justement là que repl arrive. Pas seulement pour git, mais pour n'importe quelle commande linux !

Commençons pas installer la bête.

sudo gem install repl
Vous suivez toujours ? :mrgreen:

Maintenant utilisons notre nouveau jouet avec git justement.

repl git
Et la, la magie opère et vous êtes un nouvel homme (ou une femme. Pas de machisme). Vous avez un shell spécifiquement pour git.

Et bien évidemment, ça fonctionne avec n'importe quoi. Git, Apt-get, Gem, ... Et même votre propre exécutable fait maison :)

Oui mais comment ça fonctionne ?

Petit curieux va ! Bonne question ! Comme quoi la taille d'une application n'est pas proportionnelle à son utilisé, repl tient en tout et pour tout en 80 lignes de Ruby ! Et encore c'est parce qu'il a une fonctionnalité d'autocomplétion. On pourrait conserver ta fonctionnalité principale uniquement et le réduire à 20 lignes de code (on s'en tape les ...).

Voyons ici uniquement l'indispensable.

loop do
  print ENV['REPL_PROMPT'] || '>> '</p>

<p>  begin
    line = $stdin.gets.chomp
  rescue NoMethodError, Interrupt
    exit
  end</p>

<p>  puts "$ #{command} #{line}" if debug
  system "#{command} #{line}"
  warn "Use Ctrl-D (i.e. EOF) to exit" if line =~ /^(exit|quit)$/
end

Nous créons une boucle infinie (car elle ne sera rompue que par un Ctrl-D) afin d'avoir l'impression d'être dans une interface shell. Puis au début de chaque ligne, nous affichons les caractères ">>", toujours dans un souci d'esthétique.

Le $stdin.gets.chomp permet de récupérer toute commande tapée par l'utilisateur.

Puis, une fois que la commande a été tapée, on l'exécute et on affiche ce qu'elle retourne (fonction "system"). Si c'est "exit" qui est entrée, on invite la personne à taper Ctrl-D pour quitter repl.

Cool, simple, efficace et utile :)

Commentaires

Postez un commentaire

Markdown activé