<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>/* CODIFICANDO */</title>
	<atom:link href="http://cassiomarques.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cassiomarques.wordpress.com</link>
	<description>Relatos de um programador em contínua aprendizagem.</description>
	<lastBuildDate>Tue, 10 Nov 2009 21:33:51 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='cassiomarques.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/c2c80e9a0e8a4f2908ae7bc835557647?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>/* CODIFICANDO */</title>
		<link>http://cassiomarques.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cassiomarques.wordpress.com/osd.xml" title="/* CODIFICANDO */" />
		<item>
		<title>Como criar gems que instalam executáveis na sua máquina</title>
		<link>http://cassiomarques.wordpress.com/2009/11/11/como-criar-gems-que-instalam-executaveis-na-sua-maquina/</link>
		<comments>http://cassiomarques.wordpress.com/2009/11/11/como-criar-gems-que-instalam-executaveis-na-sua-maquina/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 21:30:52 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[jeweler]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=346</guid>
		<description><![CDATA[Precisei criar uma gem que gerasse um executável no ambiente, sendo possível assim executar a biblioteca como um utilitário de linha de comando. Encontrei muito pouca documentação sobre como fazer isso, então vou deixar aqui caso seja útil para mais alguém.
O segredo é manter uma pasta bin dentro da estrutura de diretórios da sua gem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=346&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Precisei criar uma gem que gerasse um executável no ambiente, sendo possível assim executar a biblioteca como um utilitário de linha de comando. Encontrei muito pouca documentação sobre como fazer isso, então vou deixar aqui caso seja útil para mais alguém.</p>
<p>O segredo é manter uma pasta <strong>bin</strong> dentro da estrutura de diretórios da sua gem e colocar ali dentro os arquivos que você deseja que se tornem executáveis após a instalação da gem. Você deve salvar estes arquivos sem a extensão .rb, caso contrário terá que escrever .rb na linha de comando também para inicializar o programa. Em sistemas POSIX você pode criar arquivos executáveis e usar o &#8220;shebang&#8221; para instruir o shell sobre qual programa deve ser utilizado para executar o conteúdo do arquivo. Assim, basta adicionar a seguinte linha ao início do arquivo:</p>
<p><strong>#! /usr/bin/env ruby</strong></p>
<p>Após criar seu arquivo dentro de <strong>bin</strong>, basta adicionar o mesmo como um executável à sua gemspec. Estou usando o <a href="http://github.com/technicalpickles/jeweler">Jeweler</a> para criar minhas gems, então tudo o que preciso fazer é gerar minha gemspec usando a seguinte raketask que o arquivo será criado corretamente:</p>
<p><strong>rake gemspec</strong></p>
<p>Isso vai criar um arquivo gemspec contendo a seguinte linha:</p>
<pre class="brush: ruby;">
Gem::Specification.new do |s|
  ...
  s.executables = [&quot;bla&quot;, &quot;ble&quot;, &quot;bli&quot;]
  ...
end
</pre>
<p>Onde bla, ble, bli são arquivos dentro de <strong>bin</strong> que devem se transformar em executáveis após a instalação da gem. Quando sua gem for instalada, estes arquivos será copiados para dentro de <strong>/usr/bin</strong> e receberão permissão para serem executados.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/346/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/346/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/346/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/346/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/346/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=346&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/11/11/como-criar-gems-que-instalam-executaveis-na-sua-maquina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Palestra sobre Ruby on Rails na FAPI</title>
		<link>http://cassiomarques.wordpress.com/2009/10/26/palestra-sobre-ruby-on-rails-na-fapi/</link>
		<comments>http://cassiomarques.wordpress.com/2009/10/26/palestra-sobre-ruby-on-rails-na-fapi/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 19:09:54 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[fapi]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=342</guid>
		<description><![CDATA[Nesta quarta-feira dia 28/10/09, às 19:30h vou falar um pouco sobre Ruby on Rails na Faculdade de Pindamonhanga, durante a Jornada Acadêmica de Sistemas de Informação.
No ano passado apresentei um mini-curso sobre Ruby lá e foi bem bacana, espero me divertir e poder apresentar um pouco do Rails aos alunos, professores e outras pessoas interessadas.
Se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=342&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Nesta quarta-feira dia 28/10/09, às 19:30h vou falar um pouco sobre Ruby on Rails na <a href="http://www.fapi.br/">Faculdade de Pindamonhanga</a>, durante a <a href="http://www.fapi.br/index.php?pag=jasi2009">Jornada Acadêmica de Sistemas de Informação</a>.<br />
No ano passado apresentei um mini-curso sobre Ruby lá e foi bem bacana, espero me divertir e poder apresentar um pouco do Rails aos alunos, professores e outras pessoas interessadas.</p>
<p>Se você mora no Vale do Paraíba ou perto e quer ouvir um pouco sobre Rails, não deixe de ir!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/342/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=342&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/10/26/palestra-sobre-ruby-on-rails-na-fapi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Economize tempo e mantenha o foco ao rodar seus testes</title>
		<link>http://cassiomarques.wordpress.com/2009/10/07/economize-tempo-e-mantenha-o-foco-ao-rodar-seus-testes/</link>
		<comments>http://cassiomarques.wordpress.com/2009/10/07/economize-tempo-e-mantenha-o-foco-ao-rodar-seus-testes/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 18:06:23 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[cucumber]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=338</guid>
		<description><![CDATA[Testar é bom. Esperar os testes rodarem, não. Quando um teste específico falha, o ideal é rodar apenas esse teste e não toda a suíte de testes novamente. Depois que esse cara estiver passando, ai sim rodamos tudo, para termos certeza de que nada mais quebrou. Além disso, se você estiver escrevendo testes para uma [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=338&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Testar é bom. Esperar os testes rodarem, não. Quando um teste específico falha, o ideal é rodar apenas esse teste e não toda a suíte de testes novamente. Depois que esse cara estiver passando, ai sim rodamos tudo, para termos certeza de que nada mais quebrou. Além disso, se você estiver escrevendo testes para uma app Rails, sabe que sempre que você faz <strong>rake spec</strong> todo o seu banco é recarregado. Ok, legal&#8230; mas e se você quiser rodar apenas um arquivo de specs onde tudo é feito com mocks/stubs e não há acesso ao banco? Porque esperar todo o banco ser carregado?</p>
<p>Seguem abaixo algumas dicas para agilizar a execução dos seus testes.</p>
<h3>Para o Rspec</h3>
<p>Rodar apenas um arquivo (carregando o banco de teste):<br />
<strong><br />
  rake spec SPEC=[caminho para o arquivo]_spec.rb<br />
</strong></p>
<p>Rodar apenas um arquivo (sem carregar o banco, útil por exemplo para rodar specs de controllers/helpers quando utiliza-se mocks/stubs)<br />
<strong><br />
  spec [caminho para o arquivo]_spec.rb<br />
</strong></p>
<p>Rodar apenas um teste específico dentro do seu arquivo (10 é o número da linha onde se encontra o bloco &#8216;it&#8217; que você quer executar. Funciona de forma idêntica caso você use o comando &#8217;spec&#8217; ao invés de &#8216;rake&#8217;)<br />
<strong><br />
  rake spec SPEC=[caminho para o arquivo]_spec.rb:10<br />
</strong></p>
<h3>Para o Cucumber</h3>
<p>Rodar apenas um arquivo<br />
<strong><br />
  rake features FEATURE=features/[seu arquivo].feeature<br />
</strong></p>
<p>Rodar apenas um cenário (10 é a linha onde começa a declaração do cenário)<br />
<strong><br />
  rake features FEATURE=features/[seu arquivo].feature:10<br />
</strong></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/338/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/338/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/338/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/338/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/338/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/338/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/338/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/338/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/338/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/338/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=338&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/10/07/economize-tempo-e-mantenha-o-foco-ao-rodar-seus-testes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>6o Encontro do Guru-SP &#8211; Mesa redonda sobre testes automatizados</title>
		<link>http://cassiomarques.wordpress.com/2009/09/25/6o-encontro-do-guru-sp-mesa-redonda-sobre-testes-automatizados/</link>
		<comments>http://cassiomarques.wordpress.com/2009/09/25/6o-encontro-do-guru-sp-mesa-redonda-sobre-testes-automatizados/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 02:41:00 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[guru-sp]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=326</guid>
		<description><![CDATA[




Neste sábado, dia 26 de setembro, vai rolar o 6o encontro do Guru-SP, o Grupo de Usuários Ruby de São Paulo. O evento vai acontecer no auditório do prédio da GoNow.  Tive o prazer de ser convidado para participar da mesa como debatedor, espero não fazer muito feio no meio de todos os feras [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=326&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div class="mceTemp">
<dl class="wp-caption alignleft">
<dt class="wp-caption-dt"><a href="http://cassiomarques.files.wordpress.com/2009/09/roundtableknights1.jpg"><img class="size-medium wp-image-329" title="RoundTableKnights" src="http://cassiomarques.files.wordpress.com/2009/09/roundtableknights1.jpg?w=300&#038;h=232" alt="RoundTableKnights" width="300" height="232" /></a></dt>
</dl>
</div>
<p>Neste sábado, dia 26 de setembro, vai rolar o <a href="http://www.rubyinside.com.br/6o-encontro-do-guru-sp-fechados-os-detalhes-2217">6o encontro</a> do <a href="http://www.guru-sp.org/">Guru-SP</a>, o Grupo de Usuários Ruby de São Paulo. O evento vai acontecer no auditório do prédio da <a href="http://www.gonow.com.br/">GoNow</a>.  Tive o prazer de ser convidado para participar da mesa como debatedor, espero não fazer muito feio no meio de todos os <a href="http://guru-sp.com/index.php/Sexto_Encontro#Debatedores">feras</a> que estarão participando comigo :)</p>
<p>Vamos fazer um debate sobre diversos tópicos relacionados a utilização de testes automatizados, TDD, BDD e tudo mais. Acho que será uma ótima oportunidade para aprender e mostrar as diversas vantagens que da utilização de testes.</p>
<p>Mais informações no <a href="http://www.rubyinside.com.br/6o-encontro-do-guru-sp-fechados-os-detalhes-2217">rubyinside.com.br</a> e no site do <a href="http://guru-sp.com/index.php/Sexto_Encontro">Guru-SP</a>.</p>
<p>Vejo vocês por lá!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/326/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=326&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/09/25/6o-encontro-do-guru-sp-mesa-redonda-sobre-testes-automatizados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>

		<media:content url="http://cassiomarques.files.wordpress.com/2009/09/roundtableknights1.jpg?w=300" medium="image">
			<media:title type="html">RoundTableKnights</media:title>
		</media:content>
	</item>
		<item>
		<title>Dica rápida: Testando igualdade entre arrays de models</title>
		<link>http://cassiomarques.wordpress.com/2009/09/23/dica-rapida-testando-igualdade-entre-arrays-de-models/</link>
		<comments>http://cassiomarques.wordpress.com/2009/09/23/dica-rapida-testando-igualdade-entre-arrays-de-models/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 22:45:51 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[set]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=321</guid>
		<description><![CDATA[É comum testarmos métodos que retornam arrays de models. Um bom exemplo disso é quando testamos named_scopes (eu gosto de testar named_scopes pra valer, batendo no banco e não somente usando macros como as do Remarkable). A grande pagadinha é que a ordem na qual os objetos serão retornados do banco é totalmente imprevisível, a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=321&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>É comum testarmos métodos que retornam arrays de models. Um bom exemplo disso é quando testamos named_scopes (eu gosto de testar named_scopes pra valer, batendo no banco e não somente usando macros como as do Remarkable). A grande pagadinha é que a ordem na qual os objetos serão retornados do banco é totalmente imprevisível, a não ser que seu método já traga os itens ordenados por padrão. Assim, testes como o exemplo abaixo podem hora passar, hora não:</p>
<pre class="brush: ruby;">
describe &quot;.active&quot; do
  before :each do
    @user1 = User.make :active =&gt; true
    @user2 = User.make :active =&gt; false
    @user3 = User.make :active =&gt; true
    @user4 = User.make :active =&gt; false
  end

  it &quot;retorna somente usuários ativos&quot; do
    User.active.should == [@user1, @user4]
  end
end
</pre>
<p>Uma maneira segura de testar isso é usar a classe <a href="http://www.ruby-doc.org/core/classes/Set.html">Set</a>, da biblioteca padrão do Ruby. Um Set representa um conjunto matemático, sendo que a igualdade entre dois conjuntos existe quando ambos os conjuntos possuem exatamente os mesmos elementos, independentemente da ordenação. Assim, podemos reescrever a linha da spec que faz a asserção e termos certeza de que ele terá sempre o mesmo comportamento:</p>
<pre class="brush: ruby;">
User.active.to_set.should == Set.new([@user1, @user4])
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/321/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/321/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=321&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/09/23/dica-rapida-testando-igualdade-entre-arrays-de-models/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Rails Summit 2009</title>
		<link>http://cassiomarques.wordpress.com/2009/09/16/rails-summit-2009/</link>
		<comments>http://cassiomarques.wordpress.com/2009/09/16/rails-summit-2009/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 20:05:02 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[railssummit]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=313</guid>
		<description><![CDATA[Ok, acho que a maioria das pessoas que costuma ler o blog já deve estar sabendo que este ano teremos mais uma edição do Rails Summit. Para quem não conhece, esse é maior evento da América Latina sobre Rails. Ano passado eu fui e posso dizer que foi um evento excelente.
Inicialmente eu não ia escrever [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=313&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div class="wp-caption alignleft" style="width: 130px"><a href="http://railssummit.locaweb.com.br/"><img alt="Rails Summit" src="http://railssummit.locaweb.com.br/images/banners/120x240.gif" width="120" height="240" /></a><p class="wp-caption-text">Rails Summit</p></div>
<p>Ok, acho que a maioria das pessoas que costuma ler o blog já deve estar sabendo que este ano teremos mais uma edição do <a href="http://www.railssummit.com.br/">Rails Summit</a>. Para quem não conhece, esse é maior evento da América Latina sobre Rails. Ano passado eu fui e posso dizer que foi um evento excelente.<br />
Inicialmente eu não ia escrever nada específico sobre o evento aqui, mas estão sorteando dois ingressos este ano e tudo o que eu precisei fazer para concorrer foi: a) Seguir o @railssmummit no Twitter, o que eu já fazia e b) Escrever este post.</p>
<p>Seria legal se eu ganhasse um desses ingressos e pudesse economizar 400 mangos :)</p>
<p>Para quem for, vejo vocês por lá!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=313&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/09/16/rails-summit-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>

		<media:content url="http://railssummit.locaweb.com.br/images/banners/120x240.gif" medium="image">
			<media:title type="html">Rails Summit</media:title>
		</media:content>
	</item>
		<item>
		<title>Testando sweepers com Rspec</title>
		<link>http://cassiomarques.wordpress.com/2009/09/10/testando-sweepers-com-rspec/</link>
		<comments>http://cassiomarques.wordpress.com/2009/09/10/testando-sweepers-com-rspec/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 20:49:58 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[sweeper]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=307</guid>
		<description><![CDATA[O problema
Quando usamos caching no Rails, precisamos criar também algum mecanismo para expirar esses caches quando os mesmos não forem mais válidos. Geralmente um cache não é mais válido quando o recurso exibido teve seu estado alterado na aplicação. Por exemplo: Você tem um blog e usa caching para não ter que ir ao banco [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=307&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>O problema</h2>
<p>Quando usamos caching no Rails, precisamos criar também algum mecanismo para expirar esses caches quando os mesmos não forem mais válidos. Geralmente um cache não é mais válido quando o recurso exibido teve seu estado alterado na aplicação. Por exemplo: Você tem um blog e usa caching para não ter que ir ao banco toda vez que os posts forem exibidos. Entretanto, se um post for atualizado, seu respectivo cache deve ser expirado, caso contrário as alterações nunca serão visualizadas.</p>
<p>Um mecanismo bastante utilizado para expirar caches são os <a href="http://guides.rubyonrails.org/caching_with_rails.html#sweepers">sweepers</a>. Sweepers são objetos compartilhados, muito semelhantes aos observers do ActiveRecord (na verdade um Sweeper é uma subclasse de Observer), que podem ser registrados nos controllers de forma semelhante a filtros, para observar alterações em models e expirar os respectivos caches.</p>
<p>O problema que eu tive foi que queria testar um sweeper com meu querido Rspec. Mais especificamente, um sweeper que expirava um fragment cache, que é um cache para apenas um pedaço da minha página. Não achei nada pronto pra isso, nenhuma facilidade. Resolvi coçar minha própria coceira e criar alguma coisa que pudesse me ajudar. </p>
<p>Não vou explicar aqui como funciona caching no Rails, nem como usar Sweepers. Você pode pesquisar mais sobre isso <a href="http://guides.rubyonrails.org/caching_with_rails.html">aqui</a>.</p>
<p>Vamos seguir utilizando o velho e muito mais que manjado exemplo da Blog App. Vamos considerar que a página inicial da nossa app possui uma área com os posts mais recentes, sobre a qual foi aplicado fragment caching. Para expirar este cache, poderiamos ter um sweeper mais ou menos assim:</p>
<pre class="brush: ruby;">
class PostSweeper &lt; ActionController::Caching::Sweeper
  observe Post

  def expire_post(post)
    expire_fragment &quot;post_#{post.id}&quot;
  end

  alias_method :after_save, :expire_post
  alias_method :after_destroy, :expire_post
end
</pre>
<p>Como testar isso? Como saber que o fragmento correto é expirado quando alteramos o registro no banco? </p>
<h2>A solução</h2>
<p>Para testar esse sweeper, criei um controller &#8220;de teste&#8221;, sem utilidade para a aplicação. Porque eu não usei um controller já existente? Porque eu não queria criar dependência entre os testes. Não gosto da idéia de ter que depender de uma classe diferente da que está sendo testada para que meu teste passe, pelo menos não se eu puder evitar.<br />
Usei um nome diferente de PostsController, para não redefinir a classe durante os testes, isso poderia causar problemas. O código abaixo pode ser definido no próprio arquivo da spec, logo acima do seu bloco <strong>describe</strong> principal, por exemplo.</p>
<pre class="brush: ruby;">
class FooBarsController &lt; ApplicationController
  cache_sweeper :post_sweeper

  def update
    @post = Post.find(params[:id])
    @post.update_attributes :contents, &quot;hello world!&quot;
  end

  def destroy
    @post = Post.find(params[:id])
    @post.destroy
  end
end

describe PostSweeper do
  #...
end
</pre>
<p>O próximo passo é criar uma forma de habilitar o caching em nossos testes. Por padrão ele fica desabilitado no ambiente de teste, para tornar tudo mais rápido. Vamos ter que habilitá-lo se quisermos que nosso teste funcione. Aqui habilito o caching somente para a spec em questão, sem alterar o comportamento para os demais testes da nossa aplicação. Para isso, criei um helper:</p>
<pre class="brush: ruby;">
def performing_cache
  ActionController::Base.perform_caching = true
  yield
  ActionController::Base.perform_caching = false
end
</pre>
<p>A idéia para o teste é invocar as actions do FooBarsController e ver se o cache é expirado quando o post é atualizado ou removido. Simples né? Hum&#8230; depende&#8230; como vamos invocar as actions? Como este é uma spec para o sweeper e não para o controller, não podemos simplesmente fazer algo como </p>
<pre class="brush: ruby;">
  put :update, :id =&gt; &quot;1&quot;
</pre>
<p>como fariamos em um teste de controller. Nossa spec não saberia qual controller é dono da action <strong>update</strong> em questão. Vamos precisar cavar um pouco e descobrir outra forma:</p>
<pre class="brush: ruby;">
describe PostSweeper do
  before :all do
    @app = ActionController::Integration::Session.new
    ActionController::Routing::Routes.draw do |map|
      map.resources :foo_bars, :only =&gt; [:update, :destroy]
    end
  end

  #...
end
</pre>
<p>No código acima criamos a variável de instância <strong>@app</strong>. Ela representa uma app Rails, sobre a qual podemos invocar actions. Criamos também uma rota para nosso controller, de forma a podermos usar URIs para as actions.</p>
<p>Agora precisamos criar um matcher do Rspec para verificar se o fragmento está sendo devidamente expirado. Fiz de forma bem simples, poderia ser melhorado. Basicamente o que faço aqui é verificar se o cache store do controller de teste recebe uma mensagem pedindo para que o fragment cache seja expirado.</p>
<pre class="brush: ruby;">
Spec::Matchers.define :expire_fragment do |fragment, options|
  match do |controller|
    controller.cache_store.should_receive(:delete).with(&quot;views/#{fragment}&quot;, options)
  end
end
</pre>
<p>Ok, precisei dar uma fuçadinha no código do Rails para descobrir como fazer isso :)</p>
<p>Agora juntando tudo, podemos escrever uma spec assim:</p>
<pre class="brush: ruby;">
describe PostSweeper do
  before :all do
    @app = ActionController::Integration::Session.new
    ActionController::Routing::Routes.draw do |map|
      map.resources :foo_bars, :only =&gt; [:update, :destroy]
    end
  end

  before :each do
    @post = Post.create(:contents =&gt; &quot;blablabla&quot;)
  end

  it &quot;deve limpar o cache quando o post for atualizado&quot; do
    FooBarsController.should expire_fragment(&quot;post_#{@post.id}&quot;, nil)
    performing_cache do
      @app.put(&quot;/foo_bars/#{@post.id}&quot;)
    end
  end

  it &quot;deve limpar o cache quando o post for removido&quot; do
    FooBarsController.should expire_fragment(&quot;post_#{@post.id}&quot;, nil)
    performing_cache do
      @app.delete(&quot;/foo_bars/#{@post.id}&quot;)
    end
  end
end
</pre>
<p>Precisamos passar nil como segundo argumento para o matcher, porque ali iriam as opções para expirar o cache, as quais não estamos usando. Preciso pensar em uma forma melhor de fazer isso depois, para passar um segundo argumento somente quando ele for utilizado. Com Ruby 1.9 isso poderia ser resolvido facilmente, pois argumentos de blocos aceitam valores default, como acontece com argumentos de métodos.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/307/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=307&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/09/10/testando-sweepers-com-rspec/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Verificando atributos dos elementos da página com Webrat</title>
		<link>http://cassiomarques.wordpress.com/2009/07/11/verificando-atributos-dos-elementos-da-pagina-com-webrat/</link>
		<comments>http://cassiomarques.wordpress.com/2009/07/11/verificando-atributos-dos-elementos-da-pagina-com-webrat/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 01:28:40 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[webrat]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=302</guid>
		<description><![CDATA[Algumas vezes você vai precisar verificar os atributos dos elementos html de uma página da sua aplicação com Cucumber + Webrat. Seria uma forma menos problemática de fazer testes de view, ao invés de usar o Rspec para isso (eu definitivamente não testo views com o Rspec e não aconselho ninguém a fazê-lo).
O Webrat é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=302&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Algumas vezes você vai precisar verificar os atributos dos elementos html de uma página da sua aplicação com Cucumber + Webrat. Seria uma forma menos problemática de fazer testes de view, ao invés de usar o Rspec para isso (eu definitivamente não testo views com o Rspec e não aconselho ninguém a fazê-lo).</p>
<p>O Webrat é capaz de localizar seus elementos na view das seguintes formas: a partir de seu id, a partir do valor de atributo name, por uma string xpath ou pelo label que indica o elemento na página. Eu gosto bastante de usar a última opção, pois torna os testes mais legíveis. Quando este elemento é encontrado na página, o Webrat o retornará e então poderemos fazer certas verificações sobre ele, incluindo analisar os valores de seus atributos.</p>
<p>Por exemplo, podemos verificar se um campo de um formulário está desabilitado (ou seja, se o atributo &#8216;disabled&#8217; está presente)</p>
<pre class="brush: ruby;">
Then /^the field &quot;([^\&quot;]*)&quot; should be disabled$/ do |label|
  field_labeled(label).element.attribute('disabled').to_s.should == &quot;disabled&quot;
end
</pre>
<p>O método <strong>field_labeled</strong> encontra um elemento a partir de seu label. Sobre este elemento podemos verificar o hash <strong>attributes</strong>, o qual guarda o valor de todos os atributos presentes na tag html em questão.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/302/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=302&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/07/11/verificando-atributos-dos-elementos-da-pagina-com-webrat/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Testar atributos do tipo datetime com o Rspec</title>
		<link>http://cassiomarques.wordpress.com/2009/07/03/testar-atributos-do-tipo-datetime-com-o-rspec/</link>
		<comments>http://cassiomarques.wordpress.com/2009/07/03/testar-atributos-do-tipo-datetime-com-o-rspec/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 20:04:06 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=298</guid>
		<description><![CDATA[Você já tentou usar o Rspec para testar se o timestamp gravado em um campo datetime é igual a uma determinada data/horário? O código abaixo possivelmente irá falhar miseravelmente:

@blabla.update_attributes(:foo =&#62; &#34;bar)
@blabla.updated_at.should == Time.now

o Time.now é bem preciso e vai pegar várias casas na faixa dos milissegundos, e isso pode gerar alguma diferença entre o retorno [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=298&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Você já tentou usar o Rspec para testar se o timestamp gravado em um campo datetime é igual a uma determinada data/horário? O código abaixo possivelmente irá falhar miseravelmente:</p>
<pre class="brush: ruby;">
@blabla.update_attributes(:foo =&gt; &quot;bar)
@blabla.updated_at.should == Time.now
</pre>
<p>o Time.now é bem preciso e vai pegar várias casas na faixa dos milissegundos, e isso pode gerar alguma diferença entre o retorno de Time.now quando a coluna foi atualizada no banco e quando você realiza a asserção no teste. Uma solução para o problema é fazer:</p>
<pre class="brush: ruby;">
@blabla.updated_at.should be_close(Time.now, 1.second)
</pre>
<p>Esse teste passará para qualquer timestamp com uma diferença de +- 1 segundo em relação ao retorno do Time.now no momento da asserção. Altere esse delta T como desejar :).</p>
<p>Essa solução também é indicada para testar valores numéricos de ponto flutuante.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/298/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=298&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/07/03/testar-atributos-do-tipo-datetime-com-o-rspec/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Booleanize 0.2 com configuração global</title>
		<link>http://cassiomarques.wordpress.com/2009/05/25/booleanize-0-2-com-configuracao-global/</link>
		<comments>http://cassiomarques.wordpress.com/2009/05/25/booleanize-0-2-com-configuracao-global/#comments</comments>
		<pubDate>Sun, 24 May 2009 23:28:45 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=294</guid>
		<description><![CDATA[Dei uma atualizada no booleanize e agora ele aceita configuração global. O que isso quer dizer? Significa que se você usa quase sempre as mesmas strings para true ou false, não vai mais precisar ficar duplicando o código em todos os models. Basta adicionar algo como isso no seu environment.rb:

Booleanize::Config.default_strings :true =&#62; &#34;Yes&#34;, :false =&#62; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=294&subd=cassiomarques&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Dei uma atualizada no <a href="http://github.com/cassiomarques/booleanize">booleanize</a> e agora ele aceita configuração global. O que isso quer dizer? Significa que se você usa quase sempre as mesmas strings para <strong>true</strong> ou <strong>false</strong>, não vai mais precisar ficar duplicando o código em todos os models. Basta adicionar algo como isso no seu <strong>environment.rb</strong>:</p>
<pre class="brush: ruby;">
Booleanize::Config.default_strings :true =&gt; &quot;Yes&quot;, :false =&gt; &quot;No&quot;
</pre>
<p>Assim, toda vez que você usar <strong>booleanize :some_boolean_attr</strong> nos seus models, não será precisa especificar quais strings deverão ser usadas. Mas se em um caso específico você precisar usar outras strings, basta declarar da forma usual, pois configurações locais têm maior precedência que as globais.</p>
<p>É possível inclusive utilizar o booleanize com internacionalização. Coloque algo como isso no seu arquivo <strong>locale/blabla.yml</strong></p>
<pre class="brush: ruby;">
booleanize:
  true_string: Sim
  false_string: Não
</pre>
<p>E no seu <strong>environment.rb</strong>:</p>
<pre class="brush: ruby;">
Booleanize::Config.default_strings :true =&gt; I18n.t(&quot;booleanize.true_string&quot;), :false =&gt; I18n.t(&quot;booleanize.false_string&quot;)
</pre>
<p>E agora é possível instalar o booleanize como um plugin ou como uma gem (créditos para o <a href="http://josevalim.blogspot.com/">José Valim</a>). Basta fazer: <strong>sudo gem install cassiomarques-booleanize</strong></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/294/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&blog=962386&post=294&subd=cassiomarques&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2009/05/25/booleanize-0-2-com-configuracao-global/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
	</channel>
</rss>