La documentación (general) >>
En el Developer Guide >>
Siguiendo los patrones de nomenclatura >>, lo primero es que tenga una carpeta lib/ con un archivo ruby homónimo a la gema y una carpeta con el mismo nombre, donde deje los demás archivos. Se recomienda que todo sea lowercase, por compatibilidad con S.O.s malos.
Luego, necesito un archivo Gemspec >>
Gem::Specification.new do |s| s.name = 'imposition' s.version = '0.8.8' s.date = '2012-08-16' s.summary = "editorial imposition script" s.description = "nUp & booklets" s.authors = ["Numerico"] s.email = 'webmaster@numerica.cl' s.files = Dir.['lib/*']#mejor que ["lib/imposition.rb"] etc s.homepage = 'https://github.com/Numerico/impostor' end
Y con éso ya puedo empaquetar
gem build imposition.gemspec
da
Successfully built RubyGem Name: imposition Version: 0.8.8 File: imposition-0.8.8.gem
🙂 Pa probarla la podemos instalar
sudo gem install imposition-0.8.8.gem
da
Successfully installed imposition-0.8.8 1 gem installed Installing ri documentation for imposition-0.8.8... Installing RDoc documentation for imposition-0.8.8...
dependencias
se me había olvidado, mi gema depende de otras gemas. antes que requerirlas en el código, debiera declararlas como depenencias en el Gemspec.
Gem::Specification.new do |s| #etc s.add_runtime_dependency 'alchemist' s.add_runtime_dependency 'uuidtools' s.add_runtime_dependency 'fileutils' s.add_development_dependency 'test/unit' end
lo raro es que poniéndole ésto, tengo que hacer los require igual en el archivo de inicialización (imposition.rb) ¿será que la dependencia las baja junto con la gema pero no las requiere automáticamente? De hecho leí por ahí que no se recomienda requerir rubygems…
ejecutables
Los ejecutables van en /bin. Ahí simplemente puedo requerir mi gema y utilizarla
require 'rubygems' #ruby < 1.9 require 'imposition' Metodos.funcionar(...) #...
Después hay que declararlo en el Gemspec
Gem::Specification.new do |s| #idem... s.executables << 'impostor' end
Lo choro es que después puedo usar el ejecutable como un comando de mi S.O.
numerico@mimaquina:/$ impostor
nice…
Tests
Para los tests, necesito un directorio test/ y un Rakefile
require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' end desc "Run tests" task :default => :test
donde le estoy diciendo que ejecute las pruebas unitarias en el directorio test/
Efectivamente después puedo correr mis tests con
rake test Loaded suite /var/lib/gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader Started .. Finished in 0.846523 seconds. 2 tests, 2 assertions, 0 failures, 0 errors
yeah.
rubygems.org
Check this out >>
Cualquiera puede subir su gema con
gem push imposition-0.8.8.gem
eso sí hay que tener una cuenta
Enter your RubyGems.org credentials. Don't have an account yet? Create one at http://rubygems.org/sign_up Email: webmaster@numerica.cl Password: Pushing gem to https://rubygems.org... Signed in. Pushing gem to https://rubygems.org... Successfully registered gem: imposition (0.8.8)
Queda pendiente RDoc para documentación.