Vous êtes sur la page 1sur 7

Ruby com sabor de Rails

Em seu livro Ruby on Rails 2.3 Tutorial: Learn Rails by Example, Portable Documents,
Michael Hartl explora alguns elementos de Ruby importantes para desenvolvedores
Rails. Baseado em exemplos do Captulo 3, este captulo explora alguns elementos
de Ruby que so importantes para desenvolvedores Rails. Ruby uma linguagem
extensa mas, felizmente, os subsistemas necessrios para ser produtivo como um
desenvolvedor Rails so relativamente pequenos. Michael Hartl explora alguns
elementos de Ruby importantes para desenvolvedores Rails.
Alm do mais, esses subsistemas so diferentes das abordagens usuais no
aprendizado do Ruby, e isso importante porque, se voc tem como objetivo
confeccionar aplicaes dinmicas para a web, eu recomendo aprender Rails antes,
absorvendo um pouco de Ruby no processo. Para ser um expert em Rails, voc
precisa entender Ruby mais profundamente, e esse livro lhe d uma boa base para
desenvolver esse conhecimento. Como assinalado na Seo 1.1.1, aps terminar o
Tutorial Rails I, eu recomendo ler um livro exclusivamente de Ruby, como por
exemplo, Beginning RubyThe Well-Grounded Rubyist, ou The Ruby Way.
Este captulo cobre muitos aspectos, e no necessrio explorar todos numa
primeira leitura. Voltarei a referir-me a ele frequentemente em captulos seguintes.
4.1 Motivao
Como vimos no ltimo captulo, possvel desenvolver a estrutura de uma aplicao
em Rails, e at mesmo comear a test-la, com nenhum conhecimento da linguagem
Ruby que est na base. Fizemos isso confiando no controller e no test code gerados
e tambm seguindo os exemplos que vimos l. Contudo, essa situao no pode
durar para sempre, e abriremos este captulo com algumas contribuies ao site, o
que nos coloca face a face com nossas limitaes em Ruby.
4.1.1 Um title Helper
Quando vimos nosso novo aplicativo da ltima vez, tnhamos acabado de atualizar
nossas pginas basicamente semiestticas para usar layouts em Rails, visando a
eliminar duplicao em nossas visualizaes. Veja a listagem 4.1, o layout sample
application site.
app/views/layouts/application.html.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ruby on Rails Tutorial Sample App | <%= @title %></title>
</head>
<body>
<%= yield %>
</body>
</html>

Esse layout funciona bem, mas h uma parte que poderia ser melhorada.
Lembremos que a linha ttulo
Ruby on Rails Tutorial Sample App | <%= @title %>
baseia-se na definio de @title nas aes, tais como
class PagesController < ApplicationController
def home
@title = "Home"
end
.
.
.

Mas, e se no definirmos uma varivel @title? uma boa conveno usar um base
title em todas as pginas, com um ttulo opcional varivel se quisermos ser mais
especficos. Ns quase conseguimos isso com nosso layout atual, com um porm: se
voc apagar @title em uma das aes, na ausncia da varivel @title, o ttulo
aparecer como abaixo:
Ruby on Rails Tutorial Sample App |

Em outras palavras, h um ttulo base adequado, mas h tambm um caractere | de


barra vertical direita no final do ttulo.
Uma forma comum de lidar com essa situao definir um helper, que a funo
prpria para usar em visualizaes. Vamos definir um title helper que retorne um
ttulo de base Ruby on Rails Tutorial Sample App, se nenhuma varivel @title
estiver definida, e adicionar uma barra vertical seguida da varivel ttulo se @title
for definida. Veja a listagem 4.2:
app/views/layouts/application.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ruby on Rails Tutorial Sample App | <%= @title %></title>
</head>
<body>
<%= yield %>
</body>
</html>

Listagem 4.2. Definindo um title helper.


app/helpers/application_helper.rb
module ApplicationHelper
# Return a title on a per-page basis.
def title
base_title = "Ruby on Rails Tutorial Sample App"
if @title.nil?
base_title

else
"#{base_title} | #{@title}"
end
end
end

Isso pode parecer bastante simples aos olhos de um programador Rails experiente,
mas cheio de novas idias Ruby: mdulos, comentrios, atributos locais variveis,
booleanos, fluxos de controle, interpolao em strings, e valores de retorno.
Consideraremos cada uma dessas idias neste captulo.
Agora que temos um helper, podemos us-lo para simplificar nosso layout,
substituindo
<title>Ruby on Rails Tutorial Sample App | <%= @title %></title>
por
<title><%= title %></title>
como visto na Listagem 4.3. Note particularmente a mudana da instncia varivel
@title para o ttulo helper method (sem o caracter @). Usando o Autotest ou spec
spec/, voc pode verificar que os testes do Captulo 3 ainda funcionam.
Listagem 4.3. O layout sample application site.
app/views/layouts/application.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><%= title %></title>
</head>
<body>

<%= yield %>


</body>
</html>

4.1.2 Cascading Style Sheets


H um segundo acrscimo ao nosso site que parece simples, mas que adiciona
diversos novos conceitos Ruby: incluso de style sheets em nosso site layout.
Embora este seja um livro de desenvolvimento web, e no de web design,
utilizaremos style sheets em cascata cascading style sheets (CSS) -, para dar
aplicao de amostra um mnimo de estilo, e usaremos o framework Blueprint CSS
como base para essa finalidade.
Para iniciar, faa o download da ltima verso Blueprint CSS. (Para simplificar,
considero que voc vai fazer o download do Blueprint em uma pasta de download,
mas use qualquer pasta que lhe for conveniente). Usando tanto o comando line ou
uma ferramenta grfica, copie a pasta blueprint do Blueprint CSS para a pasta
thepublic/stylesheets, um diretrio especial onde o Rails tem as style sheets. No
meu Mac, os comandos so os abaixo, mas os seus detalhes podem variar:
$cp-r ~/Downloads/joshuaclayton-blueprint-css-016c911/blueprint >
public/stylesheets/
Aqui cp o comando de cpia Unix, e a bandeira r copia recursivamente
(necessrio para a cpia de diretrios). (Como brevemente mencionado na Seo
3.2.1, o caracter ~ significa home directory em Unix.)
Uma vez que voc tenha as folhas de estilo no diretrio apropriado, o Rails
providencia um helper para inclu-las em nossas pginas usando Embedded Ruby.
Veja a listagem 4.4, acrescentando style sheets ao layout sample application.
app/views/layouts/application.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>

<title><%= title %></title>


<%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
<%= stylesheet_link_tag 'blueprint/print', :media => 'print' %>
</head>
<body>
<%= yield %>
</body>
</html>

Vamos nos concentrar nas novas linhas:


<%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
<%= stylesheet_link_tag 'blueprint/print', :media => 'print' %>
Elas usam o helper interno stylesheet_link_tag do Rails, sobre o qual voc pode ler
mais detalhes no API do Rails.2 A primeira linha stylesheet_link_tag inclui a folha de
estilo blueprint/screen.css para telas, e a segunda inclui blueprint/print.css para
impresso (o helper automaticamente acrescenta a extenso .css para os arquivos
que no a tenham para ser breve deixei esse aspecto de lado).
Da mesma forma que com o title helper, para um Programador Rails experiente
essas linhas parecem simples, mas h pelo menos quatro novas ideias para o Ruby:
processos internos do Rails, processos de chamada sem parnteses, smbolos, e
hashes. Neste captulo tambm abordaremos essas novas ideias (veremos o HTML
produzido por style sheets includo na Listagem 4.6 da Seo 4.3.4.).
Note que com as novas style sheets o site no parecer muito diferente, mas j um
comeo (Figura 4.1). Continuaremos a construo desses fundamentos no captulo
5.3.

Texto original de Michael Hartl, disponvel em


http://www.informit.com/articles/article.aspx?p=1653369

Vous aimerez peut-être aussi