<?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>ABAP101 &#187; Rails</title>
	<atom:link href="http://abap101.com/category/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://abap101.com</link>
	<description>ABAP &#124; Open Source &#124; Agile &#124; Programação</description>
	<lastBuildDate>Wed, 02 May 2012 22:30:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Criando o primeiro helper no Rails</title>
		<link>http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/</link>
		<comments>http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 18:11:20 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=134</guid>
		<description><![CDATA[Como aconteceu com o caso das rotas, aprender a usar helpers é uma das coisas mais satisfatórias em Rails. Digo isso como iniciante, pois isso já deve ser uma coisa totalmente trivial para os mais experientes. No meu caso, tenho um form com uma lista de checkboxes, que podem variar em número de acordo com [...]]]></description>
			<content:encoded><![CDATA[<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="horizontal" data-url="http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/" data-text="Criando o primeiro helper no Rails"></a><a class="a2a_button_google_plusone addtoany_special_service" data-href="http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/"></a><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F11%2Fcriando-o-primeiro-helper-no-rails%2F&amp;linkname=Criando%20o%20primeiro%20helper%20no%20Rails" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F11%2Fcriando-o-primeiro-helper-no-rails%2F&amp;linkname=Criando%20o%20primeiro%20helper%20no%20Rails" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F11%2Fcriando-o-primeiro-helper-no-rails%2F&amp;linkname=Criando%20o%20primeiro%20helper%20no%20Rails" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F03%2F11%2Fcriando-o-primeiro-helper-no-rails%2F&amp;title=Criando%20o%20primeiro%20helper%20no%20Rails" id="wpa2a_2"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>Como aconteceu com o caso das rotas, aprender a usar helpers é uma das coisas mais satisfatórias em Rails. Digo isso como iniciante, pois isso já deve ser uma coisa totalmente trivial para os mais experientes.</p>
<p>No meu caso, tenho um form com uma lista de checkboxes, que podem variar em número de acordo com o conteúdo de uma tabela. Ou seja, se na tabela tiver 5 itens, terei 5 checkboxes. Se eu apagar um item, quando recarregar a página, serão mostrados 4 checkboxes.</p>
<p>Veja abaixo como eu resolvi o problema com um helper.</p>
<p><span id="more-134"></span></p>
<p>Um dos pilares filosóficos do Rails (bonito isso, hein?), é o conceito DRY, ou seja Don&#8217;t Repeat Yourself. Uma das explicações mais legais sobre isso, você pode conferir nesse post <a href="http://www.nomedojogo.com/2009/03/06/rails-way-5-dont-repeat-yourself/">aqui</a>.</p>
<p>Uma das passagens que mais me chamou a atenção foi essa aqui:</p>
<blockquote><p><strong>“Don’t repeat yourself” não é somente sobre duplicar trechos de código</strong>, também tem muito a ver com o comportamento funcional do seu código.</p></blockquote>
<p>Os helpers foram criados justamente pensando em uma programa DRY, ou seja, sem repetição de código, conceito ou funcionalidade.</p>
<p>Mas descobri que eles podem ser muito úteis também para geração dinâmica de forms.</p>
<p>Na estrutura de diretórios do Rails, em ../app/helpers, você encontrará helpers específicos para controller da sua aplicação. Se você criar um helper dentro de &lt;seu_controler&gt;Helper.rb, esse helper estará disponível somente para aquele controller &lt;seu_controler&gt; especificado.</p>
<p>Agora, se você colocar seu helper no application_helper.rb, seu helper estará disponível para todos helpers.</p>
<p>Para o caso dos múltiplos checkboxes, veja o helper show_connections_types:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> ConnectionRequestsHelper
<span style="color:#9966CC; font-weight:bold;">def</span> show_connections_types
output = <span style="color:#996600;">''</span>
conn_types = ConnectionType.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'archive &amp;lt;&amp;gt; ?'</span>, <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
group = <span style="color:#006666;">1</span>
&nbsp;
conn_types.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>conn<span style="color:#006600; font-weight:bold;">|</span>
output <span style="color:#006600; font-weight:bold;">&amp;</span>lt;<span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#996600;">'
&lt;input name=&quot;conn'</span> <span style="color:#006600; font-weight:bold;">+</span> group.<span style="color:#9900CC;">to_s</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'&quot; type=&quot;checkbox&quot; /&gt;'</span> <span style="color:#006600; font-weight:bold;">+</span> conn.<span style="color:#9900CC;">name</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'
'</span>
group = group <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#0000FF; font-weight:bold;">return</span> output
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>O que esse helper faz? Ele recupera todos os itens da tabela connection_types e gera o código HTML do form, usando cada um dos itens da minha tabela.</p>
<p>O resultado HTML final será assim:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;input name=&quot;conn1&quot; type=&quot;checkbox&quot; /&gt;Trabalhamos juntos no mesmo projeto.
&lt;input name=&quot;conn2&quot; type=&quot;checkbox&quot; /&gt;Foi meu instrutor(a).
&lt;input name=&quot;conn3&quot; type=&quot;checkbox&quot; /&gt;Fui seu instrutor(a).
&lt;input name=&quot;conn4&quot; type=&quot;checkbox&quot; /&gt;Foi meu colega de classe.
&lt;input name=&quot;conn5&quot; type=&quot;checkbox&quot; /&gt;Conheci em um evento.
&lt;input name=&quot;conn6&quot; type=&quot;checkbox&quot; /&gt;Li uma publicação dele(a), como livro, artigo ou blog.</pre></div></div>

<p>Na minha view, quando eu quizer usar o helper, apenas uso a seguinte linha:</p>
<p><strong><br />
Conclusão</strong></p>
<p>Os helpers são peças fundamentais em Rails. Aprender a usá-los dará a você muita munição para solução dos problemas nas views.</p>
<p>Em um próximo post, vou mostrar como os helpers estão me ajudando a ser DRY em minhas views.</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/03/11/criando-o-primeiro-helper-no-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um item passando parâmetro</title>
		<link>http://abap101.com/2009/03/06/criando-um-item-passando-parametro/</link>
		<comments>http://abap101.com/2009/03/06/criando-um-item-passando-parametro/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 00:42:54 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=128</guid>
		<description><![CDATA[Quando você tem o primeiro contato com o Rails, você fica logo apaixonado pela facilidade, seja pelo scaffold, seja pelo &#8220;covention over configuration&#8221; ou pelo migrations. Mas uma coisa que escapa a nossa atenção é o uso das rotas. Eu tenho aprendido muito estudado o funcionamento das rotas e tenho encontrado muitas soluções algúns problemas [...]]]></description>
			<content:encoded><![CDATA[<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://abap101.com/2009/03/06/criando-um-item-passando-parametro/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="horizontal" data-url="http://abap101.com/2009/03/06/criando-um-item-passando-parametro/" data-text="Criando um item passando parâmetro"></a><a class="a2a_button_google_plusone addtoany_special_service" data-href="http://abap101.com/2009/03/06/criando-um-item-passando-parametro/"></a><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F06%2Fcriando-um-item-passando-parametro%2F&amp;linkname=Criando%20um%20item%20passando%20par%C3%A2metro" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F06%2Fcriando-um-item-passando-parametro%2F&amp;linkname=Criando%20um%20item%20passando%20par%C3%A2metro" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F03%2F06%2Fcriando-um-item-passando-parametro%2F&amp;linkname=Criando%20um%20item%20passando%20par%C3%A2metro" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F03%2F06%2Fcriando-um-item-passando-parametro%2F&amp;title=Criando%20um%20item%20passando%20par%C3%A2metro" id="wpa2a_4"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>Quando você tem o primeiro contato com o Rails, você fica logo apaixonado pela facilidade, seja pelo scaffold, seja pelo &#8220;covention over configuration&#8221; ou pelo migrations.</p>
<p>Mas uma coisa que escapa a nossa atenção é o uso das rotas. Eu tenho aprendido muito estudado o funcionamento das rotas e tenho encontrado muitas soluções algúns problemas chatos de se resolver.</p>
<p>Essa semana mesmo, tive um problema que resolvi criando uma nova rota.</p>
<p><span id="more-128"></span></p>
<p>Imagine que você precise criar um novo item qualquer do modelo, mas esse item precisa já ser criado associado a outro item. Resolvi isso fazendo uma nova rota para o controller em questão:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">new_request</span> <span style="color:#996600;">'connection_requests/new/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">'connection_requests'</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">'new'</span></pre></td></tr></table></div>

<p>Com isso, estou dizendo ao Rails que quando o link &#8220;&#8230;/new_request/new/1&#8243; for chamado, o controller connections_request, ação new, passando o parâmetro 1.</p>
<p>Aí no controller, eu trato o parameter da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@connection_request</span>.<span style="color:#9900CC;">connect_to</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:id</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></td></tr></table></div>

<p>O parâmetro id do link é passado via params[:id]. No meu caso, joguei esse valor em um atributo do meu modelo, que usarei no momento de salvar o item. Onde eu farei a associação requerida.</p>
<p>A intensão aqui é apenas mostrar que as rotas devem ser estudadas e levadas em consideração na hora de resolver problemas.</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/03/06/criando-um-item-passando-parametro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erro no plugin file_column usando Inflector</title>
		<link>http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/</link>
		<comments>http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 15:09:45 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=112</guid>
		<description><![CDATA[No meu novo projeto Rails eu estou usando o plugin file_column para tratar o upload de arquivos. No entanto, se você usar a versão original do autor que está no repositório SVN, você terá o seguinte erro usando Rails 2.1 ou mais recente: uninitialized constant FileColumn::ClassMethods::Inflector Se você instalar o usando o comando abaixo, você [...]]]></description>
			<content:encoded><![CDATA[<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="horizontal" data-url="http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/" data-text="Erro no plugin file_column usando Inflector"></a><a class="a2a_button_google_plusone addtoany_special_service" data-href="http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/"></a><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F17%2Ferro-no-plugin-file_column-usando-inflector%2F&amp;linkname=Erro%20no%20plugin%20file_column%20usando%20Inflector" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F17%2Ferro-no-plugin-file_column-usando-inflector%2F&amp;linkname=Erro%20no%20plugin%20file_column%20usando%20Inflector" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F17%2Ferro-no-plugin-file_column-usando-inflector%2F&amp;linkname=Erro%20no%20plugin%20file_column%20usando%20Inflector" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F01%2F17%2Ferro-no-plugin-file_column-usando-inflector%2F&amp;title=Erro%20no%20plugin%20file_column%20usando%20Inflector" id="wpa2a_6"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>No meu novo projeto Rails eu estou usando o plugin <a href="http://www.kanthak.net/opensource/file_column/">file_column</a> para tratar o upload de arquivos. No entanto, se você usar a versão original do autor que está no repositório SVN, você terá o seguinte erro usando Rails 2.1 ou mais recente:</p>
<blockquote><p>uninitialized constant FileColumn::ClassMethods::Inflector</p></blockquote>
<p><span id="more-112"></span></p>
<p>Se você instalar o usando o comando abaixo, você baixará a versão do SVN:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">.<span style="color:#006600; font-weight:bold;">/</span>script<span style="color:#006600; font-weight:bold;">/</span>plugin install http:<span style="color:#006600; font-weight:bold;">//</span>opensvn.<span style="color:#9900CC;">csie</span>.<span style="color:#9900CC;">org</span><span style="color:#006600; font-weight:bold;">/</span>rails_file_column<span style="color:#006600; font-weight:bold;">/</span>plugins<span style="color:#006600; font-weight:bold;">/</span>file_column<span style="color:#006600; font-weight:bold;">/</span>trunk</pre></div></div>

<p>Essa versão usa um comando Inflector que foi removido na versão 2.1 do Rails. Devemos usar ActiveSupport::Inflector.</p>
<p>Para isso, você deve corrigir a seguinte linha no arquivo vendor/plugins/file_column/lib/file_column.rb:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">my_options = FileColumn::init_options<span style="color:#006600; font-weight:bold;">&#40;</span>options, <span style="color:#CC00FF; font-weight:bold;">Inflector</span>.<span style="color:#9900CC;">underscore</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">name</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span>, attr.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Corrigir para:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">my_options = FileColumn::init_options<span style="color:#006600; font-weight:bold;">&#40;</span>options, ActiveSupport::<span style="color:#CC00FF; font-weight:bold;">Inflector</span>.<span style="color:#9900CC;">underscore</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">name</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span>, attr.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Claro que por se tratar de um plugin open source, quando você acha um bug você pode agir de 3 maneiras diferentes:</p>
<ul>
<li>Sentar e esperar a correção;</li>
<li>Reclamar que open source não presta porque não tem suporte blá blá blá&#8230;</li>
<li>Corrigir o problema e submeter a correção para o autor</li>
</ul>
<p>Então, após eu ter resolvido o problema tente submeter a correção, mas descobri que o autor não mexe no plugin há muito tempo. Também descobri que já criaram um <a href="http://github.com/tekin/file_column/tree/master">mirror</a> do projeto no Github, já com a devida correção.</p>
<p>Então, é melhor instalar o plugin <a href="http://github.com/blog/25-git-support-for-rails-plugins">diretamente do GitHub</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">.<span style="color:#006600; font-weight:bold;">/</span>script<span style="color:#006600; font-weight:bold;">/</span>plugin install git:<span style="color:#006600; font-weight:bold;">//</span>github.<span style="color:#9900CC;">com</span><span style="color:#006600; font-weight:bold;">/</span>tekin<span style="color:#006600; font-weight:bold;">/</span>file_column.<span style="color:#9900CC;">git</span></pre></div></div>

<p> </p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/01/17/erro-no-plugin-file_column-usando-inflector/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Primeiro projeto open source em Rails &#8211; Reploy</title>
		<link>http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/</link>
		<comments>http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 01:57:35 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[reploy]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=108</guid>
		<description><![CDATA[No ano passado, eu trabalhei em um projeto Rails para o site da igreja que frequento (IPI). O site não exigiu muitas funcionalidades esdruxulas, então o desenvolvi com certa velocidade. Contando a minha experiência em Rails, creio que o mesmo site estaria pronto em uma ou duas semanas, trabalhando nas minhas horas de folgas. Pra [...]]]></description>
			<content:encoded><![CDATA[<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="horizontal" data-url="http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/" data-text="Primeiro projeto open source em Rails &#8211; Reploy"></a><a class="a2a_button_google_plusone addtoany_special_service" data-href="http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/"></a><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F16%2Fprimeiro-projeto-open-source-em-rails-reploy%2F&amp;linkname=Primeiro%20projeto%20open%20source%20em%20Rails%20%E2%80%93%20Reploy" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F16%2Fprimeiro-projeto-open-source-em-rails-reploy%2F&amp;linkname=Primeiro%20projeto%20open%20source%20em%20Rails%20%E2%80%93%20Reploy" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F16%2Fprimeiro-projeto-open-source-em-rails-reploy%2F&amp;linkname=Primeiro%20projeto%20open%20source%20em%20Rails%20%E2%80%93%20Reploy" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F01%2F16%2Fprimeiro-projeto-open-source-em-rails-reploy%2F&amp;title=Primeiro%20projeto%20open%20source%20em%20Rails%20%E2%80%93%20Reploy" id="wpa2a_8"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>No ano passado, eu trabalhei em um projeto Rails para o site da igreja que frequento (<a href="http://www.ipipiranga.org.br">IPI</a>). O site não exigiu muitas funcionalidades esdruxulas, então o desenvolvi com certa velocidade.</p>
<p>Contando a minha experiência em Rails, creio que o mesmo site estaria pronto em uma ou duas semanas, trabalhando nas minhas horas de folgas. Pra falar a verdade a parte de layout foi a que mais me deu trabalho.</p>
<p>Outra coisa que dá um pouco de trabalho é o deploy das alterações que faço localmente. No SAP, temos um sistema de transportes e change requests que torna o deploy uma coisa de criança.</p>
<p>Pensando nisso é que nasceu o <a href="http://github.com/furlan/reploy/tree/master">Reploy</a>, um script para deploy escrito em <a href="http://www.ruby-lang.org/en/">Ruby</a>.</p>
<p><span id="more-108"></span>É um script extremamente simples, que gera um arquivo .tar com o delta das alterações entre o último commit deployed e último commit no desenvolvimento. A idéia não é ser um sistema tão complexo como o do SAP ou Capistrano.</p>
<p>O fluxo de trabalho típico seria assim:</p>
<p><strong>Passo 1</strong>: No seu computador local, após o commit (no <a href="http://git-scm.com/">Git</a>, claro), você executa o script <em>ruby </em><em>repack.rb</em>. Esse script é responsável por empacotar todos os arquivos do último commit (que ficou registrado no arquivo .last_repack) até o último commit feito.</p>
<p><strong>Passo 2:</strong> Faz o upload do arquivo para o servidor destino.</p>
<p><strong>Passo 3:</strong> Via SSH executar o script <em>ruby reploy.rb.</em> Esse script é responsável por mover as novas versões dos arquivos, copiar os novos e remover os arquivos que não fazem parte mais do projeto.</p>
<p>Após o passo 3, teríamos toda a estrutura do projeto no servidor de deploy sincronizada com o sua estrutura de desenvolvimento.</p>
<p>Esse script foi feito para atender as minhas necessidades, mas ainda faltam alguma coisas que gostaria:</p>
<ul>
<li>Upload automático</li>
<li>Mecanismo de Rollback</li>
<li>Interface gráfica</li>
</ul>
<p>Por isso é um projeto Open Source, quem quizer pode contribuir. Ele está hospedado no GitHub e é muito fácil para quem quizer baixar o código e submeter melhorias.</p>
<p>Nos próximos posts, vou explicar melhor como ele funciona, gems que você precisa instalar etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/01/16/primeiro-projeto-open-source-em-rails-reploy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novos Rumos do ABAP 101</title>
		<link>http://abap101.com/2009/01/07/novos-rumos-do-abap-101/</link>
		<comments>http://abap101.com/2009/01/07/novos-rumos-do-abap-101/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 18:28:42 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=98</guid>
		<description><![CDATA[Depois de muito refletir, pensar e ponderar, resolvi dar novos rumos para o ABAP 101. Ou seja, não vou mais falar somente de ABAP e SAP aqui, mas sobre tudas as tecnologias que estou trabalhando no momento. Isso inclui o meu dia a dia com SAP e ABAP, mas também meus projetos e aventuras por [...]]]></description>
			<content:encoded><![CDATA[<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://abap101.com/2009/01/07/novos-rumos-do-abap-101/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="horizontal" data-url="http://abap101.com/2009/01/07/novos-rumos-do-abap-101/" data-text="Novos Rumos do ABAP 101"></a><a class="a2a_button_google_plusone addtoany_special_service" data-href="http://abap101.com/2009/01/07/novos-rumos-do-abap-101/"></a><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F07%2Fnovos-rumos-do-abap-101%2F&amp;linkname=Novos%20Rumos%20do%20ABAP%20101" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F07%2Fnovos-rumos-do-abap-101%2F&amp;linkname=Novos%20Rumos%20do%20ABAP%20101" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F01%2F07%2Fnovos-rumos-do-abap-101%2F&amp;linkname=Novos%20Rumos%20do%20ABAP%20101" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F01%2F07%2Fnovos-rumos-do-abap-101%2F&amp;title=Novos%20Rumos%20do%20ABAP%20101" id="wpa2a_10"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>Depois de muito refletir, pensar e ponderar, resolvi dar novos rumos para o ABAP 101. Ou seja, não vou mais falar somente de ABAP e SAP aqui, mas sobre tudas as tecnologias que estou trabalhando no momento.</p>
<p>Isso inclui o meu dia a dia com SAP e ABAP, mas também meus projetos e aventuras por outros mundos, como Rails e Cocoa.</p>
<p>Em resumo posso dizer que para ABAP continuo postando dicas, técnicas de programação e minhas impressões do mercado. Para todas as outras eu vou postar meus &#8220;feitos&#8221;, dificuldades e qualquer outra informação interessante.</p>
<p>Por quê não criar mais um blog? Porque quero mostrar que existe vida além do ABAP (essa foi para os macacos véios que acham que ABAP é tudo nessa vida).</p>
<p>O ano de 2008, como já <a href="http://abap101.com/2009/01/01/ufa-achei-que-2008-nao-iria-acabar-nunca/">disse</a>, não fiquei parado e descobri muita coisa interessante em outros mundos, principalmente em Rails e XI. Percebi como ficar fechado no mundo ABAP pode prejudicar a nossa carreira!</p>
<p>Então, em 2009 o volume de posts de ABAP continua o mesmo, mas teremos algúns intrusos de outras vizinhanças. Não se preocupe, eles não mordem!</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/01/07/novos-rumos-do-abap-101/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

