Los fundamentos de una gema de Ruby

He estado usando gemas de rubí durante unas semanas, y ha sido genial, pero no estaba realmente seguro de lo que estaba sucediendo bajo el capó cuando añadí una a mi aplicación. Así que esta entrada del blog es para ayudarme a entender cómo funcionan las gemas y espero que te ayude a ti también.

Una gema de rubí es un código de rubí empaquetado que puedes añadir a tu aplicación. Esto puede ahorrarte algo de tiempo al utilizar código que otros han escrito para resolver problemas similares. Por ejemplo, si quieres cambiar el color de algún texto, puedes instalar y utilizar la gema colorize. Obtienes toda su funcionalidad sin tener que escribir ese código tú mismo.

Sinatra es una gema, Rack es una gema, y me sorprendió saber que incluso Rails es una gema. Todas las gemas públicas se publican a través de RubyGems.org. Aquí es donde la gente puede contribuir y compartirlas con la comunidad.

Empecemos por instalar una gema

Elige una gema y vamos a instalarla. Yo he elegido añadir a mi aplicación la gema colorize, que cambia el color de una cadena que le pasamos. Puedes ejecutar gem install gem_name para descargar la gema en tu ordenador y ponerla a disposición de tus aplicaciones. ¿Te preguntas dónde vive esa gema después de su instalación? Puedes ejecutar gem which gem_name y te dirá exactamente dónde está.

gem install colorize

Para usar la gema en nuestro código necesitarás requerir la gema en la parte superior de tu archivo poniendo require ‘gem_name’. Hacemos esto para tener acceso a la gema y ahora no tendremos que escribir nuestro propio código para colorear el texto.

require ‘colorize’

Ahora que tienes la gema instalada y requerida, puedes usarla. Normalmente, si vas al repo de GitHub de la gema, encontrarás información importante sobre sus características y cómo usarlas.

https://github.com/fazibear/colorize

¡Usémosla!

Así que hemos leído el readme y ahora queremos añadir algo de color a nuestro texto. He añadido tres colores diferentes en mi código, llamando a .colorze(:color) sobre una cadena.

Ejecutando el código

¡Genial! ¿No se ve bien? Así que instalamos nuestra gema y parece que funciona, pero ¿qué pasa si tenemos una aplicación más grande que requiere muchas gemas? Llamar a gem install y requerir cada gema parece mucho trabajo. Seguramente hay una manera más fácil.

Bundler

Bundler nos hace la vida mucho más fácil. ¿Qué es bundler? Pues es una gema, por supuesto. Rastrea cada gema e instala la gema exacta y la versión que necesitas usar en tu aplicación. Para usar bundler, necesitarás un Gemfile en el directorio de tu proyecto y dentro puedes listar tantas gemas como quieras. Para ello, sólo tienes que abrir el Gemfile y añadir la gema ‘gem_name’.

Una vez que la hayas añadido a tu Gemfile, asegúrate de ejecutar bundle install en tu terminal. Esto instalará todas las gemas listadas en tu Gemfile, junto con sus dependencias. Esto facilita mucho las cosas. Lo mejor es que Ruby 2.6 y posteriores incluyen bundler automáticamente, así que no tendrás que instalarlo tú mismo.

Parece que todavía tenemos que añadir require ‘gem_file’ al principio de nuestros archivos, y eso también parece mucho trabajo si tenemos muchos. Resulta que bundler también pensó en esto. Puedes añadir require ‘bundler’ al principio de tu archivo .rb y escribir Bunlder.require(:default). Lo que esto hace bajo el capó es llamar a require ‘nombre_gema’ para cada gema que tengas en tu archivo de gemas.

Bundler.require(:default)

Una vez que hayas ejecutado la instalación de bundle, puedes notar que un montón de gemas que no has añadido se están instalando. ¿A qué se debe esto? Muchas gemas requieren que se instalen otras gemas junto con ellas. Por ejemplo, rails requerirá muchas otras gemas y esas gemas pueden requerir otras gemas y así sucesivamente. Bundler se asegurará de que todas las versiones de gemas instaladas sean compatibles entre sí.

Después de encontrar las versiones correctas de cada gema, registra esas versiones en otro archivo llamado Gemfile.lock. Esto hace posible instalar exactamente la misma versión en cada máquina que necesite ejecutar esta aplicación.

Un archivo Gemfile.lock

Puedes ver en mi Gemfile.lock que lolize requiere la gema paint y las versiones que puede utilizar. Así que bundler cogerá eso y la versión correcta para nosotros. ¿No es eso útil? ¡Gracias bundler!

¡Así que eso es todo! Espero que esto haya ayudado a entender lo básico de una gema y bundler. Hay muchas gemas por ahí que puedes usar y puedes buscarlas aquí. https://rubygems.org/.

Deja una respuesta

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