© 2012, Casa do Código
Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998.
Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem auto-
rização prévia por escrito da editora, sejam quais forem os meios: fotográficos,
eletrônicos, mecânicos, gravação ou quaisquer outros.
Casa do Código
Livros para o programador
Rua Vergueiro, 3185 - 8º andar
04101-300 Vila Mariana São Paulo SP Brasil
Casa do Código
Agradecimentos
Monsters are real, and ghosts are real too. They live inside us, and sometimes, they
win.
Stephen King
Este livro não existiria sem a ajuda dos meus grandes amigos Matheus Bodo,
Willian Molinari, Sérgio Schezar e Vinícius Uzêda, que me acompanharam nesse
processo quase todos os dias, revisando, criticando e opinando minuciosamente o
conteúdo desse livro. Muito obrigado!
Muito obrigado também a família Casa do Código e Caelum, pela oportunidade
de escrever esse livro e pelos ensinamentos, especialmente ao Adriano Almeida, pelo
difícil trabalho de colocar ordem às minhas palavras.
Agradecimentos especiais também ao GURU-SP (Grupo de Usuários Ruby de
São Paulo), à PlataformaTec e aos amigos do ICMC-USP, pois se sei alguma coisa,
devo tudo a eles.
Agradeço também a minha família e amigos, pela força e por tolerarem meses
sem notícias enquanto me mudo para outro país.
Por fim, agradeço principalmente a você leitor, por investir seu tempo a aprender
uma tecnologia que eu pessoalmente gosto tanto. Espero sinceramente que seja uma
jornada divertida e lucrativa ao mesmo tempo!
i
Casa do Código
Sumário
Sumário
1
Introdução
1
1.1
Para quem é este livro . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
A linguagem Ruby
5
2
Conhecendo Ruby
7
2.1
Instalação do Ruby e Rails . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2
Primeiros passos com Ruby
. . . . . . . . . . . . . . . . . . . . . . . .
11
2.3
Tipos e estrutura de dados . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.4
Fluxos e laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5
Funções, blocos, lambdas e closure . . . . . . . . . . . . . . . . . . . .
39
2.6
Classes e módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
2.7
Bibliotecas e RubyGems . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.8
Fim! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Ruby on Rails
71
3
Conhecendo a aplicação
73
3.1
Arquitetura de aplicações web . . . . . . . . . . . . . . . . . . . . . . .
74
3.2
Recursos ao invés de páginas . . . . . . . . . . . . . . . . . . . . . . . .
74
3.3
Recursos no Colcho.net . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
3.4
Conhecendo os componentes . . . . . . . . . . . . . . . . . . . . . . . 76
3.5
Os modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
iii
Sumário
Casa do Código
3.6
Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.7
Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.8
Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.9
Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.10 Considerações finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4
Primeiros passos com Rails
81
4.1
Gerar o alicerce da aplicação . . . . . . . . . . . . . . . . . . . . . . . .
81
4.2
Os ambientes de execução . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.3
Os primeiros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.4
Os arquivos gerados pelo scaffold . . . . . . . . . . . . . . . . . . . . .
91
Mãos à massa
97
5
Implementação do modelo para o cadastro de usuários
99
5.1
O usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.2
Evite dados errados. Faça validações . . . . . . . . . . . . . . . . . . . 103
6
Tratando as requisições Web
111
6.1
Roteie as requisições para o controle . . . . . . . . . . . . . . . . . . . 111
6.2
Integre o controle e a apresentação . . . . . . . . . . . . . . . . . . . . 117
6.3
Controle o mass-assignment . . . . . . . . . . . . . . . . . . . . . . . . 123
6.4
Exibição do perfil do usuário . . . . . . . . . . . . . . . . . . . . . . . . 125
6.5
Permita a edição do perfil . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.6
Reaproveite as apresentações com partials . . . . . . . . . . . . . . . . 128
6.7
Mostre os erros no formulário . . . . . . . . . . . . . . . . . . . . . . . 131
6.8
Configure a ação raiz (root) . . . . . . . . . . . . . . . . . . . . . . . . 133
7
Melhore o projeto
137
7.1
Lição obrigatória: sempre aplique criptografia para armazenar senhas 137
7.2
Como adicionar plugins ao projeto? . . . . . . . . . . . . . . . . . . . . 138
7.3
Migração da tabela users . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.4