<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Leonardo Bighi &#187; Ruby</title>
	<atom:link href="http://leonardobighi.com/category/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://leonardobighi.com</link>
	<description>Programação, Rails, Tecnologia.. tudo com um toque pessoal</description>
	<lastBuildDate>Thu, 19 Mar 2009 12:09:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Evite repetição de código no Ruby On Rails</title>
		<link>http://leonardobighi.com/ruby/13/evite-repeticao-de-codigo-no-ruby-on-rails</link>
		<comments>http://leonardobighi.com/ruby/13/evite-repeticao-de-codigo-no-ruby-on-rails#comments</comments>
		<pubDate>Mon, 01 Oct 2007 17:08:10 +0000</pubDate>
		<dc:creator>Bighi</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://leonardobighi.com/ruby/13/evite-repeticao-de-codigo-no-ruby-on-rails</guid>
		<description><![CDATA[Um dos princípios por trás do Ruby On Rails é o DRY (Don&#8217;t Repeat Yourself), ou seja, não se repita. Ele nos fornece muitos meios de se evitar repetições, e o que mais uso pra esse propósito são os filtros.
Filtros, no Rails, definem um método que será executado antes e/ou depois de cada página daquela [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Um dos princípios por trás do <a href="http://lucrandonarede.com/jc/p/5749/215/ruby%20rails" rel="nofollow"  title="Compre livros de Ruby on Rails com ótimos preços" target="_blank">Ruby On Rails</a> é o <strong>DRY</strong> (Don&#8217;t Repeat Yourself), ou seja, não se repita. Ele nos fornece muitos meios de se evitar repetições, e o que mais uso pra esse propósito são os filtros.</p>
<p>Filtros, no Rails, definem um método que será executado antes e/ou depois de cada página daquela classe. Então, nos nossos controllers, podemos usar os filtros para executar as mesmas tarefas rotineiras em todas as páginas sem ter que repetir aquele código dentro de cada action.</p>
<h3>Definindo um filtro</h3>
<p>Nós temos 3 tipos de filtro à disposição: <strong>before_filter</strong>, <strong>after_filter</strong>, e <strong>around_filter</strong>. O <strong>before_filter</strong> define um método que será executado antes de carregar cada página da nossa aplicação. O <strong>after_filter</strong> define um método que será executado depois de cada página da aplicação. E, por último, o <strong>around_filter</strong> define um método que será executado antes e depois de cada página.</p>
<p>Vejamos um exemplo de um controller simples que usa um filtro.</p>
<pre>class ShoppingController &lt; ActionController::Base

  before_filter :nosso_metodo  #imagine aqui várias actions da aplicação

private

  def nosso_metodo

    @mensagem = "Esta é uma mensagem"

  end

end</pre>
<p>No exemplo acima, temos o controller Shopping, e antes de cada página deste controller o método nosso_metodo é chamado, por ter sido definido no before_filter. O método, então, define uma mensagem qualquer que usamos apenas de exemplo.</p>
<h3>Fazendo uma action ignorar um filtro</h3>
<p>Em algumas situações, podemos ter um ou outra action dentro da nossa classe que não precisa que aquele filtro seja executado. Para isso, podemos fazer com que uma action deliberadamente &#8220;salte&#8221; um filtro, ignorando-o.</p>
<p>Ainda usando o exemplo anterior, se a gente quisesse criar uma action chamada <strong>salteadora</strong> que não precisa do filtro que definimos, faríamos assim:</p>
<pre>def salteadora

  skip_filter :nosso_metodo

end</pre>
<h3>Definindo condições para o filtro</h3>
<p>Ainda melhor do que definir saltos de filtro nas classes é definir condições no próprio filtro. Podemos fazer o filtro ser executado <strong>apenas </strong>em certas actions, ou fazer com que ele apenas <strong>não seja</strong> executado em certas actions.</p>
<p>Para criarmos um filtro que será executado apenas em actions definidas por nós:</p>
<pre>before_filter :nosso_metodo, :only =&gt; [:action1, :action2, :action3]</pre>
<p>E podemos ir definindo quantas actions quisermos no campo <strong>only</strong>.</p>
<p>Agora, para que o filtro rode em todas as actions menos as definidas por nós, usaremos exceções.</p>
<pre>before_filter :nosso_metodo,  :except =&gt; [:action1, :action2]</pre>
<p>Agora o método executaria em todas as páginas, <strong>exceto </strong>na action1 e na action2.</p>
<h3>Onde usar os filtros</h3>
<p>Se você leu isso tudo e não sabe muito bem <em>onde </em>ou <em>por que</em> precisaria dos filtros, vou dar um exemplo usando meu site feito em ruby, o emprestei.com.</p>
<p>O emprestei é um site onde as pessoas anotam seus empréstimos. Então, em todas as páginas do site, eu precisava exibir uma contagem atualizada de quantas coisas do usuário estão emprestadas. Se eu colocasse o código de contagem de empréstimos em todas as páginas eu estaria fazendo uma repetição desnecessária de código e ignorando o conceito de DRY do Rails.</p>
<p>Qual a solução? Eu criei um <strong>before_filter</strong> que chama o método common_tasks (tarefas rotineiras), e neste método eu coloquei o código de contagem de empréstimos. Pronto, agora eu tenho o código em um único lugar, mas que será executado em todas as páginas que o usuário entrar.</p>
<p>Neste mesmo filtro do emprestei eu também usei uma exceção. Havia uma página que não teria uma contagem de empréstimos, que é a página dos usuários que não estão logados no sistema. Para não tentar contar empréstimos de um usuário que não estava no sistema, adicionei um except no meu filtro.</p>
<p>Evite, sempre, repetição do mesmo código. Se o código está apenas em um lugar, é mais fácil corrigir os erros e realizar mudanças com maior rapidez. Afinal, no nosso ramo, existe uma máxima que é muito válida: <em>tempo é dinheiro!</em></p>
<p><strong>Se interessou? <a href="http://lucrandonarede.com/jc/p/5749/215/ruby%20rails" rel="nofollow" >Compre agora mesmo um livro de Ruby on Rails com o menor preço!</a></strong></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://leonardobighi.com/ruby/13/evite-repeticao-de-codigo-no-ruby-on-rails/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saiba mais sobre o ruby</title>
		<link>http://leonardobighi.com/ruby/8/saiba-mais-sobre-o-ruby</link>
		<comments>http://leonardobighi.com/ruby/8/saiba-mais-sobre-o-ruby#comments</comments>
		<pubDate>Thu, 20 Sep 2007 08:51:27 +0000</pubDate>
		<dc:creator>Bighi</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://leonardobighi.com/ruby/8/saiba-mais-sobre-o-ruby</guid>
		<description><![CDATA[Neste blog vocês me verão passar a maior parte do meu tempo falando mesmo é sobre a linguagem de programação chamda Ruby, e seu principal framework: Ruby On Rails. Isto porque esta é a minha linguagem preferida, e estou completamente apaixonado por ela.
Recentemente, um amigo muito talentoso na área de programação web escreveu um extenso [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Neste blog vocês me verão passar a maior parte do meu tempo falando mesmo é sobre a linguagem de programação chamda Ruby, e seu principal framework: Ruby On Rails. Isto porque esta é a minha linguagem preferida, e estou completamente apaixonado por ela.</p>
<p>Recentemente, um amigo muito talentoso na área de programação web escreveu um extenso post em seu blog explicando <a href="http://www.elomarns.com/blog/?p=8" rel="nofollow"  title="Por Que Não?">tudo que você precisa saber sobre Ruby</a>, e este post realmente vale a pena ser lido.</p>
<p>Ele fala das linguagens de programação no passado, dá uma visão técnica do ruby, explica a filosofia por trás da linguagem, mostra como ela está no brasil e no mundo, e ainda tem a coragem de falar abertamente sobre suas principais desvantagens.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://leonardobighi.com/ruby/8/saiba-mais-sobre-o-ruby/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
