Como escolher uma gem

Tutoriais - 08/Ago/2019 - por Campus code

Em qualquer projeto Rails chega um momento em que o desenvolvedor se pergunta:

"Será que eu devo usar uma gem para essa função? Se sim, qual?"

Você pode seguir o princípio de que se existe alguma biblioteca externa que resolva seu problema, você deve usá-la. Isso poderia te poupar muito tempo de desenvolvimento. Por outro lado, você pode se arrepender de ter adicionado uma gem ruim ou que vai te dar muito mais trabalho no futuro. Além disso, a utilização de gems aumenta em mais um nível a susceptibilidade da sua aplicação.

Nesse artigo vamos discutir alguns pontos a serem considerados tendo como referência nossa experiência durante a implementação da função de personificação de usuários no site do TreinaDev.

Nosso objetivo era permitir que administradores fossem capazes de iniciar uma sessão simulando o acesso de outros usuários comuns para podermos verificar como vêem as páginas da aplicação e executar algumas ações em seu lugar. Essa função é comumente chamada de impersonate em inglês, que se traduz em português para personificar.

Em nossa aplicação utilizamos a gem Devise para lidar com autenticação de usuários. Por isso, era necessário que qualquer solução fosse compatível com essa gem. Com uma pesquisa rápida no Google encontramos um artigo da Plataformatec, empresa responsável pelo Devise, em que conseguimos encontrar algumas sugestões compatíveis: três gems e uma forma de começar a montar nosso próprio código.

Escrever nosso próprio código como proposto no artigo da Plataformatec parecia ser simples, mas não gostamos da maneira como ele resolvia o problema. Então passamos a analisar as gems indicadas:

A primeira opção, any_login, possui uma demo disponível, assim conseguimos perceber que, apesar de prática e fácil de configurar, seria pouco funcional para nossas necessidades. Então ela logo foi descartada.

Em seguida comparamos switch_user e pretender, a primeira parecia mais complexa de ser configurada e possui uma quantidade maior de código. O fato da gem pretender ter poucas linhas de código acabou sendo importante por dois motivos: (1) reduz as chances da instalação da gem alterar alguma funcionalidade da nossa aplicação, e (2) facilita a leitura e compreensão do código, que por sua vez permite avaliar sua qualidade e compreender como a gem funciona. Esse segundo ponto se mostrou muito importante na implementação da funcionalidade. Acredito que, sendo possível, testar as gems fosse o ideal, mas demandaria tempo e esforço consideráveis.

Em muitos casos, como projetos muito grandes ou contextos muito específicos e pouco conhecidos, por exemplo, pode não ser viável ler ou executar as gems que estamos avaliando. Por essa razão, pode ser muito valioso pesquisar as gems em catálogos como a Ruby-Toolbox e a Ruby-Gems. Podemos verificar uma série de informações, como:

  • Quantas vezes a gem foi baixada;
  • Se possui issues abertas;
  • Quando foi o último release;
  • Qual tipo de licença ela possui;
  • Etc.

Outras coisas que você pode levar em consideração quando estiver analisando as gems são: a qualidade da documentação, a cobertura dos testes, se ela é integrada com outras gems que você utiliza... enfim, depende do uso que vai fazer dela e da sua aplicação. Além disso, você também pode pesquisar o que outras pessoas falam sobre as gems no Google, Reddit, Stackoverflow, etc.

Continuando o relato da nossa experiência, optamos por utilizar a gem pretender, que possui grande quantidade de usuários, ainda recebe atualizações, possui código simples, parece ser fácil de implementar e atende às nossas necessidades.

Durante o processo de implementação do código para a função impersonate, nos deparamos com uma dificuldade, a qual relatamos no artigo Impersonando usuários com Devise. Ainda com esse problema, acredito que usar a gem tenha sido uma escolha acertada. Creio que o mais importante seja compreender bem o escopo da funcionalidade e o trabalho que será necessário para implementar o código.

TL;DR

Tenha em mente os seguintes pontos quando começar a pensar em utilizar uma gem:

  • Conheça bem as opções que você possui;
  • Pesquise sobre as gems em catálogos como Ruby-Toolbox e Ruby-Gems;
  • Verifique se as gems possuem documentação, a qualidade do código, se possuem issues abertas, qual a data do último release, etc;
  • Verifique se possuem integração com outras gems;
  • Considere o escopo da funcionalidade e o trabalho de sua implementação.

Os links de referência abaixo apresentam vantagens e desvantagens de usar gems, além de outra dicas na hora de escolher uma gem para sua aplicação.

Referências