RubyGems: Conceptos Básicos (3)

El comando gem permite interactuar con las gemas de Ruby.

Ruby 1.9 y versiones más nuevas vienen con RubyGems incorporado, pero es posible que debas actualizar para corregir errores o nuevas funciones.

Si quieres actualizar RubyGems o instalarlo por primera vez (necesitas usar Ruby 1.9), visita la página de descarga.

Encontrar GEMAS

El comando search te permite encontrar gemas remotas por su nombre. Puede usar caracteres de expresión regular en su consulta:

$ gem search ^rails

*** REMOTE GEMS ***

rails (4.0.0)
rails-3-settings (0.1.1)
rails-action-args (0.1.1)
rails-admin (0.0.0)
rails-ajax (0.2.0.20130731)
[...]

Si ves una gema sobre la que deseas obtener más información, puedes agregar la opción de detalles.

Sin embargo, querrás hacer esto con una pequeña cantidad de gemas, ya que listar gemas con detalles requiere descargar más archivos:

$ gem search ^rails$ -d

*** REMOTE GEMS ***

rails (4.0.0)
    Author: David Heinemeier Hansson
    Homepage: http://www.rubyonrails.org

    Full-stack web application framework.

También puede buscar gemas desde el sitio web rubygems.org como [esta búsqueda de rake]:

https://rubygems.org/search?query=MasNombrePorBuscar

Instalación de GEMAS

El comando install descarga e instala la gema y las dependencias necesarias y luego genera la documentación para las gemas instaladas.

$ gem install drip
Fetching: rbtree-0.4.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed rbtree-0.4.1
Fetching: drip-0.0.2.gem (100%)
Successfully installed drip-0.0.2
Parsing documentation for rbtree-0.4.1
Installing ri documentation for rbtree-0.4.1
Parsing documentation for drip-0.0.2
Installing ri documentation for drip-0.0.2
Done installing documentation for rbtree, drip after 0 seconds
2 gems installed

Aquí el comando de depende de la gema rbtree que tiene una extensión. Ruby instala la dependencia rbtree y crea su extensión, instala la gema de goteo y luego crea la documentación para las gemas instaladas.

Puedes deshabilitar la generación de documentación usando el argumento --no-doc al instalar la gema.

Código requerido

RubyGems require es capaz de modificar la ruta de carga de Ruby, que controla cómo la declaración encuentra el código de Ruby.

Cuando require obtiene una gema, en realidad solo estás colocando el directorio lib de esa gema en tu archivo $LOAD_PATH.

Puedes probar esto con irb y obtén ayuda de la biblioteca pretty_print incluida con Ruby.

Sugerencia: Pasar -r a irb requiere automáticamente una biblioteca cuando se carga irb.

% irb -rpp
>> pp $LOAD_PATH
[".../lib/ruby/site_ruby/1.9.1",
 ".../lib/ruby/site_ruby",
 ".../lib/ruby/vendor_ruby/1.9.1",
 ".../lib/ruby/vendor_ruby",
 ".../lib/ruby/1.9.1",
 "."]

De forma predeterminada, solo tiene unos pocos directorios del sistema en la ruta de carga y las bibliotecas estándar de Ruby.

Para agregar los directorios awesome_print a la ruta de carga, puede solicitar uno de sus archivos:

% irb -rpp
>> require 'ap'
=> true
>> pp $LOAD_PATH.first
".../gems/awesome_print-1.0.2/lib"

Nota: para Ruby 1.8, debe hacer require 'rubygems' antes de solicitar las gemas.

Una vez que haya solicitado ap RubyGems coloca automáticamente el directorio lib en el archivo $LOAD_PATH.

Eso es básicamente todo lo que hay en una gema.

Suelta el código de Ruby en lib, asigna un nombre a un archivo de Ruby igual que tu gema (para la gema “freewill”, el archivo debe ser `freewill.rb y RubyGems lo podrá cargar.

El directorio lib en sí, normalmente contiene solo un archivo .rb y un directorio con el mismo nombre que la gema que contiene el resto de los archivos.

Por ejemplo:

% tree freewill/
freewill/
└── lib/
    ├── freewill/
    │   ├── user.rb
    │   ├── widget.rb
    │   └── ...
    └── freewill.rb

Listado de gemas instaladas

El comando list muestra sus gemas instaladas localmente:

$ gem list

*** LOCAL GEMS ***

bigdecimal (1.2.0)
drip (0.0.2)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
psych (2.0.0)
rake (0.9.6)
rbtree (0.4.1)
rdoc (4.0.0)
test-unit (2.0.0.0)

(Ruby viene con algunas gemas por defecto, bigdecimal, io-console, json, minitest, psych, rake, rdoc, test-unit para ruby 2.0.0).

Desinstalar GEMAS

El comando uninstall elimina las gemas que has instalado.

$ gem uninstall drip
Successfully uninstalled drip-0.0.2

Si desinstalas una dependencia de una GEMA. RubyGems te pedirá confirmación.

$ gem uninstall rbtree

You have requested to uninstall the gem:
  rbtree-0.4.1

drip-0.0.2 depends on rbtree (>= 0)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN]  n
ERROR:  While executing gem ... (Gem::DependencyRemovalException)
    Uninstallation aborted due to dependent gem(s)

Visualización de la documentación

Puedes ver la documentación de sus gemas instaladas con el comando ri:

$ ri RBTree
RBTree < MultiRBTree

(from gem rbtree-0.4.0)
-------------------------------------------
A sorted associative collection that cannot
contain duplicate keys. RBTree is a
subclass of MultiRBTree.
-------------------------------------------

Obteniendo y desempaquetando GEMAS

Si deseas auditar el contenido de una gema sin instalarla, puedes usar el comando fetch para descargar el archivo .gem y luego extraer el contenido con el comando unpack.

$ gem fetch malice
Fetching: malice-13.gem (100%)
Downloaded malice-13
$ gem unpack malice-13.gem
Fetching: malice-13.gem (100%)
Unpacked gem: '.../malice-13'
$ more malice-13/README

Malice v. 13

DESCRIPTION

A small, malicious library.

[...]
$ rm -r malice-13*

También puede descomprimir una gema que hayas instalado, modificar algunos archivos y luego usar la gema modificada en lugar de la instalada:

$ gem unpack rake
Unpacked gem: '.../rake-10.1.0'
$ vim rake-10.1.0/lib/rake/...
$ ruby -I rake-10.1.0/lib -S rake some_rake_task
[...]

Con el argumento -I puedes agregar el rake desempaquetado al rubí $LOAD_PATH, lo que evita que RubyGems cargue la versión de la gema (o la versión predeterminada).

El argumento -S se encuentra rake en el shell de $PATH para que no tengas que escribir la ruta completa.


Seguir Aprendiendo

Esta guía solo muestra los aspectos básicos del uso del comando gem.

Para obtener información sobre lo que hay dentro de una gema y cómo usar una que hayas instalado, consulta la siguiente sección, ¿Qué es una gema?

Para obtener una referencia completa de los comandos de gemas, consulte la referencia de comandos.


<<

Artículos Relacionados
26 Mejores BIBLIOTECAS de PYTHON

En este espacio vamos a analizar las mejores y más reconocidas Librerías de Python, las cuales los desarrolladores pueden utilizar para trabajar en el aprendizaje automático y dentro de muchas de las aplicaciones enfocadas al trabajo de datos existentes en la actualidad. Es posible ¡SEGUIR LEYENDO!

Gooey: Convierte cualquier programa de línea de comandos de Python en una aplicación GUI

Convierte (casi) cualquier programa de consola Python 2 o 3 en una aplicación GUI con una línea. ¿Qué es Gooey? Gooey convierte las aplicaciones de consola en aplicaciones GUI fáciles de usar. Permite concentrarse en crear programas robustos y configurables de una manera familiar, ¡SEGUIR LEYENDO!

15 Mejores Lenguajes de Programación que Aprender

Una de las habilidades más importantes para aprender en el mundo de hoy en día, es saber programar con un lenguaje de programación. En la actualidad, las computadoras han entrado en casi todas las industrias, desde el piloto automático de un avión hasta el ¡SEGUIR LEYENDO!

Comparte tu opinión