pry_logo(1)

Un REPL–Read, Eval, Print, Loop, est un shell interactif pour un langage de programmation permettant d’évaluer des expressions dans le langage. Les REPL sont un excellent moyen d’apprendre un langage, sa syntaxe et ses API.

La plupart des langages de programmation ont leur propre REPL ou un outil communautaire écrit dans le même but. Pour Ruby, il s’agit d’un shell Ruby interactif IRB, qui vous permet de jouer avec Ruby en quelques secondes et de commencer à expérimenter ses fonctionnalités.

IRB est livré avec Ruby et peut être lancé à partir de la ligne de commande en utilisant la commande irb. Il fournit l’historique des commandes, l’édition de lignes et l’exécution de programmes Ruby à partir de l’intérieur. Cependant, nous n’allons pas parler de la CISR aujourd’hui. Au lieu de cela, je veux me concentrer sur une alternative, appelée pry, et ce qu’elle apporte à la table. Nous verrons quelques fonctionnalités astucieuses avec lesquelles Pry est emballé aujourd’hui.

Installation

Évidemment, avant de commencer à jouer avec pry, nous devons l’installer. Pry est une gemme de rubis, donc l’installer revient à installer n’importe quelle gemme de Rubis. Tapez simplement:

gem install pry pry-doc

Nous avons ajouté pry-doc pour accéder à la documentation Ruby core. Pour démarrer pry, tapez simplement pry une fois la gemme installée.

Vous pouvez également l’intégrer aux dépendances de votre application en ajoutant gem "pry" au fichier Gemme de votre application. L’installation de pry à partir de l’application présente ses propres avantages. En fait, il existe une gemme pry-rails qui remplace la console Rails par un levier.

Nous n’entrerons pas dans la gemme Rails aujourd’hui, mais je vais me concentrer sur certaines des meilleures fonctionnalités de Pry et vous permettre d’explorer plus par vous-même.

Exploration de la documentation &Source

L’une des fonctionnalités les plus utiles disponibles dans Pry est la possibilité d’explorer la documentation et le code source à partir du shell. Pry le rend possible en le récupérant à partir du code source pendant l’exécution. La commande pour afficher la documentation est show-doc accepte un nom de méthode. show-doc fonctionnera facilement avec la documentation ri et YARD, et il prend également en charge la coloration syntaxique et le formatage. Commençons à jouer avec.

Lorsque je tape show-doc suivi du nom de la méthode dans la console pry, la documentation de la méthode est renvoyée directement sur la console:

pry(main)> show-doc Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicSignature: map()Number of lines: 12Invokes the given block once for each element of self.Creates a new array containing the values returned by the block.See also Enumerable#collect.If no block is given, an Enumerator is returned instead. a = a.collect { |x| x + "!" } #=> a.map.with_index { |x, i| x * i } #=> a #=> 

Le résultat est assez explicite, il renvoie la source de la documentation, sa signature, le nombre de lignes et une description de la méthode fournie. Vous remarquerez qu’il s’agit d’une méthode C, car j’utilise l’IRM. Vous serez heureux de savoir que les commandes de levier de base fonctionnent avec l’un des interprètes, y compris JRuby et Rubinius.

Ainsi, la méthode fait partie du noyau du langage et est écrite en C comme nous pourrions le recueillir à partir du résultat. Nous pouvons monter un et voir la source de cette méthode directement de l’intérieur de pry. Tapez simplement show-source suivi du nom de la méthode :

pry(main)> show-source Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicNumber of lines: 13static VALUErb_ary_collect(VALUE ary){ long i; VALUE collect; RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length); collect = rb_ary_new2(RARRAY_LEN(ary)); for (i = 0; i < RARRAY_LEN(ary); i++) { rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i))); } return collect;}

Le voilà. Le code source du Array#map !

Nous pouvons utiliser show-method ou show-source pour toute méthode disponible. Allez, essayez certaines méthodes que vous avez utilisées.

Hooks

La prochaine fonctionnalité que nous allons voir aujourd’hui sont les hooks. Les hooks ne sont rien d’autre que des méthodes appelables associées à un événement dans Pry. Chaque fois qu’un événement se produit dans Pry, un hook qui lui est associé est exécuté. Pry a déjà certains événements auxquels nous pouvons « accrocher”, comme :before_session:before_eval, et d’autres. Voyons et construisons un hook pour l’un de ces événements préexistants :

 pry(main)> Pry.hooks.add_hook(:after_read, "uphook") do |text, pry| pry(main)* puts text.upcase pry(main)* end

Nous créons ici un hook qui s’exécute après la lecture de chaque instruction par le shell et renvoie la chaîne, la transformant en majuscules. Afin de le tester, nous devons démarrer une nouvelle session de levier pour charger le hook:

 pry(main)> Pry.start# New Session is started here pry(main)> "abc""ABC"=> "abc"

Comme vous pouvez le voir, il met en majuscule la chaîne entrée. C’est un cas d’utilisation simple des crochets, mais vous pouvez en tirer beaucoup plus. Les extensions de levier les utilisent beaucoup pour offrir leurs excellentes fonctionnalités. De plus, vous pouvez même créer vos propres événements, et par la suite, vos propres hooks! En savoir plus sur la création de vos propres événements personnalisés ici

Navigation d’état

Pry fournit une merveilleuse option pour parcourir les objets, passer à travers les contextes et changer de niveau comme dans un système de fichiers. Voyons un exemple.

Tout d’abord, nous allons apprendre une commande appelée cdcd <OBJECT_NAME> change le contexte du shell en objet cible et vous pouvez vérifier les méthodes disponibles sur cet objet ou aller d’un niveau à l’autre:

pry(main)> class Fruitpry(main)* endpry(main)> class Apple < Fruitpry(main)* endpry(main)> self=> mainpry(main)> cd Fruitpry(Fruit):1> self=> Fruitpry(Fruit):1> cd Applepry(Apple):2> self=> Apple

Comme vous pouvez le voir, avec chaque cd dans un objet, le contexte du shell se déplace vers l’objet, et vous pouvez continuer à imbriquer autant que vous le souhaitez. De plus, à tout moment, vous pouvez voir rapidement jusqu’où vous avez imbriqué et votre liste d’imbrication à l’aide de la commande nesting.

pry(Apple):1> nestingNesting status:--0. main (Pry top level)1. Fruit2. Applepry(Apple):1> cd ..pry(Fruit):1> self=> Fruitpry(Fruit):1> cd -pry(Apple):2> self=> Apple

Similaire à la commande Unix cd, pour accéder à l’objet parent, tapez simplement cd .. et pour accéder à l’objet précédent visité avant l’objet actuel, utilisez cd -.

Il existe d’autres commandes utiles qui complètent les fonctionnalités de navigation d’état de Pry, comme ls – pour afficher la liste des méthodes, des modules et plus encore. La commande find-method est utilisée pour trouver la fonctionnalité d’une méthode et ce qu’elle fait. L’ensemble complet des commandes de navigation d’état est documenté ici

Historique

Une autre fonctionnalité utile de Pry est son suivi de l’historique. Par défaut, lorsqu’une session pry est démarrée, Pry enregistre les commandes que vous avez utilisées dans un fichier d’historique que vous pouvez ensuite inspecter, analyser ou même relire. Il existe un certain nombre d’options de configuration fournies par Pry out of the box autour du suivi de l’historique. Par défaut, l’historique est stocké dans le fichier /.pryhistory, mais vous pouvez facilement le modifier en ajoutant ce qui suit à votre fichier .pryrc:

Pry.config.history.file = "~/.filenamehere"

De plus, l’historique est chargé à partir du fichier d’historique chaque fois qu’une session de levier démarre et est enregistré dans le fichier à la fin de la session. Vous pouvez cependant remplacer ce comportement à l’aide de la configuration suivante:

# To Disable the autoloadPry.config.history.should_load = false# To enable the autosavePry.config.history.should_save = false

En plus de travailler directement avec le fichier d’historique, vous pouvez également utiliser la commande pratique hist qui fournit un ensemble d’indicateurs qui facilite le travail avec l’historique de pry. En tapant la commande hist, vous affichez tout l’historique stocké.

 pry(Rails):1> hist1: hist2: cd Rails3: ls4: cd Application5: ls6: show-method assets7: cd ..8: ls

Vous pouvez cependant utiliser les indicateurs pour filtrer et inspecter davantage l’historique. Voici quelques-uns des quelques drapeaux disponibles.

Pour lister toutes les commandes contenant le mot cd, utilisez --grep:

 pry(Rails):1> hist --grep cd2: cd Rails4: cd Application7: cd ..

Pour afficher les 5 dernières commandes que vous avez utilisées, utilisez l’option --tail. Le nombre par défaut si la valeur n’est pas transmise est 10 :

 pry(Rails):1> hist --tail 5 6: show-method assets 7: cd .. 8: ls 9: hist10: hist --grep cd

Il existe d’autres commandes disponibles dans l’interface hist de Pry, qui sont documentées ici. Mais, je voudrais vous montrer un dernier drapeau cool de la commande histreplay. L’indicateur replay vous permet d’exécuter les commandes de l’historique, soit une seule, soit une plage de commandes par leurs numéros de ligne. L’utilisation est simple il suffit de faire hist --replay X..Y:

 pry(main)> hist --replay 2..5constants: API Application CommandsTasks Configuration Console ConsoleMethods Engine Html Info InfoController Initializable MailersController Paths Rack Railtie VERSION WelcomeControllerActiveSupport::Autoload#methods: autoload autoload_at autoload_under autoloads eager_autoload eager_load!Rails.methods: app_class app_class= application application= backtrace_cleaner cache cache= configuration env env= gem_version groups initialize! initialized? logger logger= public_path root versioninstance variables: @_at_path @_autoloads @_eager_autoload @_env @_under_path @app_class @application @cache @logger @parent_namelocals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_...

Conclusion

Avec cela nous sommes arrivés à la conclusion de notre tutoriel. Pry est vraiment un remplacement puissant pour le shell IRB par défaut et fonctionne bien pour améliorer votre flux de travail existant. Nous n’avons parlé que de quelques fonctionnalités de Pry, mais il en contient beaucoup plus, y compris le débogage par étapes (avec la gemme pry-debugger) et la possibilité d’éditer et de recharger des fichiers depuis le REPL. Nous avons déjà un tutoriel pour vous aider à démarrer avec Pry, vous pouvez le lire ici et il y a la page de documentation complète du wiki Pry, qui se trouve ici.

Merci d’avoir lu et j’espère que cela a servi vos objectifs.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.