El objeto ENV en Ruby
En este artículo vamos a explorar los siguientes temas:
- el objeto
ENV
-
ENV
y las funciones de la biblioteca estándar -
ENV
detrá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!
ENV
Proporciona 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 entornoAN_ENV_VARIABLE
usando el métodoENV.=
- 002- luego accedemos al valor de
AN_ENV_VARIABLE
usando el métodoENV.
- 003- modificamos el valor de
AN_ENV_VARIABLE
a'great!'
usando el métodoENV.=
- 004- borramos la variable de entorno
AN_ENV_VARIABLE
utilizando el métodoENV.delete
- 005- intentamos acceder a la
AN_ENV_VARIABLE
y le damos un valor por defecto si no existe utilizando el métodoENV.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 ENV
depende 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à !