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?
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
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez, c'est un REPL –
Read → Evaluate → Print Loop
.De la CISR, par exemple, met en œuvre un REPL pour le langage Ruby.
Voici une très simple de mise en œuvre de votre application REPL:
\A
et\z
match au début de la chaîne et la fin de la chaîne, respectivement.J'ai oublié à propos de l'invite de commandes – mise à jour de répondre à une amélioration de la mise en œuvre. Votre
start
méthode doit juste contenir la boucle.J'ai accepté cette réponse, car il recommande de faire moi-même en montrant une partie de la mise en œuvre donc je vais faire mon propre CLI, spécialement pour tous mes besoins...
Est
Console
une classe qui vient avec Ruby? Si oui, que dois-je besoin pour l'obtenir?non, cette classe fait partie d'une API j'ai fait juste pour cette réponse. Imaginez que
Console
contient tout le code de votre application liées à l'interfaçage avec un émulateur de terminal et queprompt
est un lecteur méthode qui retourne le REPL est configuré à l'invite de commandes.OriginalL'auteur Matheus Moreira
Vous pouvez également essayer de ripl. (à partir de la documentation):
Création et démarrage d'une coque sur mesure est aussi simple que:
Il y a une liste complète des plugins pour ripl ainsi que la liste des applications de console à l'aide de ripl sur le site internet du projet.
Pour être honnête, je n'ai pas utilisé
ripl
jusqu'à présent - mais l'écriture de votre propre solution à partir de la base ne semble pas être la meilleure idée. Il suffit de considérer le mouvement avec la touche flèche - sans readline soutenir les utilisateurs seront en prestation de serment.dans windows, l'historique des commandes est de travail (flèches Haut/Bas), j'ai juste besoin de faire l'auto-complétion avec la touche tab, mais au début je pourrait même vivre sans...
Ce n'est pas seulement à propos de l'histoire et de l'achèvement. Readline vous fournit avec emacs/vi-comme les liaisons dans le shell qui a beaucoup d'utilisateurs sont très habitués à et de les prendre pour acquis parce qu'ils sont disponibles dans Bash/Zsh par défaut.
OriginalL'auteur Aleksander Pohl
ok, j'ai donc fait cette librairie pour créer des applications de console en ruby. En fait il y a quelques instants, mais seulement décidé de le libérer. Il prend en charge l'auto-complétion avec HighLine et Readline.
Quand je l'ai écrit il n'y avait pas de documentation ni de tests/specs, mais maintenant, j'ai fait quelques. Toujours pas beaucoup, mais pour le début devrait être ok.
Donc gem interface de ligne de commande de la console et
le code est sur GitHub, voici exemple d'utilisation
OriginalL'auteur davispuh
Prendre un coup d'oeil à
cliqr
ruby gem. Il ressemble exactement à ce dont vous avez besoin. Voici le lien github avec un descriptif du readme: https://github.com/anshulverma/cliqrIl peut exécuter les commandes directement ou à l'intérieur d'une fonction intégrée de shell.
Ici est un cas de test à partir de son repo git:
OriginalL'auteur nuaavee
ATS est vraiment un bon bijou pour facilement faire ce genre de choses. Vous avez beaucoup d'outils qui peuvent travailler seul ou avec la panoplie complète d'outils. Vous pouvez utiliser des couleurs, des invites, exécuter shell indigènes, d'interagir avec l'écran, l'imprimer, de tables, de progressbars et de nombreux autres éléments de lignes de commande, avec la facilité d'un goop api.
Particulièrement ats-invite est vraiment utile pour demander la saisie de l'utilisateur.
Un bref exemple pour le cas que vous proposé:
Ce n'est pas exactement ce que je cherchais, c'est une bibliothèque qui pourrait être utilisé pour mettre en œuvre une telle console comme vous l'a montré. Aussi, d'ailleurs quand j'ai posé cette question alors qu'il n'existait pas encore alors 😀 j'ai mis en place mon interface de ligne de commande de la Console à l'aide de github.com/JEG2/highline qui fait quelque chose de très similaire.
OriginalL'auteur David Goitia
Ou vous pouvez utiliser soulever des commandes, mais cela va à l'encontre de la
turing-complétude. De l'aide peut être mis en œuvre à l'aide de commandes, comme je le suis
pas sûr de savoir comment bien mon approche fonctionne. Ces méthodes doivent être
codé sur la défensive. Je ne me souviens pas comment utiliser les variables de classe :-/
avez-vous donné
cliqr
(ci-dessus), un coup de feu? Il ne nécessite pas beaucoup de configuration et assez bien fonctionne hors de la boîte.quand j'ai écrit cette question, il n'a pas exsist puis encore, mais oui il ressemble à quelque chose de très similaire à ce que j'ai besoin alors de seulement 3 ans plus tôt il a été créé 😀
OriginalL'auteur Reactormonk