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.
- RubyGems: Conceptos Básicos (3)
- RubyGems: ¿Qué es una Gema? (4)
- RubyGems: ¿Cómo hacer una gema? (5)
- RubyGems: Gemas con extensiones (6)
- RubyGems: Nombrando tu gema (7)
<<