Esse post é o primeiro de uma série que irão servir como um próximo passo a quem estiver iniciando com Ruby on Rails, algo além de “construa um blog em quinze minutos” e sim algo mais útil ao mundo real.
Nesse post veremos sobre como gerar nossa aplicação, configurar nossos testes, instalar uma biblioteca de front-end e deixar tudo pronto para iniciar o desenvolvimento.
Criando nossa aplicação
Criar a aplicação é um passo simples, onde usaremos os geradores do Rails para fazer o trabalho árduo de montar a estrutura e deixar tudo configurado, baseado no conceito de “Convenção sobre configuração”. No terminal, navege até o diretório que deseja criar o projeto e digite o seguinte comando:
1
|
|
O comando rails new com o argumento -T, é para sinalizar ao gerador, que não queremos o conjunto de testes padrão do Rails, já que vamos usar o Rspec. Para ver mais opções de configuração utilize o help do comando:
rails new -h
Aguarde a finalização da construção…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
No seu bash ou outra ferramenta de linha de comando (recomendo zsh), navegue para
o diretório que foi criado usando cd crud-rspec
. Abra o diretório com o seu editor
favorito.
O framework Rails nos impõe algumas convenções e uma estrutura inicial para seguir.
Primeiramente temos o uso de uma arquitetura MVC onde temos nos models, que manipulam
nossos dados, controllers que gerenciam o que deve ser executado e para onde entregar
as informações e nossas views que fazem a interação, recebem as entradas e mostram
as saidas ao usuário. Isso tudo está na pasta app
do projeto. Esse é o local onde
passaremos a maior parte do nosso desenvolvimento. Abaixo uma descrição básica de
todos os diretórios criados.
app
: Local do código principal da aplicação. Models, Controllers, Views, Helpers,
CSS e código Javascript da nossa aplicação ficam nessa pastas.
bin
: Armazena os scripts dos geradores do rails
.
config
: Configuração do banco de dados, intenacionalizações, especificidades de
algumas gems (Devise,SimpleForm, etc), rotas da aplicação e muitas outras definições.
db
: Mantém o esquema e as migrações da base de dados.
lib
: Aqui ficam todos os códigos que não são diretamente ligados a aplicação.
São armazenadas as tarefas rake
, bem como tasks que são executadas fora do ambiente
web.
log
: Arquivos de log, simples assim :).
public
: Páginas de erro (404, 500) e arquivos estáticos como por exemplo o favicon.ico
e o robots.txt.
tmp
: Guarda o cache e PID da aplicação.
vendor
: Local onde são colocadas bibliotecas que não sejam gems.
A construtor de projetos do Rails poupa a nós um bom tempo, pois não precisamos nos preocupar com a arquitetura inicial do projeto, pois ele que cria as pastas e arquivos, de acordo com a nossas escolhas.
Configurar nossos testes
Vamos iniciar a configuração dos nossos testes. Primeiro passo é instalar a gem de testes Rspec e a gem para testes de aceitação Capybara, pra isso devemos adicionar elas ao nosso arquivo Gemfile, e devemos definir a qual grupo de gems elas pertencem (desenvolvimento, testes ou produção). Como nossos testes apenas são usados em teste e produção, ficará de seguinte maneira:
1 2 3 4 |
|
em seguida execute o camando de instalação de gems no terminal:
1
|
|
Após instalada as gems, vamos gerar os arquivos de configuração do rspec e também os diretórios que servem de base para criar nossos testes:
1
|
|
Se observarmos a saída do nosso console
1 2 3 4 5 |
|
veremos que o diretório rspec foi gerado, e os arquivos de configuração também.
Are you ready?
Criamos nosso projeto e também configuramos o rspec, poderiamos implementar nossa primeira funcionalidade, mas antes, vamos configurar uma biblioteca de front-end, no caso twitter bootstrap. Para isso adicione a gem do twitter bootstrap em nosso Gemfile:
1 2 |
|
Rode novamente o bundle install
para instalar a gem e na seqüência configure, da seguinte
maneira:
Renomeie o arquivo app/assets/stylesheets/application.css para app/assets/stylesheets/application.css.scss
Adicione ao arquivo application.css.scss:
1 2 |
|
Adicione ao app/assets/javascript/application.js
//= require bootstrap-sprockets
Crie um controller com uma view para servir como o Index de nossa Web Application:
1
|
|
Isso criará uma série de arquivos, que são: o nosso controller, nossa view, arquivos de css e javascript, testes e também é feita uma alteração em nosso arquivo de rotas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Nosso primeiro teste
Agora que temos nossa estrutura gerada, nossos testes configurados e nosso front-end
pronto, vamos definir a nossa página principal. Nosso primeiro passo é definir que
a nossa rota raiz da aplicação seja o index do controlador home. Com isso feito vamos
colocar um menu superior na página e um link para o cadastro de produtos que será implementado
no próximo post. Crie um diretório denominado features
dentro do diretório spec
,
e dentro da pasta criada crie um arquivo chamado reading_products_spec.rb
.
Nesse arquivo implemente o teste da seguinte maneira:
1 2 3 4 5 6 7 |
|
Antes de rodar o teste, desabilite o lançamento de warnings do rspec. Faça isso
removendo a linha que contém o conteúdo --warnings
do aquivo .rspec que está na raiz do projeto.
Agora rode o teste com o comando rspec spec/features/reading_products_spec.rb
. Um erro
ocorrerá:
1 2 3 4 |
|
Esse erro acontece pois estamos tentando visitar a raiz de nosso site e ela ainda não
está configurada nas rotas. Abra o arquivo config/routes.rb
, e deixe a sua implementação
na seguinte forma:
1 2 3 |
|
Salve e rode o teste novamente. Nosso teste passou, vamos a mais uma parte da implementação, que é onde vamos colocar o cabeçalho e o link para o recurso de listagem de cadastros. Ao teste adicione:
1 2 3 4 5 6 |
|
Rodando nosso teste, teremos uma quebra, pois esse link não existe em nossa página
inicial. Vamos colocar um menu, com o conjunto de estilos do Twitter Bootstrap a
nossa página de layout app/views/layouts/application.html.erb
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Rode os testes novamente, agora tudo vai passar. Temos nossa página inicial definida, com o uso de testes de integração. O que fizemos foi, adicionar uma rota raiz para nossa aplicação, colocar um menu e um link para o cadastro de produtos (que está sem caminho), e tudo isso guiado por testes, usando Rspec e Capybara.
Finalizamos nossa primeira parte, onde configuramos nossa aplicação com algumas ferramentas que o Rails e o Ruby nos proporcionam para desenvolvermos com Agilidade sem perder qualidade. Nos próximos posts vamos implementar um Crud usando Rspec, Capybara e Rails.
O código pode ser baixado no Github, somente observe que cada post está dividido por branch.