Quando queremos criar uma RubyGem basicamente o que temos que fazer é criar um simples projeto e especificar ela num arquivo chamado de gemspec. Muito mais simples deveria ser utilizar uma das ferramentas existentes que criam uma estrutura básica para a criação de uma gem e depois somente completar a base com nosso código de negócio. Vejamos quais opções temos:
Eu não gosto de nenhum dos dois.
Eu não acho os dois projetos ruins, mas acho que geram muita coisa para minhas necessidades.
O problema
O newgem do Dr. Nic foi criado para trabalhar com gems que irão ser hospedadas no RubyForge, pelo que além do mais básico, cria também documentos para serem utilizados como website.
A primeira gem que eu criei, Rhyme, foi hospedada no RubyForge, pelo que o newgem me serviu bastante. Porém, não tenho mais interesses de hospedar futuras gems la porque o GitHub cumpre minhas necessidades e porque o RubyForge resultou ser meio burocrático. Para hospedar Rhyme la, a gem teve que passar por um processo de aceitação.
Já o sow (do Hoe) cria uma estrutura básica bem mais simples. O que não gosto do sow é que ele cria a estrutura de testes baseada no Test::Unit e também uma pasta bin para colocar scripts que puderam ser chamados a partir do terminal quando a gem for instalada. A maioria das gems não precisam dessa pasta pelo que eu acho ela desnecessária para um template minimalista.
Mas isso não é tudo, tanto o newgem como o sow criam um arquivo chamado Manifest.txt, que eu não preciso, e um arquivo History.txt, que também não preciso. Quer saber o histórico da gem? Acessa o repositório no GitHub e da um click em History, pronto! Somente para terminar, ambos também criam um README com um monte de FIX (url, description, features/problem, synopsis, requirements e install) em formatos que não me agradam muito (rdoc e txt).
A solução
É por tais motivos apresentados que decidi criar um novo gerador de gem, pegando o melhor do newgem e do sow. Como ele é totalmente pensado e amoldado para trabalhar com o GitHub, decidi chamar ele de GemHub:
sudo gem install dcrec1-gemhub
Quando o GemHub for executado ele ira criar uma estrutura para criar gems com somente os arquivos que você realmente precisa, incluindo um README.textile com a licença MIT para ser mostrado na pagina do projeto no GitHub.
Mas que arquivos são exatamente esses? Nada melhor para um exemplo que um caso real:
dcrec1:tmp dcrec1$ gemhub tetris
create
create lib
create spec
create lib/tetris.rb
create spec/tetris_spec.rb
create README.textile
create Rakefile
Como da para apreciar, GemHub vem preparado para trabalhar com RSpec, tanto que no Rakefile já existe uma task chamada spec que se encarrega de rodar os testes.
Uma vez gerado o projeto o que tem que ser feito é editar o arquivo Rakefile e especificar a descrição da gem, o autor, o e-mail e o site. Seguidamente criamos nossos testes e scripts nas pastas spec e lib e quando estivermos prontos para publicar a gem podemos executar a seguinte tarefa que ira criar o gemspec:
rake make_spec
Se quisermos criar a gem para verificar se o gemspec esta certo e/ou quisermos instalar a gem localmente podemos executar os seguintes comandos:
rake gem rake install
E isso é todo galera, espero não ter esquecido de nada. Tomara que a produção de gems aumente porque criar uma gem nunca foi tão simples!
4 respostas ate agora ↓
1 George Guimarães // Oct 27, 2008 at 9:34 pm
Opa..
Parabéns pela gem nova… vou testar!… =D
abç!
2 Diego Carrion // Oct 28, 2008 at 10:10 am
Valeu George, qualquer problema me xingar e avisar dele
3 Carlos Brando // Oct 28, 2008 at 12:46 pm
Excelente.. vou testar também!
4 Leandro // Oct 28, 2008 at 1:22 pm
Opa! Dahora!
Deixar um comentário