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
Maintenant utilisons notre nouveau jouet avec git justement.
repl 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