El objeto ENV en Ruby

Abr 29, 2021
admin

El objeto ENV en Ruby
Mehdi Farsi

Sigue

Jul 19, 2018 – 3 min read

En este artículo vamos a explorar los siguientes temas:

  • el objeto ENV
  • ENVy las funciones de la biblioteca estándar
  • ENVdetrás de la escena

Antes de empezar

Estoy encantado de compartir con vosotros nuestro último proyecto: Fun Facts about Ruby – Volume 1

¡Por favor, no dudes en difundir este post y compartirlo! 🙏

¡Gracias por tu tiempo!

ENVProporciona una API para manipular las variables de entorno.

Actuando como un Hash, proporciona un conjunto de métodos para añadir, cambiar, eliminar y acceder a las variables de entorno que es definitivamente amigable con Ruby

En el ejemplo anterior podemos ver un breve uso de la API:

  • 001- establecemos el valor 'cool!' a la variable de entorno AN_ENV_VARIABLE usando el método ENV.=
  • 002- luego accedemos al valor de AN_ENV_VARIABLE usando el método ENV.
  • 003- modificamos el valor de AN_ENV_VARIABLE a 'great!' usando el método ENV.=
  • 004- borramos la variable de entorno AN_ENV_VARIABLE utilizando el método ENV.delete
  • 005- intentamos acceder a la AN_ENV_VARIABLE y le damos un valor por defecto si no existe utilizando el método ENV.fetch

¡Eso es genial! Pero, ¿dónde están las variables de entorno del sistema?

ENV y las funciones de la biblioteca estándar

El objeto ENVdepende de las funciones de la biblioteca estándar de C para gestionar las variables de entorno.

Por ejemplo, cuando llamas al método ENV. entonces Ruby llama a la función apropiada de la librería estándar de C dependiendo de tu sistema operativo – getenv(3) para sistemas operativos tipo unix por ejemplo – para obtener la variable de entorno apropiada.

Este sistema es eficiente y se basa en una fuerte librería estándar.

Además, sólo se accede a las variables de entorno manipuladas en tiempo de ejecución. No hay variables de entorno precargadas en memoria al inicio del programa Ruby.

Ahora veamos cómo se implementa ENV detrás de la escena.

ENV detrás de la escena

ENV es un objeto tipo hash. Esto significa que es una instancia de Object y que tiene un montón de métodos similares a una instancia de Hash.

irb> ENV.class
=> Object

Detrás de la escena, el objeto ENV recodifica los métodos tipo hash (como ENV) para poder utilizar la familia de funciones *env(3) C. Así que el objeto ENV no es más que un wrapper de Ruby sobre funciones C que se encargan de gestionar las variables de entorno

Además, el objeto ENV extiende el módulo Enumerable pero sobrescribe un montón de métodos de este módulo como each y each_pair por ejemplo

irb> ENV.singleton_class.included_modules
=>

Para recapitular, ENV es una instancia «enumerable» de Object almacenada en una constante global.

Siéntase libre de examinar el archivo hash.c para obtener más información.

Voilà !

Deja una respuesta

Tu dirección de correo electrónico no será publicada.