← Ruby EspañolChapter 11 of 13

Ruby Gems y Bundler

## Objetivos de Aprendizaje - Comprender la estructura de RubyGems - Usar la herramienta de linea de comandos gem - Gestionar dependencias con Bundler - Crear y distribuir gems ## Vision General de RubyGems RubyGems es el gestor de paquetes de Ruby. Las gems son librerias reutilizables distribuidas como paquetes. ### Buscar Gems ```bash gem search rails # Buscar gems gem list # Listar gems instaladas gem info rails # Mostrar info de gem ``` ### Instalar Gems ```bash gem install nombre_gem gem install nombre_gem --version '~> 2.0' gem install rails --no-document # Omitir documentacion ``` ### Usar Gems Instaladas ```ruby require 'nombre_gem' # O especificar version gem 'rake', '~> 13.0' require 'rake' ``` ## Bundler Bundler gestiona las dependencias de gems para proyectos Ruby. ### Gemfile Crea un `Gemfile` en la raiz de tu proyecto: ```ruby source 'https://rubygems.org' # Especificar gem con version gem 'rails', '~> 7.0' # Gem sin version (usa la ultima) gem 'puma' # Gem con opciones gem 'mysql2', '>= 0.4.4', '< 1.0' # Repositorio Git gem 'capistrano', git: 'https://github.com/capistrano/capistrano.git' # Ruta local gem 'mi_gem', path: '~/codigo/mi_gem' # Grupos group :development, :test do gem 'rspec' gem 'pry' end ``` ### Instalar Dependencias ```bash bundle install bundle install --jobs=4 # Instalacion paralela bundle update # Actualizar todas las gems ``` ### Gemfile.lock Despues de `bundle install`, se crea `Gemfile.lock` con las versiones exactas: ```ruby GEM remote: https://rubygems.org/ specs: rails (7.0.0) actionmailbox (= 7.0.0) ... rspec (3.10.0) ... PLATFORMS ruby DEPENDENCIES rails (~> 7.0) rspec BUNDLED WITH 2.3.0 ``` ### Usar Gems en el Codigo ```ruby require 'bundler/setup' # O dejar que Bundler configure automaticamente require 'bundler' Bundler.require # En un script require 'bundler/setup' ``` ### Ejecutar Gems ```bash bundle exec rspec bundle exec rake db:migrate bundle exec ruby script.rb ``` ## Comandos de Bundler ```bash bundle install # Instalar dependencias bundle update # Actualizar gems bundle exec CMD # Ejecutar comando en contexto de bundle bundle list # Listar gems instaladas bundle show GEM # Mostrar ruta de gem bundle check # Verificar dependencias bundle outdated # Verificar gems desactualizadas bundle init # Crear nuevo Gemfile ``` ## Crear una Gem ### Estructura ```text mi_gem/ ├── mi_gem.gemspec ├── lib/ │ └── mi_gem/ │ ├── version.rb │ └── mi_gem.rb ├── spec/ │ └── mi_gem_spec.rb └── README.md ``` ### Archivo Gemspec ```ruby Gem::Specification.new do |s| s.name = 'mi_gem' s.version = '1.0.0' s.authors = ['Tu Nombre'] s.email = 'tu@email.com' s.summary = 'Una gem de ejemplo' s.description = 'Una descripcion mas larga' s.homepage = 'https://github.com/tu/mi_gem' s.license = 'MIT' s.files = `git ls-files -z`.split("\x0") s.require_paths = ['lib'] s.required_ruby_version = '>= 2.4' s.add_dependency 'json' s.add_development_dependency 'rspec', '~> 3.0' end ``` ### Archivo de Libreria Principal ```ruby # lib/mi_gem.rb require 'mi_gem/version' module MiGem class Error < StandardError; end def self.saludar(nombre) "Hola, #{nombre}!" end end ``` ```ruby # lib/mi_gem/version.rb module MiGem VERSION = '1.0.0' end ``` ### Construir e Instalar ```bash gem build mi_gem.gemspec gem install ./mi_gem-1.0.0.gem gem push mi_gem-1.0.0.gem # Publicar en RubyGems.org ``` ## Gems Comunes ### Frameworks Web | Gem | Descripcion | |-----|-------------| | rails | Framework web full-stack | | sinatra | Framework web ligero | | rack | Interfaz de servidor web | ### Base de Datos | Gem | Descripcion | |-----|-------------| | activerecord | ORM (parte de Rails) | | sequel | ORM ligero | | pg | Adaptador PostgreSQL | ### Pruebas | Gem | Descripcion | |-----|-------------| | rspec | Framework BDD | | minitest | Framework de pruebas unitarias | | capybara | Pruebas de integracion | | factory_bot | Fixtures de prueba | ### Utilidades | Gem | Descripcion | |-----|-------------| | pry | REPL y depurador | | bundler | Gestor de dependencias | | rake | Automatizacion de tareas | | faraday | Cliente HTTP | ## .gemspec vs Gemfile | Aspecto | gemspec | Gemfile | |---------|---------|---------| | Proposito | Definicion del paquete | Gestion de dependencias | | Usado por | gem build/install | bundle install | | Versioning | En archivo | Archivo lock | | Plataforma | gem install | bundle exec | ## Resumen - RubyGems es el gestor de paquetes para Ruby - `gem install` instala globalmente - Bundler gestiona las dependencias del proyecto via Gemfile - `bundle install` instala desde Gemfile - `bundle exec` ejecuta comandos en contexto de bundle - Gemspec define metadatos y dependencias de la gem - `gem build` y `gem push` para publicar

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →