¿Qué es una gema?
Las gemas en Ruby son un formato estándar para poder distribuir programas o bibliotecas, de esta forma podemos instalar y ocupar de forma sencilla programas y bibliotecas escritos por terceros e incluso reutilizar bibliotecas nuestras.
Estas gemas, generalmente, son manejadas por RubyGems, que es un administrador de paquetes para Ruby y que provee un formato estandar para la distribución de gemas.
En este artículo podrás aprender a crear, utilizar y publicar tu primera gema.
Creando nuestra primera gema
Debemos decidir el nombre de nuestra gema, en este caso nuestra gema se llama ‘gemadesafio’.
Para comenzar
- Crear una nueva carpeta que contendrá nuestra nueva gema.
- Dentro de esta carpeta debemos crear un archivo llamado gemspec.
- Lo primero que debemos hacer cuando creamos una nueva gema es crear un archivo llamado gemspec que contiene información sobre la gema. El nombre del archivo gemspec debe ser nombregema.gemspec.
En este caso el nombre del archivo serágemadesafio.gemspec
.
# Archivo nueva_gema/gemadesafio.gemspec Gem::Specification.new do |s| s.name = "gemadesafio" s.version = '0.0.1' s.date = '2017-05-02' s.authors = ["David Barrientos"] s.email = ["david.barrientos.f@gmail.com"] s.summary = "My very first" s.description = "Simple Hello World" s.homepage = "https://github.com/dbarrientos/gemadesafio" #s.files = ["lib/mygem3.rb"] # or s.files = Dir["{lib}/**/*.rb", "bin/*", "LICENSE", "*.md"] end
- Pueden encontrar todas las opciones en http://guides.rubygems.org/specification-reference.
- En la siguiente linea:
s.files = Dir["{lib}/**/*.rb", "bin/*", "LICENSE", "*.md"]
Se incluirán todos los archivos
.rb
que se encuentren dentro de la carpetalib
. - Lo primero que debemos hacer cuando creamos una nueva gema es crear un archivo llamado gemspec que contiene información sobre la gema. El nombre del archivo gemspec debe ser nombregema.gemspec.
- A continuación, crearemos el código ruby para nuestra librería. Para esto, primero, dentro de la carpeta de nuestra gema, crearemos una nueva carpeta llamada
lib
. - Dentro de esta carpeta crearemos nuestro archivo
.rb
donde crearemos una clase simple con un método de clase simple. El archivo se llamarágemadesafio.rb
.# Archivo nueva_gema/lib/gemadesafio.rb class Gemadesafio def self.hola return "Hola mundo!!!" end end
- Ahora construiremos nuestra gema. Para esto abriremos el terminal y nos dirigiremos a la carpeta de nuestra nueva gema. Una vez ahí escribiremos (siempre en el terminal)
gem build gemadesafio.gemspec
.- Una vez ejecutada la instrucción podrás ver algo asi:
$ gem build gemadesafio.gemspec WARNING: licenses is empty, but is recommended. Use a license identifier from http://spdx.org/licenses or 'Nonstandard' for a nonstandard license. WARNING: See http://guides.rubygems.org/specification-reference/ for help Successfully built RubyGem Name: gemadesafio Version: 0.0.1 File: gemadesafio-0.0.1.gem
- Esto generará un archivo dentro de nuestra carpeta de la gema llamado
gemadesafio-0.0.1.gem
.
Usando la nueva gema en una aplicación
Usando nuestra gema localmente
Para poder hacer uso de nuestra gema debemos instalarla en nuestro gemfile. Pasa eso es necesario correr el siguiente comando en nuestro terminal gem install ./gemadesafio-0.0.1.gem
.
Ahora puedes usar tu gema en tu aplicación de Rails de forma local incluyendola dentro del gemfile de tu aplicación con la linea gem 'gemadesafio'
.
Puedes acceder a su funcionalidad de la siguiente forma
s = Gemadesafio.hola
Incluso, podrías probar tu gema desde la consola de ruby.
$ irb 2.3.3 :001 > require 'gemadesafio' => true 2.3.3 :002 > Gemadesafio.hola => "Hola Mundo!!!!!"
Publicando nuestra gema en RubyGems
Puedes compartir tus gemas creadas con la comunidad de Ruby publicándola en RubyGems.org.
Para esto es necesario crearnos una cuenta gratis en https://rubygems.org/.
Una vez que tengamos una cuenta creada en RubyGems debemos ingresar en nuestro terminal gem push gemadesafio-0.0.1.gem
.
Puede que, al principio les solicite sus credenciales de RubyGems (email y password). Despues de esto debería devolver el siguiente mensaje
Pushing gem to https://rubygems.org... Successfully registered gem: gemadesafio (0.0.1)
Muy bien, haz creado tu primera gema!!!!!
Ahora otros desarrolladores podrán instalar la gema recién creada gem install gemadesafio
o incluyendola dentro del gemfile con la línea gem 'gemadesafio'
.
Para mayor información pueden revisar la documentación de RubyGems
http://guides.rubygems.org/make-your-own-gem/