mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-18 12:52:29 +03:00
158 lines
7.5 KiB
Markdown
158 lines
7.5 KiB
Markdown
---
|
|
category: tool
|
|
tool: ruby ecosystem
|
|
contributors:
|
|
- ["Jon Smock", "http://github.com/jonsmock"]
|
|
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
|
|
translators:
|
|
- ["Ale Mohamad", "http://twitter.com/alemohamad"]
|
|
lang: es-es
|
|
---
|
|
|
|
Las personas que usan Ruby en general tienen una tendencia a instalar diferentes
|
|
versiones de Ruby, administrar sus paquetes (o gemas), y gestionar las
|
|
dependencias de sus gemas.
|
|
|
|
## Gestores de Ruby
|
|
|
|
Algunas plataformas ya tienen Ruby pre-instalado o disponible como un paquete
|
|
propio. Muchos rubystas no utilizan estas versiones, o si lo hacen, solo lo
|
|
utilizan para preparar otra instalación o implementación de Ruby. En lugar de
|
|
eso, los rubystas tienden a instalar un gestor de Ruby para poder instalar
|
|
diferentes versiones y poder cambiar dependiendo del entorno de cada proyecto.
|
|
|
|
Los siguientes son gestores populares de entorno de Ruby:
|
|
|
|
* [RVM](https://rvm.io/) - Instala y cambia versiones de Ruby. Además RVM tiene
|
|
el concepto de gemsets para aislar complemtante entornos de proyectos.
|
|
* [ruby-build](https://github.com/sstephenson/ruby-build) - Solo instala
|
|
versiones de Ruby. Se utiliza para tener un control más fino sobre las
|
|
versiones instaladas de Ruby.
|
|
* [rbenv](https://github.com/sstephenson/rbenv) - Solo se utiliza para cambiar
|
|
la versión de Ruby. Se utiliza junto con ruby-build. Se utiliza para tener un
|
|
control más fino sobre cómo se carga Ruby en el sistema.
|
|
* [chruby](https://github.com/postmodern/chruby) - Solo se utiliza para cambiar
|
|
la versión de Ruby. En espíritu es similar a rbenv. No le es tan importante
|
|
como son instaladas las versiones de Ruby.
|
|
|
|
## Versiones de Ruby
|
|
|
|
Ruby fue creado por Yukihiro "Matz" Matsumoto, quien se mantiene como una
|
|
especie de [BDFL](https://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life),
|
|
aunque recientemente está cambiando. Como resultado, la implementación de
|
|
referencia de Ruby es llamada MRI (Matz' Reference Implementation), y cuando se
|
|
habla de una versión de Ruby, se está haciendo referencia a la versión inicial
|
|
de MRI.
|
|
|
|
Las tres versiones mayores en uso de Ruby son:
|
|
|
|
* 2.0.0 - Lanzada en Febrero de 2013. La mayoría de las librerías importantes y
|
|
frameworks soportan 2.0.0.
|
|
* 1.9.3 - Lanzada en Octubre de 2011. Es la versión que actualmente usan más
|
|
rubystas. Además fue
|
|
[retirada](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
|
|
* 1.8.7 - Ruby 1.8.7 fue
|
|
[retirada](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
|
|
|
|
El cambio de 1.8.7 a 1.9.x es un cambio mucho mayor que de 1.9.3 a 2.0.0. Por
|
|
ejemplo, la serie 1.9 presentó codificaciones (encodings) y un bytecode VM.
|
|
Todavía hay proyectos que utilizan 1.8.7, pero se están convirtiendo en una
|
|
pequeña minoría, debido a que la mayor parte de la comunidad está utilizando
|
|
como mínimo 1.9.2 o 1.9.3.
|
|
|
|
## Implementaciones de Ruby
|
|
|
|
El ecosistema de Ruby disfruta de muchas diferentes implementaciones de Ruby,
|
|
cada una con fortalezas únicas y estados de compatibilidad. Para ser claros, las
|
|
diferentes implementaciones están escritas en diferentes lenguajes, pero *todas
|
|
son Ruby*. Cada implementación tiene hooks especiales y características extra,
|
|
pero todas interpretan archivos Ruby de forma normal. Por ejemplo, JRuby está
|
|
escrito en Java, pero no necesitás saber de Java para poder utilizarla.
|
|
|
|
Muy maduras/compatibles:
|
|
|
|
* [MRI](https://github.com/ruby/ruby) - Escrita en C, es la implementación de
|
|
referencia de Ruby. Por definición es 100% compatible (consigo misma). Las
|
|
otras implementaciones de Ruby mantienen compatibilidad con MRI (ver
|
|
[RubySpec](#rubyspec) más abajo).
|
|
* [JRuby](http://jruby.org/) - Escrita en Java y Ruby, esta implementación es
|
|
robusta y bastante veloz. Más importante, la fortaleza de JRuby reside en la
|
|
interoperabilidad con JVM/Java, pudiendo utilizar herramientas, proyectos y
|
|
lenguajes ya existentes en JVM.
|
|
* [Rubinius](http://rubini.us/) - Escrita principalmente en Ruby junto con un
|
|
bytecode VM de C++. Además es bastante madura y veloz. Debido a que está
|
|
implementada de forma directa en Ruby, expone varias funcionalidades de VM en
|
|
rubyland.
|
|
|
|
Medianamente maduras/compatibles:
|
|
|
|
* [Maglev](http://maglev.github.io/) - Construida sobre Gemstone, una VM de
|
|
Smalltalk. Smalltalk tiene herramientas que son impresionantes, y este
|
|
proyecto intenta llevar eso dentro del desarrollo con Ruby.
|
|
* [RubyMotion](http://www.rubymotion.com/) - Lleva Ruby al desarrollo en iOS.
|
|
|
|
No tan maduras/compatibles:
|
|
|
|
* [Topaz](http://topazruby.com/) - Escrito en RPython (usando el intérprete
|
|
PyPy), Topaz es bastante joven y no tan compatible. Se muestra prometedor para
|
|
ser una implementación de Ruby de alta performance.
|
|
* [IronRuby](http://ironruby.net/) - Escrita en C#, apuntando a la plataforma
|
|
.NET. El trabajo en IronRuby parece haberse detenido desde que Microsoft
|
|
retiró su soporte.
|
|
|
|
Las implementaciones de Ruby pueden tener su propio número de versión de
|
|
release, pero siempre apuntan a una versión específica de MRI para poder tener
|
|
compatibilidad. Muchas implementaciones tienen la habilidad de trabajar en
|
|
diferentes modos (por ejemplo, modo 1.8 o 1.9) para especificar a qué versión de
|
|
MRI están apuntando.
|
|
|
|
## RubySpec
|
|
|
|
Muchas implementaciones de Ruby dependen en gran medida de
|
|
[RubySpec](http://rubyspec.org/). Ruby no tiene una especificación oficial, por
|
|
lo que la comunidad ha escrito especificaciones ejecutables en Ruby para poder
|
|
testear la compatibilidad de sus implementaciones con MRI.
|
|
|
|
## RubyGems
|
|
|
|
[RubyGems](http://rubygems.org/) es un manejador de paquetes/comunidad de Ruby.
|
|
RubyGems viene incluido con Ruby, por lo que no hay necesidad de instalarlo por
|
|
separado.
|
|
|
|
Los paquetes de Ruby son llamados "gemas" ("gems"), y pueden ser alojados por la
|
|
comunidad en RubyGems.org. Cada gema contiene su código fuente y algo de
|
|
metadata, incluyendo cosas como la versión, dependencias, autor(es), y
|
|
licencia(s).
|
|
|
|
## Bundler
|
|
|
|
[Bundler](http://bundler.io/) es una herramienta para resolución de dependencias
|
|
de gemas. Utiliza un archivo llamado Gemfile en cada proyecto para poder
|
|
organizar sus dependencias, y luego poder agregar dichas dependencias y sus
|
|
dependencias de forma recursiva. Hace esta acción hasta que resuelve y descarga
|
|
todas las dependencias, o se detiene si es que un conflicto aparece.
|
|
|
|
Bundler eleva un error si encuentra dependencias conflictivas. Por ejemplo, si
|
|
la gema A requiere la versión 3 o mayor de la gema Z, pero la gema B requiere la
|
|
versión 2, Bundler va a notificarte sobre dicho conflicto. Esto es
|
|
extremadamente útil ya que varias gemas hacen referencia a otras gemas (de las
|
|
cuales puede referenciar a otras gemas), lo cual puede formar un gran grafo de
|
|
dependencias para resolver.
|
|
|
|
# Testing
|
|
|
|
Testing es una parte grande dentro de la cultura de Ruby. Ruby incluye su propio
|
|
framework de testing llamado minitest (o TestUnit para la versión 1.8.x de
|
|
Ruby). Hay varias librerías de testing con diferentes objetivos.
|
|
|
|
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Framework de testing de Ruby 1.8
|
|
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Framework de testing de Ruby 1.9/2.0
|
|
* [RSpec](http://rspec.info/) - Un framework de testing que se focaliza en expresividad
|
|
* [Cucumber](http://cukes.info/) - Un framework de testing que utiliza BDD, que parsea tests con formato Gherkin
|
|
|
|
## Se Amable
|
|
|
|
La comunidad de Ruby se enorgullece de ser una comunidad abierta, diversa y
|
|
acogedora. Matz mismo es extremadamente amigable, y en general la generosidad de
|
|
los rubystas es increíble.
|