Você decidiu usar Rails Engines na sua aplicação ou herdou um projeto que faz uso delas e você gostaria de entender como o fluxo funciona. O Rails guides possui uma introdução bem completa sobre o que são as tais das Engines (http://guides.rubyonrails.org/engines.html)
Dentre seus usos, a capacidade de isolar uma parte do sistema, encapsulando seu funcionamento, é uma característica que, quando bem utilizada, poderá ser um grande trunfo na evolução de seu sistema.
É importante ressaltar que servem como módulos e deverão ser “plugados” na aplicação principal. Portanto, tome cuidado com a dependência de código. Tente levar sempre em consideração os princípios SOLID para abstração do código.
Dito isto, vamos ao que interessa.
Criando a uma Rails Engine do zero:
Ao utilizarmos o comando rails plugin —help podemos verificar as opções utilizadas na instrução:
Se por algum motivo, a engine for gerada sem o dummy spec, não tem problema, ele foi feito para não ser ligado a aplicação principal, então você pode criá-lo em outro lugar e depois movê-lo para seu lugar final.
Nesse post, vamos usar o RSpec como framework de testes. Para configurarmos ele com nossa engine, iremos adicionar a dependência ao nosso arquivo .gemspec na raiz da engine.
Isso se dá porque, de acordo com a documentação do Rails, a engine pode ser adicionada como uma Gem futuramente e se as dependências estivessem no GemFile, elas poderiam não ser reconhecidas na hora da instalação, o que causaria bugs.
Feito isso, iremos executar o comando bundle install no terminal, dentro da pasta core.
Na raiz da nossa aplicação, deve existir um arquivo no caminho lib/core/engine.rb. Iremos configurá-lo para incluir o RSpec.
E logo depois rails generate rspec:install, conforme a documentação do rspec, para criar o diretório spec (onde os testes irão ficar).
No arquivo spec/rails_helper.rb iremos adicionar uma configuração para que nossos testes olhem para o arquivo de configuração da engine.
Para testarmos nosso fluxo, podemos gerar um simples model:
Dentro da nossa dummy_app de testes, vamos configurar as rotas em spec/dummy_app/config/ para apontar para a raíz de nossa aplicacação.
Apenas para validarmos o fluxo, vamos inserir duas regras de validação no nosso modelo:
E então rodar nossos testes com bundle exec rspec
Pronto, nossa engine está configurada com RSpec como suíte de testes, agora é só codificar.
O código final pode ser encontrado aqui (https://github.com/amandasposito/rails-engines-rspec).
Até mais!
Referências
- http://rspec.info/
- http://guides.rubyonrails.org
- http://guides.rubyonrails.org/engines.html