L’objet ENV en Ruby

Avr 29, 2021
admin

L’objet ENV en… Ruby
Mehdi Farsi

Follow

19 juil, 2018 – 3 min lu

Dans cet article, nous allons explorer les sujets suivants :

  • l’objet ENV
  • ENV et les fonctions de la bibliothèque standard
  • ENV derrière la scène

Avant de commencer

Je suis ravi de partager avec vous notre dernier projet : Fun Facts about Ruby – Volume 1

N’hésitez pas à faire passer le mot et à partager ce post ! 🙏

Merci pour votre temps!

ENV fournit une API pour manipuler les variables d’environnement.

En agissant comme un Hash, il fournit un ensemble de méthodes pour ajouter, modifier, supprimer et accéder aux variables d’environnement qui est définitivement Ruby-friendly

Dans l’exemple ci-dessus, nous pouvons voir une brève utilisation de l’API :

  • 001- nous définissons la valeur 'cool!' à la variable d’environnement AN_ENV_VARIABLE en utilisant la méthode ENV.=
  • 002- puis nous accédons à la valeur de AN_ENV_VARIABLE en utilisant la méthode ENV.
  • 003- nous modifions la valeur de AN_ENV_VARIABLE en 'great!' en utilisant la méthode ENV.=
  • 004- on supprime la variable d’environnement AN_ENV_VARIABLE en utilisant la méthode ENV.delete
  • 005- on essaie d’accéder à la AN_ENV_VARIABLE et on fournit une valeur par défaut si elle n’existe pas en utilisant la méthode ENV.fetch

C’est cool ! Mais où sont les variables d’environnement du système ?

ENV et les fonctions de la bibliothèque standard

L’objet ENV s’appuie sur les fonctions de la bibliothèque standard C pour gérer les variables d’environnement.

Par exemple, lorsque vous appelez la méthode ENV.alors Ruby appelle la fonction appropriée de la bibliothèque standard C en fonction de votre OS – getenv(3) pour les OS de type unix par exemple – pour récupérer la variable d’environnement appropriée.

Ce système est efficace et s’appuie sur une bibliothèque standard forte.

De plus, seules les variables d’environnement manipulées à l’exécution sont accessibles. Il n’y a pas de variables d’environnement préchargées en mémoire au démarrage du programme Ruby.

Alors, maintenant, regardons comment ENV est implémenté derrière la scène.

ENV derrière la scène

ENV est un objet de type hash. Cela signifie que c’est une instance de Object et qu’il a un tas de méthodes similaires à une instance de Hash.

irb> ENV.class
=> Object

Dans la scène, l’objet ENV recode les méthodes de type hash (comme ENV) afin d’utiliser la famille de fonctions C *env(3). Ainsi, l’objet ENV n’est qu’un wrapper Ruby sur les fonctions C qui sont chargées de gérer les variables d’environnement

De plus, l’objet ENV étend le module Enumerable mais surcharge un tas de méthodes de ce module comme each et each_pair par exemple

irb> ENV.singleton_class.included_modules
=>

Pour récapituler, ENV est une instance « énumérable » de Object stockée dans une constante globale.

N’hésitez pas à parcourir le fichier hash.c pour plus d’informations.

Voilà !

Laisser un commentaire

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