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

É normal que quando começamos a usar o Rails e seus generators (scaffoldcontrollermigration, 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.