Inicio / Ruby / Ruby: Lenguaje Elegante y Expresivo / Gemas y Bundler

Gemas y Bundler

RubyGems, Gemfile, Bundler, crear gemas propias, Rake y gestión de versiones.

Avanzado
🔒 Solo lectura
📖

Estás en modo lectura

Puedes leer toda la lección, pero para marcar progreso, hacer ejercicios y ganar XP necesitas una cuenta Pro.

Desbloquear por $9/mes

Gemas y Bundler

Las gemas son paquetes de Ruby y Bundler es el gestor de dependencias estándar.


RubyGems

# Instalar una gema
gem install httparty
gem install rails -v 8.0.0

# Listar gemas instaladas
gem list

# Información de una gema
gem info httparty

# Buscar gemas
gem search json

# Desinstalar
gem uninstall httparty

# Actualizar
gem update httparty

Usar gemas en código

require 'httparty'
require 'json'

response = HTTParty.get('https://api.github.com/users/octocat')
puts response['name']     # "The Octocat"
puts response['location'] # "San Francisco"

Bundler

Bundler gestiona las dependencias de un proyecto Ruby.

Gemfile

# Gemfile
source 'https://rubygems.org'

# Versión de Ruby
ruby '3.3.0'

# Gemas principales
gem 'rails', '~> 8.0'
gem 'pg', '~> 1.5'
gem 'puma', '>= 6.0'
gem 'redis', '~> 5.0'

# Solo en desarrollo y test
group :development, :test do
  gem 'rspec-rails', '~> 7.0'
  gem 'rubocop', '~> 1.60'
  gem 'debug', '>= 1.0'
end

# Solo en desarrollo
group :development do
  gem 'solargraph'
  gem 'web-console'
end

# Solo en producción
group :production do
  gem 'aws-sdk-s3'
end

Operadores de versión

gem 'rails', '8.0.0'       # exacta
gem 'rails', '>= 8.0'      # mayor o igual
gem 'rails', '~> 8.0'      # >= 8.0, < 9.0 (pessimistic)
gem 'rails', '~> 8.0.1'    # >= 8.0.1, < 8.1 (patch level)
gem 'rails', '>= 7.0', '< 9.0'  # rango

Comandos de Bundler

# Instalar dependencias
bundle install

# Actualizar gemas
bundle update              # todas
bundle update rails        # solo una

# Ejecutar con el entorno de bundle
bundle exec rake db:migrate
bundle exec rspec

# Ver gemas instaladas
bundle list

# Ver gemas desactualizadas
bundle outdated

# Añadir gema
bundle add httparty

# Crear Gemfile.lock
bundle lock

# Abrir código fuente de una gema
bundle open rails

Crear tu propia gema

Estructura

bundle gem mi_gema
mi_gema/
├── Gemfile
├── README.md
├── Rakefile
├── mi_gema.gemspec
├── lib/
│   ├── mi_gema.rb
│   └── mi_gema/
│       └── version.rb
├── spec/
│   ├── mi_gema_spec.rb
│   └── spec_helper.rb
└── sig/
    └── mi_gema.rbs

Gemspec

# mi_gema.gemspec
Gem::Specification.new do |spec|
  spec.name          = "mi_gema"
  spec.version       = MiGema::VERSION
  spec.authors       = ["Tu Nombre"]
  spec.email         = ["tu@email.com"]
  spec.summary       = "Descripción corta"
  spec.description   = "Descripción larga de la gema"
  spec.homepage      = "https://github.com/user/mi_gema"
  spec.license       = "MIT"

  spec.required_ruby_version = ">= 3.0"

  spec.files = Dir["lib/**/*", "README.md", "LICENSE"]
  spec.require_paths = ["lib"]

  spec.add_dependency "httparty", "~> 0.21"
  spec.add_development_dependency "rspec", "~> 3.12"
end

Código de la gema

# lib/mi_gema.rb
require_relative "mi_gema/version"

module MiGema
  class Error < StandardError; end

  class Client
    def initialize(api_key:)
      @api_key = api_key
    end

    def fetch(endpoint)
      # lógica
    end
  end
end

# lib/mi_gema/version.rb
module MiGema
  VERSION = "0.1.0"
end

Publicar

# Construir
gem build mi_gema.gemspec

# Publicar en RubyGems
gem push mi_gema-0.1.0.gem

# O instalar localmente
gem install mi_gema-0.1.0.gem

Rake (tareas)

# Rakefile
require 'rake'

desc "Ejecutar las pruebas"
task :test do
  sh 'bundle exec rspec'
end

desc "Lint del código"
task :lint do
  sh 'bundle exec rubocop'
end

namespace :db do
  desc "Crear la base de datos"
  task :create do
    puts "Creando base de datos..."
  end

  desc "Migrar la base de datos"
  task :migrate do
    puts "Ejecutando migraciones..."
  end

  desc "Seed de datos"
  task seed: :migrate do   # depende de migrate
    puts "Insertando datos..."
  end
end

task default: [:lint, :test]
rake              # ejecuta default
rake test         # ejecuta test
rake db:migrate   # ejecuta la tarea dentro del namespace
rake -T           # lista todas las tareas

Gestión de versiones de Ruby

rbenv

rbenv install --list         # versiones disponibles
rbenv install 3.3.0          # instalar
rbenv global 3.3.0           # establecer global
rbenv local 3.2.0            # establecer por proyecto (.ruby-version)
rbenv versions               # listar instaladas

.ruby-version

3.3.0

Resumen

Concepto Descripción
gem install Instalar gema individual
Gemfile Declarar dependencias del proyecto
bundle install Instalar dependencias
bundle exec Ejecutar en contexto
~> Version pessimistic (minor/patch)
.gemspec Especificación de gema
Rakefile Tareas automatizadas
rbenv Gestor de versiones de Ruby
🔒

Ejercicio práctico disponible

Crea un Gemspec y Rakefile

Desbloquear ejercicios
// Crea un Gemspec y Rakefile
// Desbloquea Pro para acceder a este ejercicio
// y ganar +50 XP al completarlo

function ejemplo() {
    // Tu código aquí...
}

¿Te gustó esta lección?

Con Pro puedes marcar progreso, hacer ejercicios, tomar quizzes, ganar XP y obtener tu constancia.

Ver planes desde $9/mes