Publicando uma gem

Luiz Filipe Neves Costa
3 min readMar 12, 2023

--

Como programadores as vezes temos que escrever alguma lib durante o desenvolvimento de novas funcionalidades no projeto que estamos trabalhando. Normalmente já encontramos libs prontas, mas em outros casos não, ai temos que botar a mão na massa. No meu caso tive que implementar o algoritmo de validação e geração de chave de nota fiscal eletrônica (caso esteja curioso, a documentação sobre o algoritmo pode ser encontrada aqui). Essa é uma parte útil no projeto mas que não faz parte da lógica de negócio em se. Então é uma boa ideia extrair e isolar a lib como uma dependência.

Como vocês já devem ter concluído a aplicação em questão é em RubyOnRails, mas essa é uma prática legal para projetos em qualquer linguagem, além de contribuir com a comunidade é uma experiência interessante.

No exemplo aqui a lib é bem pequena, pequena mesmo, é somente uma classe com três métodos. Mas isso não importa, o interessa é entender como é o processo de publicação da gem. Então, vamos lá!

Pré Requisito

Antes de iniciar tenha o ambiente ruby instalado na maquina assim como o RubyGems, caso não tenha instalado segue os links: Ruby, RubyGems.

Construindo a gem

A primeira coisa a se fazer é criar um arquivo do tipo .gemspec na pasta do projeto há ser publicado, a baixo segue o comando de criação e como ficou a pasta no caso:

$ touch gerador_nfe.gemspec
$ tree
├── gerador_nfe.gemspec
└── lib
└── nfe.rb

No gemspec podemos definir o nome, versão, data de criação e outras informações sobre a nossa gem. Veja a baixo como ficou o arquivo:

Gem::Specification.new do |s|
s.name = 'gerador_nfe'
s.version = '1.0.0'
s.date = '2020-06-11'
s.summary = "Gerador e validador de chaves nfe"
s.description = "Gerador e validador de chaves nfe"
s.authors = ["Luiz Filipe"]
s.email = 'luizfilipeneves@gmail.com'
s.files = ["lib/nfe.rb"]
s.homepage = 'https://rubygems.org/gems/gerador_nfe'
s.license = 'MIT'
end

Podemos observar que no arquivo temos código ruby, assim podemos aproveitar e deixar algumas informações dinâmica, como a versão da gem.

...
s.version = NFE::VERSION
...

Após as configurações podemos rodar o comando para construir a gem e em seguida instala-la no nosso ambiente.

$ gem build nfe.gemspec
>> Successfully built RubyGem
>> Name: gerador_nfe
>> Version: 1.0.0
>> File: gerador_nfe-1.0.0.gem

O resultado é o arquivo gerador_nfe-1.0.0.gem que vamos usar para instalar a gem criada.

$ gem install ./gerador_nfe-1.0.0.gem
>> Successfully installed gerador_nfe-1.0.0
>> Parsing documentation for gerador_nfe-1.0.0
>> Done installing documentation for gerador_nfe after 0 seconds
>> 1 gem installed

Agora já podemos testar a gem no irb.

$ irb
2.6.5 :001 > require 'nfe'
=> true
2.6.5 :002 > NFE.generate
=> "03706282961739875112343640273736458671450939"
2.6.5 :003 >

Publicando no rubygems

O primeiro passo é fazer uma conta no https://rubygems.org/sign_up, se ainda não tem, faça isso.

Com a conta criada publicar é bem fácil. Primeiro faça o login:

$ gem signin

Já podemos subir a gem para o repositório:

$ gem push gerador_nfe-1.0.0.gem
>> Pushing gem to https://rubygems.org...
>> Successfully registered gem: gerador_nfe (1.0.0)

Pronto. Agora qualquer um pode baixar sua gem. Para verificar se está tudo certo vamos listar a gem e instalar a partir do repositório.

$ gem list -r gerador_nfe
>> *** REMOTE GEMS ***
>>
>> gerador_nfe (1.0.0)
$ gem install gerador_nfe
>> Successfully installed gerador_nfe-1.0.0
>> Parsing documentation for gerador_nfe-1.0.0
>> Done installing documentation for gerador_nfe after 0 seconds
>> 1 gem installed

Conclusão

O processo é rápido e simples. É uma boa prática para manter o projeto enxuto e focado. No site do RubyGems você consegue encontrar muito mais informações. Até mais!

Referência

https://guides.rubygems.org/

--

--