Desabilitando configurações padrão (generators) no Ruby on Rails

É normal que quando começamos a usar o Rails e seus generators (scaffold, controller, migration, etc…) perceber que muitas vezes eles geram arquivos desnecessários, como helpers, arquivos de teste, dentre outros. No entanto muitos desconhecem que podemos configurar nossa aplicação indicando o que queremos que o Rails gere nesses momentos. Vamos conhecer?

Antes de começar, vamos criar uma aplicação base para que possamos fazer nossos exemplos. Para isso, rode:

rails new generators_test
cd generators_test

Ok. Agora que já temos a aplicação vamos criar um controller para ver o que o Rails gera “por padrão” nesse momento.

rails g controller a
Running via Spring preloader in process 1082
create app/controllers/a_controller.rb
invoke erb
create app/views/a
invoke test_unit
create test/controllers/a_controller_test.rb
invoke helper
create app/helpers/a_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/a.coffee
invoke scss
create app/assets/stylesheets/a.scss

Observe que foram gerados o teste unitário, um helper e também os assets (JS e CSS). Com isso podemos perceber que sempre que criarmos um controller o Rails vai gerar também esses elementos.

Agora imagine que não queremos fazer com que o Rails gere os helpers, daí é onde entra a nossa customização. Para isso, vamos abrir o arquivo config/application.rb e lá adicionamos a configuração abaixo:

config.generators.helper false

Agora vamos gerar um novo controller e ver o resultado.

rails g controller b
Running via Spring preloader in process 1117
create app/controllers/b_controller.rb
invoke erb
create app/views/b
invoke test_unit
create test/controllers/b_controller_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/b.coffee
invoke scss
create app/assets/stylesheets/b.scss

Observe que dessa vez o helper não foi gerado! Legal, hein! :-)

Bom, acho que isso já te dá a ideia do que podemos fazer na customização, mas eu gostaria de chamar atenção ao fato dos testes unitários. Pois bem, se a gente quiser desabilitar a geração automática dos testes unitários o processo vai ser um pouquinho diferente.

Antes de mais nada, temos 2 opções para fazer isso. A primeira, é já criar a aplicação com a geração de testes desabilitada por padrão, bastando para isso indicar a flag -T no momento em que criar a aplicação, veja o exemplo:

rails new minhapp -T

Mas, claro, isso só funciona no momento em que estamos criando a aplicação, do contrário, você terá que ajustar os generators conforme vimos, mas, dessa vez um com um pequeno detalhe.

O primeiro passo é adicionar a configuração abaixo em config/application.rb

config.generators.system_tests = nil

Até aqui normal, mas, na sequência, comente a linha require ‘rails/all’ e adicione as chamadas abaixo:

#require 'rails/all'
require "rails"
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

Observe que a última linha é uma referência o framework de testes (padrão) do Rails e ela está comentada propositalmente para evitar o Rails carregar esse framework.

Vamos fazer um novo teste criando um novo controller.

rails g controller c
Running via Spring preloader in process 1250
create app/controllers/c_controller.rb
invoke erb
create app/views/c
invoke assets
invoke coffee
create app/assets/javascripts/c.coffee
invoke scss
create app/assets/stylesheets/c.scss

Prontinho!

Observe que os testes não são mais gerados. ;-)

Agora vem o pulo do gato…

Caso você tenha seguido esses passos e os testes continuem sendo gerados, você vai precisar parar o Spring pois ele é responsável por fazer cache de algumas coisas no Rails. Para isso rode…

spring stop

Agora sim! Teste mais uma vez, e tenho certeza que funcionou! ;-)

Uma observação importante é que essa configuração para desabilitar os testes só funciona na versão 5.x do Rails, ok?

Bom, se quiser saber outras possíveis configurações verifique a documentação oficial, blz? Ahh e o exemplo que fizemos pode ser encontrado aqui.

É isso, gente! Espero que tenha gostado e aprendido mais essa. Aproveitando, não esqueçam de dar uma passada no site Vídeos de TI pra ter acesso a uma gama de conteúdos legais. Também é importante que você deixe seus comentários, e é claro, nos seguir nas redes sociais. Caso queira, você também pode se cadastrar em nossa newsletter semanal. Um forte abraço!