7 898357 607170
R$ 12,90
€ 4,90
Crie sistemas de forma fácil utilizando a linguagem Ruby e o framework Rails
#002
Crie a sua própria
LOJA ONLINE com o Ruby on Rails Tutorial em vídeo
Carrinho de compras
Tudo o que você precisa para construir um site de última geração
CRIE APLICAÇÕES Aprenda a usar uma das ferramentas mais completas para desenvolvimento de aplicações Web
SITES SUPER MODERNOS
Desenvolva seus projetos para Web com as ferramentas mais atuais para programação
NO CD
+de 70 apostilas; Ferramentas AJAX; + de 250 códigos-fonte em PHP, JavaScript, Python e outros; Ambientes completos para criar aplicativos de modo mais eficiente. webdev002_01-16.indd 1
16.10.07 13:43:01
webdev :: Ruby on Rails
Jóias da Programação Programar se torna algo divertido com Ruby, você ganha mais produtividade sem perder a sustentabilidade do seu projeto. Alta incisão comercial, alto impacto na sua produtividade e o mais importante, você não precisa enlouquecer para desenvolver um sistema! por Everton J. Carpes
O Ruby on Rails é uma web framework desenvolvida, inicialmente, com foco em pessoas e com o objetivo de ampliar sua produtividade. Trata-se de um conjunto de tecnologias que se conectam, de maneira que facilite os processos de desenvolvimento e deploy, bem como auxiliar na adoção de processos de desenvolvimento que garantam melhor qualidade ao software. É, antes de tudo, um ambiente que busca elegância e simplicidade, eliminando ao máximo problemas de máquinas e permitindo ao desenvolvedor focar-se naquilo que mais interessa, ou seja, a causa pela qual está desenvolvendo a aplicação. Desde as primeiras linhas de código já se tem essa sensação de foco (e NÃO, ela não passa com o tempo). Minutos depois de começar a desenvolver com o Rails, você já está discutindo sobre sua aplicação. Nada de dezenas de linhas de XMLs, de múltiplos arquivos de configurações, de decisões sobre como integrar coisas, nada de decisões sobre onde colocar suas classes. Você apenas inicia uma aplicação Rails e começa a mexer nas classes. Como isso é possível? Simples (aliás, simplicidade é a máxima do Rails), esqueçamos as exceções e nos foquemos naquilo que é mais óbvio e mais provável. Se é provável um acesso a banco de dados, então, precisamos de algo que facilite isso, que faça parte diretamente da framework. Se é provável que testes sejam feitos, por que não provê-los de forma organizada e que rodem de forma automatizada? Se precisamos de AJAX (e quem não precisa?), pois que se tenha suporte a ele. Tudo em um ambiente simples e unificado – One ring to rule them all (Um anel para a todos governar) – é o que dita o verso do anel! Mesmo assim, embora RoR (Ruby On Rails) seja feito com enfoque nos principais problemas de desenvolvimento Web, é possível se aprofundar nas entranhas do framework, quando necessário, alterando seus comportamentos sem grandes encargos por causa disso. Esta postura de manter a simplicidade em mente, solucionar aquilo que obviamente é necessário e descartar tudo o que não é essencial é auto-intitulada pragmática. É um empirismo extremo, focado nas necessidades básicas para o desenvolvimento, em especial na maior delas: impedir que o desenvolvedor enlouqueça.
Ruby Simplicidade e expressividade levam a uma alta produtividade.
O Ruby é uma linguagem orientada a objetos, dinâmica, reflexiva, expressiva e clara, criada no Japão por Yukihiro “Matz” Matsumoto. Quando se diz que ela é orientada a objetos, isso significa que em Ruby tudo é um objeto. Um exemplo tradicional é: 3.times do puts “Hello, word!” end Quando é dito 3.times, estamos invocando o método times() do objeto 3 (que é uma instância da classe Fixnum). puts() é um método que escreve o que lhe for passado de parâmetro na saída-padrão. Como pode ser notado no exemplo, o Ruby não exige parênteses nas chamadas a métodos nem possui terminadores ao final das linhas (porém recomenda-se que, para evitar ambigüidades, acrescentem-se parênteses a situações mais complexas). Também é possível notar o alto grau de proximidade com a linguagem humana. Experimente ler o trecho ininterruptamente. Sem dúvida, poderia ser uma ordem dada de uma pessoa a outra. Este é um exemplo aparentemente simples quando se lê, mas já traz consigo vários conceitos da linguagem.
Instalando o Ruby Devido às diferenças entre sistemas operacionais, seria impossível listar a instalação da linguagem em todos os ambientes. Será apresentada a maneira de instalação para alguns dos ambientes mais comuns. Para mais informações, favor consultar o site oficial do Ruby.
webdev002_01-16.indd 4
16.10.07 13:43:06
rails
Debian: $ apt-get install ruby Windows Para Windows, existe o One-Click-Installer, disponível em http://rubyforge.org/projects/rubyinstaller/. Baixe o arquivo e o execute. Durante a instalação, o programa questionará se você deseja instalar também o RubyGems. Esse software será importante mais tarde para instalar o Rails, portanto deixe o respectivo item selecionado. Depois desse processo, a linguagem será disponibilizada em seu computador. Mac OSX
Rails Rails é um framework que se propõe a solucionar vários problemas de um processo comum de desenvolvimento de aplicações Web. Entre os principais problemas que o Rails busca solucionar, encontram-se: • Uma camada ORM (Object Relational Mapping – Mapeamento Objeto Relacional) simples de utilizar, já integrada à aplicação e com suporte sólido aos bancos de dados mais comuns; • Uma arquitetura que oriente o código sob padrões comuns, como MVC (Model, View and Control); • Mapeamento de recursos (rotas para URIs); • Suporte à estrutura padronizada de testes unitários e funcionais; • Suporte nativo a envio e recebimento de e-mails; • Integração com bibliotecas JavaScript e suporte simples a AJAX (componentização de tarefas comuns no desenvolvimento de aplicações que usam AJAX); • Suporte integrado a web-services; • Mecanismos de atualização unificados (todas as partes são atualizáveis em conjunto); • Facilidade de integração em Web servers padrões no mercado, como Apache ou IIS; • Auxiliadores na geração de código que efetivamente acelerem o processo de desenvolvimento; • Mecanismos de cache consistentes.
Instalando Rails
O Locomotive é o jeito mais fácil de deixar seu ambiente de trabalho com o Ruby on Rails funcionando sem ter maiores problemas. Baixe o pacote em http://locomotive.raaum.org, monte a imagem de disco e abra o instalador com um duplo clique. Em alguns segundos você terá um ambiente completo para trabalhar, incluindo Ruby, Rails, Lighttpd, SQlite, RubyGems e mais um monte de outros pacotes utilitários.
Testando o Ruby
Uma grande parte das distribuições Linux atuais contém um pacote próprio para o Rails. No Debian, por exemplo, é possível instalar o Rails com um simples comando: $ apt-get install rails No entanto, a linguagem possui um gerenciador de pacote próprio, o RubyGems. Por meio do RubyGems, pode-se instalar o Rails (bem como várias bibliotecas e programas) de forma semelhante em todos os sistemas operacionais com acesso à Internet.
Abra um prompt novo, e digite o comando:
$ ruby -v
Gems no Windows Se você instalou a linguagem Ruby por intermédio do One-Click-Installer e deixou selecionada a instalação do Gems, este já fará parte de seu sistema.
Se a instalação ocorrer sem problemas, uma mensagem será mostrada com a versão que está instalada em seu computador.
Gems em outros sistemas Baixe o pacote do RubyGems, disponível em: http://rubyforge.org/frs/?group_id=126
#sh
webdev002_01-16.indd 5
16.10.07 13:43:08
webdev :: Ruby on Rails
Descompacte o pacote e, dentro da pasta digite, em um prompt de comando (será necessário ter acesso administrativo ao sistema): $ ruby setup.rb Em seguida, digite em um prompt de comando: $ gem update $ gem install rails --include-dependencies
Criando aplicações com Rails Uma vez instalado o Rails, é simples usá-lo para criar uma nova aplicação, basta digitar em um prompt de comando: $ rails my_app Onde my_app é o nome da pasta a ser criada com sua aplicação. Este comando gera uma estrutura de arquivos e pastas, que é auto-suficiente para que você comece a codificar sua aplicação.
Pastas O Rails cria, automaticamente, uma estrutura de pastas adequada ao início de uma aplicação Web. Utilizando o comando tree (mostra as pastas e subpastas a partir de um determinado ponto), a listagem de diretórios será a mostrada o lado. Essa estrutura demonstra alguns aspectos do Rails, por exemplo, a pasta app – que é onde deve ficar o código de sua aplicação – é subdividida em controllers, models, views e helppers, o que claramente nos leva ao MVC. Ainda na raiz da aplicação gerada, pode-se ver uma pasta para testes, na qual tanto testes unitários como funcionais devem ser mantidos (há também uma subpasta denominada fixtures, na qual se criam dados falsos que podem ser utilizados nos testes). A pasta de components é a responsável por conter pequenas aplicações que são capazes de funcionar de forma independente e que trazem algum reaproveitamento de código, ou seja, componentes de software. Este não é, de forma alguma, o único recurso existente no Rails. Ainda há mecanismos de plug-ins que servem ao mesmo propósito, ou seja, para adicionar funcionalidades ao Rails, integrando-se à aplicação. É na pasta config que ficam as configurações do Rails (dados para inicialização da database, definição das rotas para as URIs, detalhes sobre o armazenamento das seções etc). A pasta db guarda arquivos relativos ao estado atual e a migrações sobre a database. A pasta public é onde fica, na aplicação, seu conteúdo estático e público. Aqui ficam os JavaScripts, as folhas de estilo, as imagens etc. Na pasta lib é onde ficam localizadas bibliotecas de terceiros.
$ tree -d my_app/ my_app/ |-- app | |-- controllers | |-- helpers | |-- models | `-- views | `-- layouts |-- components |-- config | `-- environments |-- db |-- doc | `-- api -> /usr/share/doc/rails/html |-- lib | `-- tasks |-- log |-- public | |-- images | |-- javascripts | `-- stylesheets |-- script | |-- performance | `-- process |-- test | |-- fixtures | |-- functional | |-- integration | |-- mocks | | |-- development | | `-- test | `-- unit |-- tmp | |-- cache | |-- pids | |-- sessions | `-- sockets `-- vendor |-- actionmailer -> /usr/share/rails/actionmailer |-- actionpack -> /usr/share/rails/actionpack |-- actionwebservice -> /usr/share/rails/actionwebservice |-- activerecord -> /usr/share/rails/activerecord |-- activesupport -> /usr/share/rails/activesupport |-- rails -> /usr/share/rails `-- railties -> /usr/share/rails/railties
A pasta log é o destino-padrão para os logs da aplicação. Nesta pasta, a princípio, podem ser encontrados alguns arquivos, basicamente, um para o ambiente em desenvolvimento,
webdev002_01-16.indd 6
16.10.07 13:43:09
jruby
automatização dos testes. Para isso, vários padrões são utilizados. O Rails possui alguns padrões de testes construídos nele mesmo. Os principais são os testes funcionais e os unitários, para os quais o Rails trata de dar suporte, criando um ambiente inteiramente apropriado e possui rake tasks especificas para serem rodadas junto à aplicação. Todos os testes do sistema devem residir na pasta test, mais especificamente em uma de suas subpastas. Ao iniciarmos uma aplicação com o Rails, podem-se encontrar, na pasta de testes, três subpastas bem importantes: • fixtures – Dados falsos utilizados pelo Rails com o propósito de popular a base de dados para que os testes possam ser rodados; • units – Testes focados nos modelos; • funtionals – Testes voltados às actions. No Rails, o ambiente de testes é um ambiente especial. Ele trabalha em uma base de dados separada, que é reconstruída para CADA teste que roda, de forma que todos eles tenham um estado fictício apropriado para seus testes, e não existe dependência entre eles, uma vez que os dados criados em um teste não estarão presentes quando o próximo rodar. Esse padrão facilita o processo de testes, pois cria um ambiente inteiramente novo para que cada um rode. Para que isso seja possível, é necessário, primeiramente, que exista na pasta db um arquivo chamado schema. rb, o qual deve possuir o schema da base de dados no estado atual da aplicação. Esse schema é gerado automaticamente, se você estiver usando as migrações, ou então pode ser construído por meio de uma rake task db:schema:dump. O dump será utilizado na autogeração da base de dados. Além do schema, é necessário ao Rails que os arquivos com as fixtures, contendo os dados específicos para cada teste, estejam presentes. Criar um teste é muito simples, e alguns deles já são criados automaticamente pelo Rails. Basicamente, um teste é composto por asserts, que são métodos que verificam se determinada afirmação está correta, e caso não esteja, dispara um aviso. Um exemplo simples: #ruby require File.dirname(__FILE__) + ‘/../test_helper’ class PersonTest < Test::Unit::TestCase fixtures :person def test_create assert_equal 2, Person.count, “Foi criado um número equivocado de objetos do tipo Person” end end
Esse é um exemplo típico de teste unitário. Basta que herdemos a classe Test::Unit::TesCase e implementemos um método que tenha seu nome iniciado por test_. O método assert_equal() é um exemplo de assert no qual é testado se o valor do segundo parâmetro é igual ao do primeiro e, caso não seja, a mensagem passada no terceiro parâmetro será apresentada quando os testes rodarem. Para rodar os testes no Rails, também existem algumas rake tasks. As mais importantes são: • rake test – Roda todos os testes presentes no sistema; • rake test:units – Roda somente os testes unitários; • rake:functional – Roda apenas os testes funcionais. Os testes são um recurso poderoso e interessante. Por meio deles, você pode obter uma garantia muito maior da qualidade de seu software, além de poder ter mais confiança na hora de realizar modificações em sua aplicação. Uma vez criado um teste, você pode rodá-lo quantas vezes quiser, e se daqui a um semestre forem necessárias alterações na seção de código que está sendo testada – e essa alteração quebrar algo –, os testes vão acusar, o que evita transtornos colaterais tão comuns em aplicações não testadas.
JRuby O Ruby é uma linguagem interpretada que roda sobre uma máquina virtual própria. Isso pode ser um problema em certos ambientes que já possuem determinadas tecnologias adotadas como padrão. Uma das mais notáveis que podem bloquear o avanço do Ruby é a linguagem Java. Em resposta a isso existe uma alternativa: JRuby. JRuby é uma implementação da linguagem Ruby sobre a máquina virtual Java. Além da liberdade de escolha em relação ao ambiente que esta solução oferece, a mesma ainda vem a solucionar muitos problemas que a linguagem Ruby possuía (problemas com unicode por exemplo). Hoje, o Rails funciona perfeitamente nesta plataforma, cujo desenvolvimento foi sustentado pela própria Sun (empresa desenvolvedora de uma das mais populares máquinas virtuais Java). Para mais informações sobre isso, existe um vídeo bastante interessante, do brasileiro Fabio Akita, disponível para download em www.treinatom.com.br/betaEventos/ JRubyOMelhorDeDoisMundosComFabioAkita13_07_2007.rar
Referências www.rubyonrails.org/ www.ruby-lang.org/en/ www.rubyonbr.org/ www.w3.org/ www.opensource.org/licenses/mit-license.php http://manuals.rubyonrails.com/read/book/5
11 webdev002_01-16.indd 11
16.10.07 13:43:11
webdev :: Ruby on Rails
Do que Ruby on Rails é capaz Depois de ler esta revista e assistir à videoaula inclusa no CD, você deve estar se perguntando o que essa fantástica ferramenta é capaz de realizar. Dedicamos estas páginas a mostrar a você o que já foi feito baseado na plataforma para inspirá-lo a desenvolver outras soluções tão boas ou melhores do que essa. por Luciano Hagge
37signals
Ta-da lists | www.tadalist.com
A empresa que criou o Ruby on Rails para facilitar o desenvolvimento de suas ferramentas on-line, não por acaso, tem algumas das melhores e mais famosas aplicações baseadas no framework mais badalado atualmente. Não contentes em liberar esse framework para quem quisesse usar, também lançaram um livro ensinando como construir aplicativos online de sucesso, o Getting Real.
Lista de tarefas gratuita e facílima de usar, ótima para quem deseja começar a utilizar técnicas de GTD (Getting Things Done) e compartilhar tarefas de projetos em grupo.
Campfire | www.campfirenow.com Chat e compartilhamento de arquivos corporativo voltado para empresas que precisam de uma ferramenta de comunicação entre funcionários, mas não querem usar serviços como MSN ou AIM.
Basecamp | www.basecamphq.com Gerenciador de projetos mais popular da atualidade, inclui todos os serviços citados mais um gerenciador de prazos e datas para tarefas específicas, controle de horas gastas e um olhar geral sobre quando e quem está fazendo algo.
Writeboard | www.writeboard.com Editor de textos colaborativo e gratuito, conta com versionamento, revisões, exportação em formatos de texto ou HTML e com feeds RSS.
Highrise | www.highrisehq.com Backpack | www.backpackit.com Organizador pessoal que permite criar páginas, listas de tarefas, salvar e compartilhar arquivos e calendários, com lembretes e mensagens SMS pré-programadas.
Mais recente item da lista de aplicativos superúteis da 37signals, o Highrise é um CRM (Customer Relationship Manager) simples e inteligente. É possível cadastrar empresas, clientes, contatos, escrever notas e acontecimentos com
12 webdev002_01-16.indd 12
16.10.07 13:43:24