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)
<<