La création interactive ruby application console

Je veux faire application interactive où l'utilisateur lance et qui peut faire diverses tâches, en tapant des commandes (une sorte de coquille)

exemple:

./myapp.rb  
App says Hi  
Commands:   
  help - display help about command
  open - open task
  do - do action
Start>help open
  open <TaskName>
  opens specified task
Start>open Something  
Something>do SomeAction
  Success!
Something> (blinking cursor here)

J'ai cherché, mais ne pouvais pas trouver toutes les gems ruby que je pourrais utiliser spécialement pour la console de l'interaction, de sorte que je suis en train de ma faire mon propre...

J'ai regardé Thor, mais ce n'est pas exactement comme je veux, peut-être que je pourrais l'utiliser, mais pas sûr...

il pourrait ressembler à quelque chose comme:

class Tasks
  attr_reader :opened_task

  desc "open <TaskName>", "opens specified task"
  def open(params)
  end

  desc "do <ActionName>", "do specified action"
  def do(params)
  end
end

tasks = Tasks.new
# theoretical Console class
console = Console.new
console.addCommand("open",tasks.method(:open),"open task")
console.addCommand("do",tasks.method(:do),"do action")
console.start("%s>",[*tasks.opened_task])

donc ma question est, quelles sont les gemmes je pourrais utiliser pour faire une telle console de classe? peut-être que quelqu'un a déjà fait quelque chose de similaire?
Je plan à l'aide de HighLine d'entrée/de sortie, mais toute autre suggestion de quoi pourrais-je utiliser?

Devrait-il être de rubis ou de votre propre syntaxe?
ce que vous entendez par ruby ou propre syntaxe? 😐 si vous voulez dire par l'aide de la CISR, alors ce n'est pas une option...
Pourquoi pas? Il vous donne de Turing-complétude pour gratuit.
parce qu'il exécute du code ruby, mais dans mon cas, il est permis seulement de quelques "Commandes", en saisissant une syntaxe incorrecte ne devraient pas jeter des exceptions et aussi il ne devrait pas être façon de redéfinir ou de remplacer ces commandes...
Est-ce un problème de sécurité? Et vous pouvez brancher dans pry pour les erreurs de syntaxe. Redéfinition et ne devrait pas être un problème, car vous avez besoin de savoir comment il fonctionne. Comme vous vous attendez à vos utilisateurs d'utiliser une ligne de commande au lieu d'une interface graphique dans la période actuelle de touchy feely des trucs, je ne leur faites confiance à un peu de puissance. Mais c'est votre choix, ont le plaisir de réimplanter beaucoup de choses au lieu de les appeler soulever un objet. Et vous obtenez une API pour gratuit.

OriginalL'auteur davispuh | 2012-03-24