<?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; rails</title>
	<atom:link href="http://jlopes.zigotto.com.br/category/rails/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>Utilizando Formtastic e Inputs</title>
		<link>http://jlopes.zigotto.com.br/rails/utilizando-formtastic-e-inputs</link>
		<comments>http://jlopes.zigotto.com.br/rails/utilizando-formtastic-e-inputs#comments</comments>
		<pubDate>Fri, 04 Dec 2009 23:35:31 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[projetos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formtastic]]></category>
		<category><![CDATA[inputs]]></category>
		<category><![CDATA[mask]]></category>
		<category><![CDATA[meiomask]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[zigotto]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=172</guid>
		<description><![CDATA[Alguns meses atrás escrevi um plugin chamado Inputs. Como pode ser lido neste post, o objetivo é facilitar a criação de máscaras em campos de formulário.
Após ter descoberto o Formtastic, passei a utilizar o mesmo em todos os projetos aqui na Zigotto. Gosto muito da maneira que ele me permite trabalhar e escrever o código [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns meses atrás escrevi um plugin chamado <a href="http://github.com/jtadeulopes/inputs">Inputs</a>. Como pode ser lido <a href="http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios">neste post</a>, o objetivo é facilitar a criação de máscaras em campos de formulário.</p>
<p>Após ter descoberto o <a href="http://jlopes.zigotto.com.br/rails/formularios-com-formtastic">Formtastic</a>, passei a utilizar o mesmo em todos os projetos aqui na <a href="http://www.zigotto.com.br">Zigotto</a>. Gosto muito da maneira que ele me permite trabalhar e escrever o código mais limpo e organizado.</p>
<p>E com tudo isso, comecei a me perguntar:</p>
<ul>
<li>O Inputs pode ser utlizado junto com o Formtastic?</li>
<li>Como unir os dois de uma maneira bem simples e continuar usando o Formtastic para trabalhar com os formulários?</li>
</ul>
<p>Imaginei algo como:</p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:price</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:decimal</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Gostei! É exatamente isso que eu quero! <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Inputs foi <a href="http://github.com/jtadeulopes/inputs/commits/master/">atualizado</a> e agora é possível através da opção <strong>:mask</strong> informar qual o tipo de máscara que você quer inserir no campo do formulário!</p>
<h4>Como usar?</h4>
<ol>
<li>Instale e configure o Formtastic em seu projeto. Veja como fazer isso <a href="http://jlopes.zigotto.com.br/rails/formularios-com-formtastic">aqui</a>.</li>
<li>Instale e configure o plugin Inputs. Veja como fazer isso <a href="http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios">aqui</a>.</li>
</ol>
<p>Após tudo configurado, é possível se fazer isso: </p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@customer</span> <span class="kw1">do</span> |form| %&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">:phone</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:phone</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:cpf</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:cpf</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Você pode utlizar outras máscaras já definidas:</p>
<ul>
<li>phone</li>
<li>phone-us</li>
<li>cpf</li>
<li>cnpj</li>
<li>date</li>
<li>date-us</li>
<li>cep</li>
<li>time</li>
<li>cc</li>
<li>integer</li>
<li>decimal</li>
<li>decimal-us</li>
<li>signed-decimal-us</li>
</ul>
<p>ou criar a sua própria máscara:</p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:year</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'9999'</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:phone</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'99-9999-9999'</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Inputs utiliza o plugin <a href="http://www.meiocodigo.com/projects/meiomask/">meioMask</a> para criar as máscaras, demais opções e configurações podem ser vista na própria página do <a href="http://www.meiocodigo.com/projects/meiomask/">meioMask</a>.</p>
<p>Sugestões, criticas são bem vindas. O código esta no <a href="http://github.com/jtadeulopes/inputs">Github</a>, fiquem a vontade para utilizar, modificar e compartilhar <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/utilizando-formtastic-e-inputs/feed</wfw:commentRss>
		<slash:comments>2</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>Plugin Inputs &#8211; Crie mascaras para campos de formulários</title>
		<link>http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios</link>
		<comments>http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios#comments</comments>
		<pubDate>Mon, 24 Aug 2009 00:42:29 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[projetos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[inputs]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mask]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=86</guid>
		<description><![CDATA[Finalmente consegui escrever sobre meu primeiro plugin, chamado Inputs.
O objetivo é simples! Adicionar mascaras em campos de formulários. Penso em ampliar este plugin, e adicionar outras funcionalidade. Falo mais sobre isso no final do post.
Baseado no plugin JSMask do Oźeas Sant&#8217;ana, para prototype, o Inputs foi criado para quem trabalha com jQuery.
Vamos usar:
É necessário que [...]]]></description>
			<content:encoded><![CDATA[<p>Finalmente consegui escrever sobre meu primeiro plugin, chamado <a href="http://github.com/jtadeulopes/inputs/tree/master">Inputs</a>.</p>
<p>O objetivo é simples! Adicionar mascaras em campos de formulários. Penso em ampliar este plugin, e adicionar outras funcionalidade. Falo mais sobre isso no final do post.</p>
<p>Baseado no plugin <a title="JSMask" href="http://github.com/ozeias/js_mask/tree/master" target="_blank">JSMask</a> do <a href="http://railsbox.org/" target="_blank">Oźeas Sant&#8217;ana</a>, para prototype, o Inputs foi criado para quem trabalha com jQuery.</p>
<p><strong>Vamos usar:</strong></p>
<p>É necessário que esteja usando jQuery em seu projeto, recomendo o plugin <a href="http://github.com/aaronchi/jrails/tree/master" target="_blank">jRails</a>, caso ainda não o tenha instalado:</p>
<pre><code>script/plugin install git://github.com/aaronchi/jrails.git</code></pre>
<p>Agora é só instalar o <a href="http://github.com/jtadeulopes/inputs/tree/master">Inputs</a>:</p>
<pre><code>script/plugin install git://github.com/jtadeulopes/inputs.git</code></pre>
<p>Chamar os arquivos necessários na view:</p>
<pre class="rails"><code>&lt;%= <span class="kw5">javascript_include_tag</span> <span class="re3">:defaults</span> %&gt;
&lt;%= javascript_include_inputs %&gt;</code></pre>
<p>Agora, no formulário você pode fazer algo como:</p>
<pre class="rails"><code>&lt;%= masked_text_field<span class="br0">&#40;</span><span class="re3">:user</span>, <span class="re3">:tel</span>, <span class="re3">:size</span> =&gt; <span class="nu0">13</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'(99)9999-9999'</span><span class="br0">&#41;</span> %&gt;</code></pre>
<p>Outros exemplos:</p>
<pre class="rails"><code><span class="co1"># Data:</span>
&lt;%= masked_text_field<span class="br0">&#40;</span><span class="re3">:user</span>, <span class="re3">:birth</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'99/99/9999'</span><span class="br0">&#41;</span> %&gt;
&nbsp;
<span class="co1"># CPF:</span>
&lt;%= masked_text_field<span class="br0">&#40;</span><span class="re3">:user</span>, <span class="re3">:cpf</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'999.999.999-99'</span><span class="br0">&#41;</span> %&gt;
&nbsp;
<span class="co1"># Campo de preço (dolar)</span>
&lt;%= price_us_text_field<span class="br0">&#40;</span><span class="re3">:product</span>, <span class="re3">:price</span>, <span class="re3">:size</span> =&gt; <span class="nu0">10</span><span class="br0">&#41;</span> %&gt;</code></pre>
<p>A idéia é ir adicionando outras opções, como calendário para seleção de datas, criar métodos que são mais utilizados para que não seja necessário ficar setando a máscara na criação do campo, etc.</p>
<p>Idéias são bem vindas, todo o código esta no <a href="http://github.com/jtadeulopes/inputs/tree/master">Github</a>, fiquem a vontade para utilizar, modificar e compartilhar!</p>
<p>É isso ai, valeu! <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/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Paperclip: Atualizando imagens já cadastradas</title>
		<link>http://jlopes.zigotto.com.br/rails/paperclip-atualizando-imagens-ja-cadastradas</link>
		<comments>http://jlopes.zigotto.com.br/rails/paperclip-atualizando-imagens-ja-cadastradas#comments</comments>
		<pubDate>Fri, 19 Jun 2009 00:17:58 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=61</guid>
		<description><![CDATA[Seu projeto esta no ar, vários usuários utilizando e fazendo upload de imagens! Ótimo!!
Mas foi decidido que as imagens devem ter outros tamanhos, o que fazer com as imagens que já foram cadastradas?  
Se você utiliza o plugin Paperclip, ele dispobilibiza algumas rake tasks para facilitar esse trabalho!
São elas:
# Atualiza as informações do banco [...]]]></description>
			<content:encoded><![CDATA[<p>Seu projeto esta no ar, vários usuários utilizando e fazendo upload de imagens! Ótimo!!</p>
<p>Mas foi decidido que as imagens devem ter outros tamanhos, o que fazer com as imagens que já foram cadastradas? <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Se você utiliza o plugin <a href="http://thoughtbot.com/projects/paperclip" target="_blank">Paperclip</a>, ele dispobilibiza algumas rake tasks para facilitar esse trabalho!</p>
<p>São elas:</p>
<pre class="rails"><code><span class="co1"># Atualiza as informações do banco de dados e os arquivos no </span>
<span class="co1"># servidor de acordo com os styles definidos no model</span>
rake paperclip:refresh CLASS=SeuModel
&nbsp;
<span class="co1"># Atualiza somente as informações do banco de dados</span>
rake paperclip:refresh:metadata CLASS=SeuModel
&nbsp;
<span class="co1"># Atualiza somente os arquivos no servidor, seguindo os styles </span>
<span class="co1"># definidos no model</span>
rake paperclip:refresh:thumbnails CLASS=SeuModel</code></pre>
<p>Simples e sem dor de cabeça <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/paperclip-atualizando-imagens-ja-cadastradas/feed</wfw:commentRss>
		<slash:comments>2</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>
	</channel>
</rss>
