(Parte 1 de 5)

Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

R-71

A Caelum atua no mercado com consultoria, desenvolvimento e ensino em computação. Sua equipe participou do desenvolvimento de projetos em vários clientes e, após apresentar os cursos de verão de Java na Universidade de São Paulo, passou a oferecer treinamentos para o mercado. Toda a equipe tem uma forte presença na comunidade através de eventos, artigos em diversas revistas, participação em muitos projetos open source como o VRaptor e o Stella e atuação nos fóruns e listas de discussão como o GUJ.

Com uma equipe de mais de 60 profissionais altamente qualificados e de destaque do mercado, oferece treinamentos em Java, Ruby on Rails e Scrum em suas três unidades - São Paulo, Rio de Janeiro e Brasília. Mais de 8 mil alunos já buscaram qualificação nos treinamentos da Caelum tanto em nas unidades como nas próprias empresas com os cursos incompany.

O compromisso da Caelum é oferecer um treinamento de qualidade, com material constantemente atualizado, uma metodologia de ensino cuidadosamente desenvolvida e instrutores capacitados tecnicamente e didaticamente. E oferecer ainda serviços de consultoria ágil, mentoring e desenvolvimento de projetos sob medida para empresas.

Comunidade

Nossa equipe escreve constantemente artigos no Blog da Caelum que já conta com 150 artigos sobre vários assuntos de Java, Rails e computação em geral. Visite-nos e assine nosso RSS:

➡ blog.caelum.com.br

Acompanhe também a equipe Caelum no Twitter:

➡ twitter.com/caelumdev/equipe

O GUJ é maior fórum de Java em língua portuguesa, com 700 mil posts e 70 mil usuários. As pessoas da Caelum participam ativamente, participe também:

➡ w.guj.com.br

Assine também nossa Newsletter para receber as novidades e destaques dos eventos, artigos e promoções da Caelum:

➡ w.caelum.com.br/newsletter

No site da Caelum há algumas de nossas Apostilas disponíveis gratuitamente para download e alguns dos artigos de destaque que escrevemos:

➡ w.caelum.com.br/apostilas

➡ w.caelum.com.br/artigos

Conheça alguns de nossos cursos

FJ-1:

Java e Orientação a objetosFJ-26: Laboratório de MVC com

Hibernate e JSF para a Web

FJ-16:

Laboratório Java com Testes, XML e Design Patterns

FJ-19:

Preparatório para Certificação de Programador Java

FJ-21:

Java para Desenvolvimento Web

FJ-31:

Java E avançado e Web Services

FJ-91:

Arquitetura e Design de Projetos Java

FJ-27: Spring Framework

R-71:

Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

R-75:

Ruby e Rails avançados: lidando com problemas do dia a dia

✓ Mais de 8000 alunos treinados;

✓ Reconhecida nacionalmente;

✓ Conteúdos atualizados para o mercado e para sua carreira;

✓ Aulas com metodologia e didática cuidadosamente preparadas;

✓ Ativa participação nas comunidades Java, Rails e Scrum;

✓ Salas de aula bem equipadas;

✓ Instrutores qualificados e experientes;

✓ Apostilas disponíveis no site.

Para mais informações e outros cursos, visite: caelum.com.br/cursos

Sobre esta apostila

Esta apostila da Caelum visa ensinar de uma maneira elegante, mostrando apenas o que é necessário e quando é necessário, no momento certo, poupando o leitor de assuntos que não costumam ser de seu interesse em determinadas fases do aprendizado.

A Caelum espera que você aproveite esse material. Todos os comentários, críticas e sugestões serão muito bem-vindos.

Essa apostila é constantemente atualizada e disponibilizada no site da Caelum. Sempre consulte o site para novas versões e, ao invés de anexar o PDF para enviar a um amigo, indique o site para que ele possa sempre baixar as últimas versões. Você pode conferir o código de versão da apostila logo no final do índice.

Baixe sempre a versão mais nova em: w.caelum.com.br/apostilas

Esse material é parte integrante do treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails e distribuído gratuitamente exclusivamente pelo site da Caelum. Todos os direitos são reservados à Caelum. A distribuição, cópia, revenda e utilização para ministrar treinamentos são absolutamente vedadas. Para uso comercial deste material, por favor, consulte a Caelum previamente.

w.caelum.com.br

Índice

1.1 A agilidade1
1.2 A comunidade Rails1
1.3 Bibliografia2
1.4 Tirando dúvidas2
1.5 Para onde ir depois?3

1 Agilidade na Web 1

2.1 A história do Ruby4
2.2 Características4
2.3 Instalação do interpretador4
2.4 Outras implementações5
2.5 MagLev6
2.6 Ruby Enterprise Edition7
2.7 Interactive Ruby8
2.8 Tipos Básicos8
2.9 Para Saber Mais - Desafios9
2.10 Para Saber Mais - Desafio10

2 A linguagem Ruby 4

3.1 Mundo orientado a objetos12
3.2 Métodos comuns12
3.3 Meta-programação12
3.4 Definição de métodos13
3.5 Discussão: Enviando mensagens aos objetos14

3 Ruby Avançado 12 i

3.7 Desafio: Classes abertas15
3.8 self15
3.9 Desafio: self e o método puts15
3.10 Atributos e propriedades: acessores e modificadores16
3.1 Syntax Sugar17
3.12 Métodos de Classe18
3.13 Para saber mais: Singleton Classes18
3.14 Metaprogramação20
3.15 Convenções21
3.16 Coleções2
3.17 Blocos e Programação Funcional23
3.18 Desafio: Usando blocos24
3.19 Mais O25
3.20 Modulos26
3.21 Manipulando erros e exceptions26
3.2 Exercício: Manipulando exceptions27
3.23 Arquivos Ruby28
4.1 Ruby On Rails - Apresentação29
4.2 Aprender Ruby?30
4.3 RadRails30
4.4 Primeira Aplicação31
4.5 Exercícios: Iniciando o Projeto31
4.6 Estrutura dos diretórios34
4.7 O Banco de Dados35
4.8 Exercícios: Criando o banco de dados35
4.9 A base da construção: scaffold (andaime)35
4.10 Exercícios: Scaffold36
4.1 Gerar as tabelas39
4.12 Versão do Banco de Dados39
4.13 Exercícios: Migrar tabela40
4.14 Server40

4 Ruby on Rails 29 i

4.16 Exercício Opcional: Utilizando a documentação43
5.1 Motivação4
5.2 Exercícios: Controle de Restaurantes4
5.3 Modelo - O “M” do MVC46
5.4 ActiveRecord46
5.5 Rake46
5.6 Criando Modelos47
5.7 Migrations48
5.8 Exercícios: Criando os modelos49
5.9 Manipulando nossos modelos pelo console53
5.10 Exercícios: Manipulando registros5
5.1 Exercícios Opcionais56
5.12 Finders56
5.13 Exercícios: Buscas dinâmicas57
5.14 Validações58
5.15 Exercícios: Validações59
5.16 Exercícios - Completando nosso modelo59
5.17 O Modelo Qualificação62
5.18 Exercícios - Criando o Modelo de Qualificação63
5.19 Relacionamentos65
5.20 Para Saber Mais: Cache67
5.21 Exercícios - Relacionamentos67
5.2 Para Saber Mais - Eager Loading71
5.23 Para Saber Mais - Named Scopes71
5.24 Para Saber Mais - Modules72
6.1 O “V” e o “C” do MVC73
6.2 Hello World73
6.3 Exercícios: Criando o controlador74
6.4 Redirecionamento de Action e Action padrão75

6 Controllers e Views 73 i

6.6 Entendendo melhor o CRUD7
6.7 Exercícios: Controlador do Restaurante78
6.8 Helper79
6.9 Exercícios: Utilizando helpers para criar as views81
6.10 Partial85
6.1 Exercícios: Customizando o cabeçalho85
6.12 Layout86
6.13 Exercícios: Criando o header87
6.14 Outras formas de gerar a View87
6.15 Filtros8
7.1 routes.rb90
7.2 Pretty URLs91
7.3 Named Routes91
7.4 REST - map.resource91
7.5 Actions extras em Resources93
7.6 Diversas Representações94
7.7 Para Saber Mais - Nested Resources94
8.1 Exercícios96
8.2 Selecionando Clientes e Restaurante no form de Qualificações9
8.3 Exercícios9
8.4 Exercícios Opcionais105
9.1 Métodos106
9.2 Média106
9.3 Exercícios107
10.1 Nosso problema108
10.2 Alterando o banco de dados108
10.3 Exercícios110

10 Associações Polimórficas 108 iv

1.1 Adicionando comentários nas views12
1.2 Métodos de RJS Templates12
1.3 Exercícios14
1.4 Adicionando comentários17
1.5 Exercícios18
1.6 Exercícios - Enviando os dados com Ajax121

1 Ajax fácil com RJS 12

12.1 Paginação122
12.2 Exercícios - Título123
12.3 Hpricot123
12.4 Exercícios - Testando o Hpricot124
12.5 File Uploads: Paperclip124
12.6 Exercícios124

12 Alguns Plugins e Gems Importantes 122

13.1 O Porquê dos testes?127
13.2 Test::Unit127
13.3 RSpec129
13.4 Cucumber, o novo Story Runner132
14.1 O Projeto135
14.2 Testando o JRuby135
14.3 Exercícios135
14.4 Testando o JRuby com Swing136

14 Apêndice B - Integrando Java e Ruby 135

15.1 Webrick137
15.2 CGI137
15.3 FCGI - FastCGI138
15.4 Lighttpd e Litespeed138
15.5 Mongrel138
15.6 Proxies Reversos138
15.8 Ruby Enterprise Edition139
15.9 Exercícios: Deploy com Apache e Passenger140
16.1 Ruby - Ubuntu142
16.2 Ruby - Windows143
16.3 Rails143
16.4 JDK143
16.5 Aptana143
16.6 Mongrel144
16.7 MySQL144
16.8 SVN144

CAPÍTULO 1

Agilidade na Web

“Não são os milagres que inclinam o realista para a fé. O verdadeiro realista, caso não creia, sempre encontrará em si força e capacidade para não acreditar no milagre, e se o milagre se apresenta diante dele como fato irrefutável, é mais fácil ele descrer de seus sentidos que admitir o fato” – Fiodór Dostoievski, em Irmãos Karamazov

Quais são os problemas mais frequentes no desenvolvimento web? Seriam os problemas com AJAX? Escrever SQL? Tempo demais para gerar os CRUDs básicos?

Com tudo isso em mente, David Heinemeier Hansson, trabalhando na 37Signals, começou a procurar uma linguagem de programação que pudesse utilizar para desenvolver os projetos de sua empresa. Mais ainda, criou um framework web para essa linguagem, que permitiria a ele escrever uma aplicação web de maneira simples e elegante.

O que possibilita toda essa simplicidade são os recursos poderosos que Ruby oferece e que deram toda a simplicidade ao Rails. Esses recursos proporcionados pela linguagem Ruby são fundamentais de serem compreendidos por todos que desejam se tornar bons desenvolvedores Rails e por isso o começo desse curso foca bastante em apresentar as características da linguagem e seus diferenciais.

Um exemplo clássico da importância de conhecer mais a fundo a linguagem Ruby está em desvendar a “magia negra” por trás do Rails. Conceitos como meta programação, onde código é criado dinâmicamente, são essenciais para o entendimento de qualquer sistema desenvolvido em Rails. É a meta programação que permite, por exemplo,que tenhamos classes extremamente enxutas e que garante o relacionamento entre as tabelas do banco de dados com nossas classes de modelo sem a necessidade de nenhuma linha de código, apenas usando de convenções.

Esse curso apresenta ainda os conceitos de programação funcional, uso de blocos, duck typing, enfim, tudo o que é necessário para a formação da base de conceitos que serão utilizados ao longo do curso e da vida como um desenvolvedor Rails.

1.2 - A comunidade Rails

A comunidade Rails é hoje uma das mais ativas e unidas do Brasil. Cerca de 10 eventos acontecem anualmente com o único propósito de difundir conhecimento e unir os desenvolvedores. Um exemplo dessa força é o Rails Summit, maior evento de Rails da America Latina, com presença dos maiores nomes nacionais e internacionais de Ruby on Rails.

Além dos eventos, diversos blogs sobre Rails tem ajudado diversos programadores a desvendar esse novo universo:

• http://akitaonrails.com/ - Fábio Akita • http://www.nomedojogo.com/ - Carlos Brando

Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

• http://yehudakatz.com/ - Yehuda Katz • http://blog.plataformatec.com.br/ - José Valim

• http://railsenvy.com/ - Rails Envy

• http://www.rubyinside.com.br/ - RubyInside Brasil

• http://rubyflow.com/ - Rubyflow

• http://blog.caelum.com.br/ - Blog da Caelum

• http://caueguerra.com - Cauê Guerra

• http://fabiokung.com/ - Fabio Kung

• http://andersonleite.com.br/ - Anderson Leite

• http://guilhermesilveira.wordpress.com/ - Guilherme Silveira

A Caelum aposta no Rails desde 2007, quando criamos o primeiro curso a respeito. E o ano de 2009 marcou o Ruby on Rails no Brasil, ano em que ele foi adotado por diversas empresas grandes e até mesmo orgãos do governo, como mencionado num post em nosso blog no começo do ano de 2009:

http://blog.caelum.com.br/2009/01/19/2009-ano-do-ruby-on-rails-no-brasil/

1.3 - Bibliografia

• Agile Web Development with Rails - Sam Ruby, Dave Thomas, David Heinemeier Hansson

Esse é o livro referência no aprendizado de Ruby on Rails, criado pelo autor do framework. Aqui, ele mostra através de um projeto, os principais conceitos e passos no desenvolvimento de uma aplicação completa.

• Programming Ruby: The Pragmatic Programmers’ Guide - Dave Thomas, Chad Fowler, Andy Hunt

Conhecido como “Pickaxe”, esse livro pode ser considerado a bíblia do programador Ruby. Cobre toda a especificação da linguagem e procura desvendar toda a “magia” do Ruby.

• The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt, David Thomas

As melhores práticas para ser um bom desenvolvedor: desde o uso de versionamento, ao bom uso do logging, debug, nomenclaturas, como consertar bugs, etc.

Existe ainda um post no blog da Caelum sobre livros que todo desenvolvedor Rails deve ler: http://blog. caelum.com.br/2009/08/25/a-trinca-de-ases-do-programador-rails/

1.4 - Tirando dúvidas

Para tirar dúvidas dos exercícios, ou de Ruby e Rails em geral, recomendamos se inscrever na lista do GURU-SP (http://groups.google.com/group/ruby-sp), onde sua dúvida será respondida prontamente.

Também recomendamos duas outras listas:

• http://groups.google.com/group/rubyonrails-talk • http://groups.google.com/group/rails-br

Capítulo 1 - Agilidade na Web - Bibliografia - Página 2

Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

Fora isso, sinta-se à vontade para entrar em contato com seu instrutor e tirar todas as dúvidas que tiver durante o curso.

O fórum do GUJ.com.br, conceituado em java, possui também um subfórum de Rails: http://www.guj.com.br/

1.5 - Para onde ir depois?

Além de fazer nossos cursos de Rails, você deve participar ativamente da comunidade. Ela é muito viva e ativa, e as novidades aparecem rapidamente. Se você ainda não tinha hábito de participar de fóruns, listas e blogs, essa é uma grande oportunidades.

Há ainda a possibilidade de participar de projetos opensource, e de você criar gems e plugins pro rails que sejam úteis a toda comunidade.

CAPÍTULO 2

A linguagem Ruby

“Rails is the killer app for Ruby.” – Yukihiro Matsumoto, Criador da linguagem Ruby

Neste capítulo, conheceremos a poderosa linguagem de programação Ruby, base para completo entendimento do framework Ruby on Rails.

2.1 - A história do Ruby

Ruby foi apresentada ao público pela primeira vez em 1995, pelo seu criador: Yukihiro Matsumoto, mundialmente conhecido como Matz. É uma linguagem orientada a objetos, com tipagem forte e dinâmica.

Uma de suas principais características é a expressividade que possui. Matz teve como objetivo desde o início que Ruby fosse uma linguagem muito simples de ler e ser entendida, para facilitar o desenvolvimento e manutenção de sistemas escritos com ela.

Ruby é uma linguagem interpretada e, como tal, necessita da instalação de um interpretador em sua máquina antes de executar algum programa.

Orientação a objetos pura

Entre as linguages de programação orientada a objetos, muito se discute se são puramente orientadas a objeto ou não, já que grande parte possui recursos que não se comportam como objetos. Os tipos primitivos de Java são um exemplo desta contradição, já que não são objetos de verdade. Ruby é considerada uma linguagem puramente orientada a objetos, já que tudo em Ruby é um objeto (inclusive as classes, como veremos).

2.3 - Instalação do interpretador

Antes da linguagem Ruby se tornar popular, existia apenas um interpretador disponível: o escrito pelo próprio Matz, em C. É um interpretador simples, sem nenhum gerenciamento de memória muito complexo, nem características modernas de interpretadores como a compilação em tempo de execução (conhecida como JIT).

Este interpretador é conhecido como Matz’s Ruby Interpreter (MRI), ou CRuby (já que é escrito em C) e é também considerado a implementação de referência para a linguagem Ruby.

A última versão estável é a 1.8.x, mas já está disponível a versão 1.9 da linguagem, também conhecida como YARV, que já pode ser usada em produção apesar de não existirem ainda muitas bibliotecas compatíveis (conhecidas no mundo de Ruby como gems) uma vez que essa é uma versão de transição até o Ruby 2.0 onde serão inclusas diversas mudanças e novas funcionalidades.

Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

A maioria das distribuições Linux possuem o pacote de uma das última versões estáveis (em geral, 1.8.7) pronto para ser instalado. O exemplo mais comum de instalação é para o Ubuntu:

sudo apt-get install ruby1.8 ruby1.8-dev

O interpretador ruby (MRI) já vem instalado no Mac OS X.

Apesar de existirem soluções prontas para a instalação do Ruby em diversas plataformas (one-clickinstallers), sempre é possível baixá-lo pelo site oficial:

http://ruby-lang.org

Após a instalação, não deixe de conferir se o interpretador está disponível na sua variável de ambiente PATH:

$ ruby --version ruby 1.8.6 (2007-09-24 patchlevel 1) [i486-linux]

A saída pode ser um pouco diferente, dependendo do sistema operacional e da versão instalada.

Ruby possui um gerenciador de pacotes e dependências bastante avançado, flexível e eficiente: Ruby-

Gems. Os gems são bibliotecas reutilizáveis de código Ruby, que podem até conter algum código nativo (em C, Java, .Net). São análogos aos jars do mundo Java, ou os assemblies do mundo .Net. RubyGems é um sistema gerenciador de pacotes comparável a qualquer um do mundo *NIX, como o apt-get, o MacPorts (BSD Ports), o yum, entre outros.

Portanto, para sermos capazes de instalar e utilizar as centenas de gems disponíveis, precisamos instalar além do interpretador Ruby, o Rubygems.

Basta baixá-lo através da urlo abaixo e executar o script de instalação contido no pacote: http://www.rubygems.org/ cd rubygems-1.x.x ruby setup.rb

2.4 - Outras implementações

Com a popularização da linguagem Ruby (iniciada pelo Ruby on Rails), implementações alternativas da linguagem começaram a ficar em evidência. A maioria delas segue uma tendência natural de serem baseados

Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails

em uma Máquina Virtual ao invés de serem simples interpretadores. Algumas implementações possuem até compiladores completos, que transformam o código Ruby em alguma linguagem intermediária a ser interpretada por uma máquina virtual.

O próprio Ruby 1.9 de referência (YARV), evolução do MRI, é baseado em uma máquina virtual: Yet Another Ruby VM.

A principal vantagem das máquinas virtuais é facilitar o suporte em diferentes plataformas. Além disso, ter código intermediário permite otimização do código em tempo de execução, feito através da JIT.

JRuby foi a primeira implementação completa da versão 1.8.6 do Ruby. O JRuby é a principal implementação em Java da linguagem Ruby e é hoje considerada por muitos como a implementação mais rápida da linguagem.

Não é um simples interpretador, já que também opera nos modos AOT - compilação Ahead Of Time e JIT - Just In Time compilation, além do modo interpretador tradicional (Tree Walker).

Teremos um capítulo exclusivo sobre JRuby, mas uma de suas principais vantagens é a interoperabilidade com código Java existente, além de aproveitar todas as vantagens de uma das plataformas de execução de código mais maduras (GC, JIT, Threads nativas, entre outras).

(Parte 1 de 5)

Comentários