Geradores no Rails e RSpec-Rails

O framework Ruby on Rails é conhecido por facilitar e dar mais produtividade ao desenvolvimento web, estando preparado para uma série de necessidades comuns desse tipo de desenvolvimento. O vídeo que tornou Ruby on Rails famoso fazia uso de uma série de geradores, no caso os scaffolds, para produzir uma aplicação baseada em Posts e Comentários.

Existem diversos geradores em Rails, sendo o mais conhecido o próprio scaffold, além de geradores para models, controllers e estrutura de plugins.

Um projeto bastante utilizado em aplicações Rails é o RSpec. O RSpec é uma ferramenta de BDD que possui, como tudo em Rails, algumas convenções de diretórios. Para trabalhar com o RSpec, precisamos colocar nossos testes em uma pasta chamada spec na raiz do projeto e então organizar nossos testes de models, controllers, helpers entre outros em pastas subsequentes. Além disso precisamos de um arquivo .rspec onde configuramos como serão visualizados os testes e outras opções.

Precisamos de uma estrutura pré definida para trabalhar com RSpec em uma aplicação Rails. É justamente dessa necessidade e da possibilidade de criar geradores que surge o projeto RSpec-Rails. Utilizamos o RSpec-Rails para gerar os templates de nossos testes.

Para entender mais a fundo o funcionamento de tudo isso, nada como analisar o próprio fonte do RSpec-Rails, que é disponibilizado no github.

Todo código dos geradores fornecidos fica no diretório lib/generators/rspec.

O primeiro gerador utilizado normalmente é o rails generate rspec:install. Esse gerador cria o diretório spec, um arquivo de configurações chamado spec/spec_helper.rb e o .rspec.

Todo gerador rails segue uma convenção de arquivos. Todo gerador possui uma pasta chama templates, onde encontram-se os arquivos a serem criados na aplicação. Além disso, junto com a pasta templates deve existir o arquivo nome_generator.rb (onde nome representa o nome do gerator em questão). Esse arquivo deve conter uma classe que herda de Rails::Generators::Base. Não deixe de ver o fonde do gerador rspec:install no github.

Seguindo a mesma linha, podemos criar geradores para várias partes da aplicação, como por exemplo para os testes de models do rspec. Os geradores aceitam parâmetros como é usado no gerador dos models rails generate rspec:model.

Esse gerador recebe o nome do model para criar o arquivo de teste, como pode ser visto no fonte, ou mesmo um atributo a mais como a opção de criação de fixtures, que não é feita por default como pode ser visto na classe Base.

module Rspec
  module Generators
    class ModelGenerator < Base
      argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
      class_option :fixture, :type => :boolean

      def create_model_spec
        template 'model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
      end

      hook_for :fixture_replacement

      def create_fixture_file
        if options[:fixture] && options[:fixture_replacement].nil?
          template 'fixtures.yml', File.join('spec/fixtures', "#{table_name}.yml")
        end
      end
    end
  end
end

Ao utilizar um projeto opensource você deve conhecer o que seu código faz, para assim, poder fazer as melhores escolhas e otimizações necessárias em cada situação. Analisar o código fonte de projetos no github ajuda muito na evolução de como programamos, analisando e entendendo como outros desenvolvedores pensaram para resolver problemas. Além disso, podemos contribuir com esses projetos e estar em contato com seus principais autores.

O Curso RR-75 | Ruby e Rails avançados: lidando com problemas do dia a dia mostra uma série de práticas avançadas no desenvolvimento de aplicações Ruby on Rails utilizando RSpec e outros frameworks.

Seja o primeiro a comentar :)

Deixe uma resposta