diff options
-rw-r--r-- | es-es/ruby-ecosystem-es.html.markdown | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/es-es/ruby-ecosystem-es.html.markdown b/es-es/ruby-ecosystem-es.html.markdown new file mode 100644 index 00000000..9ce62ef5 --- /dev/null +++ b/es-es/ruby-ecosystem-es.html.markdown @@ -0,0 +1,157 @@ +--- +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. |