ruby - rubi - ¿Cuál es la forma moderna de estructurar una gema de rubí?
rubi mineral (5)
¿Ha cambiado mucho con el lanzamiento de Bundler? ¿Hay una plantilla que pueda usarse como base? ¿Cuáles son las mejores prácticas?
Al escribir gemas grasas (binarias), la estructura suele ser la siguiente:
lib/1.8/binary.so
lib/1.9/binary.so
lib/my_gem.rb
(este archivo simplemente elige qué binary.so
cargar dependiendo de la versión de ruby)
Y para extensiones nativas:
lib/ext/my_gem/my_sources.*
lib/my_gem.rb
También suelo poner un archivo version.rb
aquí:
lib/my_gem/version.rb
y simplemente contiene algo como:
module MyGem
VERSION = "0.1.0"
end
Además, IMO, no coloque ningún archivo .rb, excepto el archivo que desea que las personas usen para cargar la gema, en el directorio lib/
. En su lugar, coloque todos los archivos auxiliares en lib/my_gem/
Algunas publicaciones que he encontrado útiles:
- http://chneukirchen.github.com/rps/
- http://tomayko.com/writings/require-rubygems-antipattern
- http://yehudakatz.com/2009/07/24/rubygems-good-practice/
- http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices
Editar (10-01-01): una excelente guía general para las mejores prácticas de gemas es RubyGems Guides . Recomiendo comenzar aquí ahora.
Para resumir los puntos clave:
- Use la
lib/gem.rb
y lalib/gem/
structure básicas para el código. - Coloque los archivos ejecutables en el
bin
, los archivos dedata
y las pruebas entest
ospec
. - No
require
ni dependa de archivos fuera de la ruta de carga. (Los archivosVERSION
menudo parecen vivir en lugares extraños en gemas). - No
require ''rubygems''
. - No altere el
$LOAD_PATH
. - Si te encuentras escribiendo
require File.join(__FILE__, ''foo'', ''bar'')
, lo estás haciendo mal.
El consejo de Telémaco es bueno. Si lo sigues, tu gema estará configurada para jugar bien con bundler.
También puedes probar usar joyero. Es una gema que genera esqueletos para gemas. El esqueleto predeterminado que escupe cumple con todas las convenciones que mencionó Telemachus y también hará algunas cosas agradables, como agregar su marco de prueba favorito o crear un repositorio de GitHub.
Esta guía de rubygems proporciona información sobre la estructura de una gema y luego entra en detalles sobre lo que debe incluirse en su gemspec
Puede que le resulte más fácil usar bundler para crear la estructura de carpetas de la gema para usted:
bundle gem <gem_name>
my_gem$ bundle gem my_gem create my_gem/Gemfile create my_gem/Rakefile create my_gem/LICENSE.txt create my_gem/README.md create my_gem/.gitignore create my_gem/my_gem.gemspec create my_gem/lib/my_gem.rb create my_gem/lib/my_gem/version.rb Initializing git repo in /Users/keith/projects/my_gem/my_gem
La forma más simple es usar bundler :
bundle gem <gem_name>
Incluso puede usarlo en un proyecto existente desde el directorio principal.