<?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>jésus lopes &#187; gem</title>
	<atom:link href="http://jlopes.zigotto.com.br/tag/gem/feed" rel="self" type="application/rss+xml" />
	<link>http://jlopes.zigotto.com.br</link>
	<description>@zigotto &#124; ruby &#124; rails &#124; desenvolvimento &#124; software</description>
	<lastBuildDate>Sat, 01 May 2010 19:46:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Acesse a API do Yahoo! Meme com Ruby</title>
		<link>http://jlopes.zigotto.com.br/projetos/acesse-a-api-do-yahoo-meme-com-ruby</link>
		<comments>http://jlopes.zigotto.com.br/projetos/acesse-a-api-do-yahoo-meme-com-ruby#comments</comments>
		<pubDate>Sat, 01 May 2010 19:46:03 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[projetos]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[brhackday]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yql]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=193</guid>
		<description><![CDATA[
A API do Meme pode user acessada utilizando o YQL (Yahoo Query Language) que
permite usar uma sintaxe similar ao SQL para recuperar os dados do Meme, um exemplo seria:
SELECT * FROM meme.info WHERE name='jtadeulopes';
Clique aqui e veja o resultado dentro do console.
Diante disso, durante o Yahoo! Open Hack Day Brasil 2010 resolvi escrever uma gem [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://jlopes.zigotto.com.br/wp-content/uploads/2010/05/yahoo-meme-01.jpg" alt="" /></p>
<p>A <a href="http://developer.yahoo.com/meme/guide/">API do Meme</a> pode user acessada utilizando o <a href="http://developer.yahoo.com/yql/" target="_blank">YQL (Yahoo Query Language)</a> que<br />
permite usar uma sintaxe similar ao SQL para recuperar os dados do Meme, um exemplo seria:</p>
<pre class="rails"><code>SELECT * FROM meme.<span class="me1">info</span> WHERE name=<span class="st0">'jtadeulopes'</span>;</code></pre>
<p><a href="https://developer.yahoo.com/yql/console/?q=SELECT%20*%20FROM%20meme.info%20WHERE%20name%3D%27jtadeulopes%27%3B" target="blank">Clique aqui e veja o resultado dentro do console.</a></p>
<p>Diante disso, durante o <a href="http://openhackbrazil.pbworks.com/" target="_blank">Yahoo! Open Hack Day Brasil 2010</a> resolvi escrever uma gem para acessar a API do Meme utilizando Ruby.</p>
<p>O desenvolvimento ainda esta no início, mas já é possível realizar as seguintes ações:</p>
<ul>
<li>Buscar um usuário</li>
<li>Followers e Following</li>
<li>Buscar posts</li>
<li>Busca os posts mais populares do momento</li>
</ul>
<h3>Instalando</h3>
<p>A instalação é bem simples, basta executar o comando</p>
<pre class="rails"><code>sudo gem install meme</code></pre>
<h3>Usando</h3>
<h4>Localizando um usuário</h4>
<p>É possível localizar um usuário e suas informações desta maneira</p>
<pre class="rails"><code>user = <span class="re2">Meme::Info</span>.<span class="me1">find</span><span class="br0">(</span><span class="st0">'jtadeulopes'</span><span class="br0">)</span>

user.<span class="me1">name</span>
=&gt; <span class="st0">"jtadeulopes"</span>

user.<span class="me1">description</span>
=&gt; <span class="st0">"software developer"</span>

<span class="co1"># outros métodos disponíveis:</span>

user.<span class="me1">avatar_url</span>  <span class="co1"># URL do avatar.</span>
user.<span class="me1">title</span>       <span class="co1"># Breve descrição do meme do usuário.</span>
user.<span class="me1">guid</span>        <span class="co1"># O GUID do usuário.</span>
user.<span class="me1">language</span>    <span class="co1"># Idioma selecionado pelo usuario no Meme.</span>
user.<span class="me1">url</span>         <span class="co1"># URL do Meme do usuário.</span>
user.<span class="me1">followers</span>   <span class="co1"># Seguidores do usuário.</span>
user.<span class="me1">following</span>   <span class="co1"># Quem o usuário segue.</span></code></pre>
<h4>Buscando posts</h4>
<pre class="rails"><code>posts = <span class="re2">Meme::Post</span>.<span class="me1">find</span><span class="br0">(</span><span class="st0">'brhackday'</span><span class="br0">)</span>

post = posts.<span class="kw5">first</span>

post.<span class="me1">content</span>
=&gt; <span class="st0">"RT @codepo8: And I am off - plane leaves BR for London. Thanks to everybody I met at #brhackday..."</span>

<span class="co1"># Cada post possui os métodos:</span>

post.<span class="me1">category</span>       <span class="co1"># Categoria do post.</span>
post.<span class="me1">timestamp</span>      <span class="co1"># Data de publicação.</span>
post.<span class="me1">guid</span>           <span class="co1"># GUID do usuário.</span>
post.<span class="me1">pubid</span>          <span class="co1"># ID de publicação do post.</span>
post.<span class="me1">url</span>	    <span class="co1"># URL do post.</span>
post.<span class="me1">repost_count</span>   <span class="co1"># Número de vezes que este post foi anunciado.</span>
post.<span class="me1">caption</span>        <span class="co1"># Legenda do post.</span>
post.<span class="me1">type</span>	    <span class="co1"># Tipo de mídia. Valores válidos são "text", "photo", "video" ou "audio".</span>
post.<span class="me1">content</span>        <span class="co1"># Conteúdo publicado.</span>
 </code></pre>
<p>Você pode especificar o tipo de mídia que deseja localizar, as opções são: <strong>photo</strong>, <strong>video</strong>, <strong>audio</strong> ou <strong>text</strong>.</p>
<p>Por padrão, o tipo <strong>text</strong> é assumido caso nenhum seja especificado.</p>
<pre class="rails"><code>posts = <span class="re2">Meme::Post</span>.<span class="me1">find</span><span class="br0">(</span><span class="st0">'meme rocks'</span>, <span class="re3">:type</span> =&gt; <span class="re3">:photo</span><span class="br0">)</span></code></pre>
<h4>Populares</h4>
<p>Retorna os 10 posts mais populares. Você pode definir o local que deseja pesquisar. Os valores suportados são <strong>&#8220;en&#8221;</strong> para Inglês, <strong>&#8220;es&#8221;</strong> para o espanhol,  <strong>&#8220;pt&#8221;</strong> para Português e <strong>&#8220;id&#8221;</strong> para Bahasa Indonésia.</p>
<p>Por padrão, o valor <strong>pt</strong> é assumido caso nenhum seja especificado</p>
<pre class="rails"><code>popular = <span class="re2">Meme::Post</span>.<span class="me1">popular</span>

popular.<span class="kw5">first</span>.<span class="me1">caption</span>
=&gt; <span class="st0">"Haha duvido que não vai repostar esse sorriso mais lindo ...."</span>

popular = <span class="re2">Meme::Post</span>.<span class="me1">popular</span><span class="br0">(</span><span class="st0">'id'</span><span class="br0">)</span>

popular.<span class="kw5">first</span>.<span class="me1">caption</span>
=&gt; <span class="st0">"Kemarin dia menawarkan cinta, hmm sayang harganya terlalu mahal jadi aku putuskan untuk tak memilikinya..."</span>
 </code></pre>
<h3>Quer contribuir?</h3>
<p>O projeto é open source e seu código fonte este no <a href="http://github.com/jtadeulopes/meme" target="_blank">Github</a>. Existe um <a href="http://wiki.github.com/jtadeulopes/meme/todo" target="_blank">TODO list</a> para um controle do que foi feito e o que ainda precisa ser implementado.</p>
<p>Qualquer dúvida, deixe um comentário!</p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/projetos/acesse-a-api-do-yahoo-meme-com-ruby/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Formulários com Formtastic</title>
		<link>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic</link>
		<comments>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic#comments</comments>
		<pubDate>Mon, 07 Sep 2009 03:15:58 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formtastic]]></category>
		<category><![CDATA[gem]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=124</guid>
		<description><![CDATA[
      Procurando uma alternativa para trabalhar com formulários no Rails, encontrei a gem Formtastic.
    

      O projeto é mantido por Justin French e José Valim, além de outras pessoas que ajudaram no projeto. Todo o código fonte esta no Github.
   [...]]]></description>
			<content:encoded><![CDATA[<p>
      Procurando uma alternativa para trabalhar com formulários no Rails, encontrei a gem <a href="http://github.com/justinfrench/formtastic/tree/master">Formtastic</a>.
    </p>
<p>
      O projeto é mantido por <a href="http://justinfrench.com/">Justin French</a> e <a href="http://github.com/josevalim">José Valim</a>, além de outras pessoas que ajudaram no projeto. Todo o código fonte esta no <a href="http://github.com/justinfrench/formtastic/tree/master">Github</a>.
    </p>
<p>
      Sem mais, vamos trabalhar =)
    </p>
<h4>Preparando o ambiente</h4>
<p>
      Para gerar os scaffolds e um layout básico vou usar a gem <a href="http://github.com/ryanb/nifty-generators/tree/master">Nifty Generators</a> do <a href="http://railscasts.com/">Ryan Bates</a>.
    </p>
<p>
      Instalando a gem nifty-generators:
    </p>
<pre>sudo gem install nifty-generators</code></pre>
<p>
      Criado a aplicação:
    </p>
<p>
      Pensando em acelerar um pouco o processo, criei um <a href="http://gist.github.com/181560.txt">template básico</a> e vamos criar a aplicação usando ele!
    </p>
<pre class="bash"><code>rails formtastic -m http://gist.github.com/<span class="nu0">181560</span>.txt
<span class="kw3">cd</span> formtastic</code></pre>
<p>
      Instalando a gem formtastic:
    </p>
<pre><code>sudo gem install justinfrench-formtastic</code></pre>
<p>
      Adicione no environment.rb:
    </p>
<pre class="rails"><code><span class="co1"># config/environment.rb</span>
config.<span class="me1">gem</span> <span class="st0">&quot;justinfrench-formtastic&quot;</span>, <span class="re3">:version</span> =&gt; <span class="st0">&quot;0.2.2&quot;</span>, <span class="re3">:lib</span> =&gt; <span class="st0">'formtastic'</span>, <span class="re3">:source</span>  =&gt; <span class="st0">'http://gems.github.com'</span></code></pre>
<p>
      Gerando um layout basicão:
    </p>
<pre><code>script/generate nifty_layout</code></pre>
<p>
      Pronto <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
<h4>Usando</h4>
<p>
      Como minha criatividade não permite algo diferente, vamos trabalhar com Produtos e Categorias.
    </p>
<p>
      Gerando o scaffold para Categorias:
    </p>
<pre><code>script/generate nifty_scaffold Category name:string status:boolean ! show</code></pre>
<p>
      Rode as migrações:
    </p>
<pre><code>rake db:migrate</code></pre>
<p>
      Se olharmos o código do formulário criado, teremos algo como:
    </p>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% <span class="kw5">form_for</span> <span class="re1">@category</span> <span class="kw1">do</span> |f| %&gt;
  &lt;%= f.<span class="me1">error_messages</span> %&gt;
  &lt;p&gt;
    &lt;%= f.<span class="me1">label</span> <span class="re3">:name</span> %&gt;&lt;br /&gt;
    &lt;%= f.<span class="kw5">text_field</span> <span class="re3">:name</span> %&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;%= f.<span class="me1">label</span> <span class="re3">:status</span> %&gt;&lt;br /&gt;
    &lt;%= f.<span class="kw5">check_box</span> <span class="re3">:status</span> %&gt;
  &lt;/p&gt;
  &lt;p&gt;&lt;%= f.<span class="me1">submit</span> <span class="st0">&quot;Submit&quot;</span> %&gt;&lt;/p&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
Visualizando o formulário:
</p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela02.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela02-300x89.png" alt="tela02" title="tela02" width="300" height="89" class="alignnone size-medium wp-image-129" /></a></p>
<p>
      Ok Jésus! Você falou, falou, mas cade o Formtastic?
    </p>
<p>
      Até agora não fizemos nada com ele. Experimente trocar o código gerado pelo scaffold pelo código abaixo:
    </p>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@category</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">inputs</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">buttons</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
      Somente isso? Vamos ver o formulário:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela03.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela03-300x97.png" alt="tela03" title="tela03" width="300" height="97" class="alignnone size-medium wp-image-131" /></a></p>
<p>
      Mas tudo esta muito estranho. Quero modificar e adicionar algumas informações como: <br/></p>
<ul>
<li>
      Separar em fieldsets diferentes os campos e botões
      </li>
<li>
      Colocar uma mensagem informativa abaixo do campo Name
      </li>
<li>
      Alterar o campo Status de checkbox para radio button.
      </li>
</ul>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@category</span> <span class="kw1">do</span> |form| %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:name</span>, <span class="re3">:hint</span> =&gt; <span class="st0">&quot;Example: food, books, electronics.&quot;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:status</span>, <span class="re3">:as</span> =&gt; <span class="re3">:radio</span> %&gt;
  &lt;% <span class="kw1">end</span> %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
  &lt;% <span class="kw1">end</span> %&gt;
&nbsp;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
      Podemos ter o controle de tudo! Veja como ficou:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela04.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela04-300x128.png" alt="tela04" title="tela04" width="300" height="128" class="alignnone size-medium wp-image-132" /></a></p>
<p>
      Vamos para o cadastro de Produtos, gerando o scaffold para o mesmo:
    </p>
<pre><code>script/generate nifty_scaffold Product category_id:integer name:string description:text price:decimal status:boolean</code></pre>
<pre><code>rake db:migrate</code></pre>
<p>
      Criando o relacionamento entre Produtos e Categorias:
    </p>
<pre class="rails"><code><span class="co1"># app/models/category.rb</span>
<span class="kw1">class</span> Category &lt; <span class="re2">ActiveRecord::Base</span>
&nbsp;
  <span class="kw5">has_many</span> <span class="re3">:products</span>
&nbsp;
  <span class="kw5">validates_presence_of</span> <span class="re3">:name</span>
  validates_inclusion_of <span class="re3">:status</span>, <span class="re3">:in</span> =&gt; <span class="br0">&#91;</span><span class="kw2">true</span>, <span class="kw2">false</span><span class="br0">&#93;</span>
&nbsp;
<span class="kw1">end</span>
&nbsp;
<span class="co1"># app/models/product.rb</span>
<span class="kw1">class</span> Product &lt; <span class="re2">ActiveRecord::Base</span>
&nbsp;
  <span class="kw5">belongs_to</span> <span class="re3">:category</span>
&nbsp;
  <span class="kw5">validates_presence_of</span> <span class="re3">:category</span>, <span class="re3">:name</span>, <span class="re3">:price</span>
  validates_inclusion_of <span class="re3">:status</span>, <span class="re3">:in</span> =&gt; <span class="br0">&#91;</span><span class="kw2">true</span>, <span class="kw2">false</span><span class="br0">&#93;</span>
&nbsp;
<span class="kw1">end</span></code></pre>
<p>
      Nosso formulário está assim:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela05.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela05-300x146.png" alt="tela05" title="tela05" width="300" height="146" class="alignnone size-medium wp-image-133" /></a></p>
<p>
      Não esta legal, vamos melhorar para: <br/></p>
<ul>
<li>
          Adicionar um select para escolher uma categoria.
        </li>
<li>
          Deixar o (*) somente nos campos obrigatórios.
        </li>
<li>
          Diminuir o tamanho do campo Price.
        </li>
<li>
          Alterar o campo Status de checkbox para select.
        </li>
</ul>
<pre class="rails"><code><span class="co1"># app/views/products/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:category</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:name</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:description</span>, <span class="re3">:required</span> =&gt; <span class="kw2">false</span>, <span class="re3">:input_html</span> =&gt; <span class="br0">&#123;</span>:rows =&gt; <span class="nu0">3</span><span class="br0">&#125;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:price</span>, <span class="re3">:input_html</span> =&gt; <span class="br0">&#123;</span>:<span class="kw5">size</span> =&gt; <span class="nu0">10</span><span class="br0">&#125;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:status</span>, <span class="re3">:as</span> =&gt; <span class="re3">:select</span> %&gt;
  &lt;% <span class="kw1">end</span> -%&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
  &lt;% <span class="kw1">end</span> -%&gt;
&nbsp;
&lt;% <span class="kw1">end</span> -%&gt;</code></pre>
<p>
  Olha ai como ele ficou:
  </p>
<p>  <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela06.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela06-300x134.png" alt="tela06" title="tela06" width="300" height="134" class="alignnone size-medium wp-image-134" /></a></p>
<p><h4>Input Types</h4>
</p>
<p>
      Formtastic mapeia diretamente a maioria dos inputs, mas se por algum motivo você precisar alterar o seu tipo (por exemplo, como fizemos com o Status) você pode usar:
    </p>
<ul>
<li>
      :select (select para associações)
      </li>
<li>
      :check_boxes (conjunto de check_box) &#8211; uma alternativa ao :select para associações has_many e has_and_belongs_to_many
      </li>
<li>
      :radio (conjunto de radio) &#8211; alternativa ao :select para associações belongs_to
      </li>
<li>
      :time_zone (select com fusos horários)
      </li>
<li>
      :password (campo tipo password) &#8211; padrão para colunas do tipo :string com &#8216;password&#8217; no nome do método
      </li>
<li>
      :text (textarea) &#8211; padrão para colunas do tipo :text
      </li>
<li>
      :date (select para datas) &#8211; padrão para colunas do tipo :date
      </li>
<li>
      :datetime (select para data e hora) &#8211; padrão para colunas do tipo :datetime e :timestamp
      </li>
<li>
      :time (select para hora) &#8211; padrão para colunas do tipo :time
      </li>
<li>
      :boolean (checkbox) &#8211; padrão para colunas do tipo :boolean (você também pode usar :select e :radio)
      </li>
<li>
      :string (campo de texto) &#8211; padrão para colunas do tipo :string
      </li>
<li>
      :numeric (campo de texto, como string) &#8211; padrão para colunas do tipo :integer, :float e :decimal
      </li>
<li>
      :country (menu select com nomes de países) &#8211; requer plugin <a href="http://github.com/rails/iso-3166-country-select/tree/master">country_select</a> instalado
      </li>
<li>
      :hidden (campo oculto) &#8211; cria um campo oculto
      </li>
</ul>
<h4>Stylesheets</h4>
<p>
      Mas Jésus, e esse visual feio ai? Tem como melhorar não??
    </p>
<p>
      Claro que tem! Tente isso:
    </p>
<pre><code>script/generate formtastic_stylesheets</code></pre>
<p>
      Ele vai copiar dois arquivos (formtastic.css e formtastic_changes.css) dentro da pasta public/stylesheets para que você possa personalizar todo o visual do formulário <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
<p>
      Basta adicionar ambos na view e trabalhar em suas propriedades:
    </p>
<pre class="rails"><code>&lt;%= <span class="kw5">stylesheet_link_tag</span> <span class="st0">&quot;formtastic&quot;</span> %&gt;
&lt;%= <span class="kw5">stylesheet_link_tag</span> <span class="st0">&quot;formtastic_changes&quot;</span> %&gt;</code></pre>
<p>
      Claro que muito mais pode ser feito, como suporte a I18n, upload de imagens, mas isso ficará para um outro post =/
    </p>
<p>
      Vale a pena dar uma olhada em sua <a href="http://rdoc.info/projects/justinfrench/formtastic">ótima documentação</a> e nos seus arquivos no <a href="http://github.com/justinfrench/formtastic/tree/master">Github</a>.
    </p>
<p>
      A idéia aqui, foi dar uma introdução e mostrar como ele pode facilitar e ajudar na hora de trabalhar com formulário no Rails.
    </p>
<p>
      É isso ai, vou finalizando por aqui <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Populando banco de dados usando a gem Populator</title>
		<link>http://jlopes.zigotto.com.br/gems/populando-banco-de-dados-usando-a-gem-populator</link>
		<comments>http://jlopes.zigotto.com.br/gems/populando-banco-de-dados-usando-a-gem-populator#comments</comments>
		<pubDate>Sun, 14 Jun 2009 02:53:56 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[faker]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[populator]]></category>
		<category><![CDATA[task]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=26</guid>
		<description><![CDATA[É preciso demonstrar uma funcionalidade da aplicação para o cliente, mas para isso é necessário realizar diversos cadastros e gerar informações na base de dados. Dependendo da quantidade de registros, fazer isso manualmente acaba ficando muito chato além de consumir um longo tempo.
Procurando uma maneira de automatizar esse processo, encontrei a gem Populator que facilita [...]]]></description>
			<content:encoded><![CDATA[<p>É preciso demonstrar uma funcionalidade da aplicação para o cliente, mas para isso é necessário realizar diversos cadastros e gerar informações na base de dados. Dependendo da quantidade de registros, fazer isso manualmente acaba ficando muito chato além de consumir um longo tempo.</p>
<p>Procurando uma maneira de automatizar esse processo, encontrei a gem <a href="http://populator.rubyforge.org/" target="_blank">Populator</a> que facilita e muito esse trabalho.</p>
<p><strong>Como Usar</strong>:</p>
<p>Primeiro instale a gem</p>
<pre><code>sudo gem install populator</code></pre>
<p>Após instalar, no console já podemos fazer algo como:</p>
<pre class="bash"><code>&gt;&gt; require <span class="st0">'populator'</span>
=&gt; <span class="br0">&#91;</span><span class="br0">&#93;</span>
&gt;&gt; Category.count
=&gt; <span class="nu0">0</span>
&gt;&gt; Category.populate<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> |category| category.name = Populator.words<span class="br0">&#40;</span><span class="nu0">1</span>..<span class="nu0">3</span><span class="br0">&#41;</span>.titleize <span class="br0">&#125;</span>
=&gt; <span class="br0">&#123;</span><span class="br0">&#125;</span>
&gt;&gt; Category.count
=&gt; <span class="nu0">10</span>
&gt;&gt; Category.first
=&gt; <span class="re3">#&lt;Category id: <span class="nu0">1</span>, name: </span><span class="st0">&quot;Fuga Debitis Temporibus&quot;</span>, created_at: <span class="st0">&quot;2009-06-13 14:17:24&quot;</span>, updated_at: <span class="st0">&quot;2009-06-13 14:17:24&quot;</span>&gt;
&gt;&gt;</code></pre>
<p>Existem alguns metodos que podemos usar para gerar alguns dados como:</p>
<pre class="rails"><code>Populator.<span class="me1">words</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span> <span class="co1"># gera 5 palavras aleatoriamente e insere um espaço entre elas</span>
Populator.<span class="me1">words</span><span class="br0">&#40;</span><span class="nu0">1</span>..<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1"># gera entre uma e três palavras aleatoriamente</span>
Populator.<span class="me1">sentences</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1"># gera 3 frases</span>
Populator.<span class="me1">paragraphs</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> <span class="co1"># gera 2 paragrafos</span></code></pre>
<p>Mas dependendo to tamanho de nosso model, ficar digitando tudo isso pelo console acaba dando muito trabalho também. Vamos melhorar isso!</p>
<p>Crie um novo arquivo em <strong>lib/tasks/populate.rake</strong> e crie a seguinte tarefa:</p>
<pre class="rails"><code>namespace <span class="re3">:db</span> <span class="kw1">do</span>
  desc <span class="st0">&quot;Popula base de dados&quot;</span>
  task <span class="re3">:populate</span> =&gt; <span class="re3">:environment</span> <span class="kw1">do</span>
&nbsp;
    <span class="kw3">require</span> <span class="st0">'populator'</span>
&nbsp;
    Category.<span class="me1">populate</span> <span class="nu0">30</span> <span class="kw1">do</span> |category|
      category.<span class="me1">name</span> = Populator.<span class="me1">words</span><span class="br0">&#40;</span><span class="nu0">1</span>..<span class="nu0">3</span><span class="br0">&#41;</span>.<span class="me1">titleize</span>
    <span class="kw1">end</span>
&nbsp;
  <span class="kw1">end</span>
<span class="kw1">end</span></code></pre>
<p>Agora dentro do diretório da aplicação, basta rodar a tarefa:</p>
<pre><code> rake db:populate </code></pre>
<p>Bem melhor <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Podemos melhorar ainda mais este processo e deixar ele mais completo utilizando a gem <a href="http://faker.rubyforge.org/" target="_blank">Faker</a> que gera dados como nome, telefone, endereço, e-mail e pode ser usada junto com a <a href="http://populator.rubyforge.org/" target="_blank">Populator</a>.</p>
<p>Vale a pena assistir a <a href="http://railscasts.com/episodes/126-populating-a-database" target="_blank">este</a> Railscast onde é demonstrado como utilizar as duas gems.</p>
<p>É isso ai! <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/gems/populando-banco-de-dados-usando-a-gem-populator/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AnnotateModels</title>
		<link>http://jlopes.zigotto.com.br/gems/annotatemodels</link>
		<comments>http://jlopes.zigotto.com.br/gems/annotatemodels#comments</comments>
		<pubDate>Fri, 12 Jun 2009 14:55:01 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[attributes]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=3</guid>
		<description><![CDATA[Precisa saber de forma rápida quais atributos um determinado model tem?
A gem AnnotateModels facilita este trabalho, adicionando em forma de comentários dentro do model, todos os seus atributos.
Como usar:
Primeiro instale a gem. No terminal digite:
sudo gem install annotate
Em seguida, acesse o diretório da aplicação e execute:
annotate
Veja como ficou nosso model:
# == Schema Information
#
# Table name: [...]]]></description>
			<content:encoded><![CDATA[<p>Precisa saber de forma rápida quais atributos um determinado model tem?</p>
<p>A gem <a href="http://github.com/ctran/annotate_models/tree/master">AnnotateModels</a> facilita este trabalho, adicionando em forma de comentários dentro do model, todos os seus atributos.</p>
<h3>Como usar:</h3>
<p>Primeiro instale a gem. No terminal digite:</p>
<pre><code>sudo gem install annotate</code></pre>
<p>Em seguida, acesse o diretório da aplicação e execute:</p>
<pre><code>annotate</code></pre>
<p>Veja como ficou nosso model:</p>
<pre class="rails"><code><span class="co1"># == Schema Information</span>
<span class="co1">#</span>
<span class="co1"># Table name: categories</span>
<span class="co1">#</span>
<span class="co1"># id :integer(4) not null, primary key</span>
<span class="co1"># name :string(255)</span>
<span class="co1"># description :text</span>
<span class="co1"># created_at :datetime</span>
<span class="co1"># updated_at :datetime</span>
<span class="co1">#</span>
&nbsp;
<span class="kw1">class</span> Category &lt; <span class="re2">ActiveRecord::Base</span>
  <span class="kw5">validates_presence_of</span> <span class="re3">:name</span>
  <span class="kw5">validates_presence_of</span> <span class="re3">:description</span>
<span class="kw1">end</span></code></pre>
<p>Simples e bastante útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/gems/annotatemodels/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
