<?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>Nicolás Brailovsky &#187; Ruby</title>
	<atom:link href="http://nicolasb.com.ar/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://nicolasb.com.ar</link>
	<description>A modern blog</description>
	<lastBuildDate>Tue, 20 Dec 2011 09:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Ruby: Method chaining</title>
		<link>http://nicolasb.com.ar/2008/10/ruby-method-chaining/</link>
		<comments>http://nicolasb.com.ar/2008/10/ruby-method-chaining/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 03:44:09 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://127.0.0.1/blog/?p=28</guid>
		<description><![CDATA[Interesante #!/usr/bin/ruby1.8 &#160; module MethodDecorator &#160; # Create a chain between methods: &#160; # &#160; Rename org_mthd to org_alias and then point it to new_mthd &#160; # The next time org_mthd is called new_methd will be executed &#160; def add_chain org_mthd, new_mthd, org_alias &#160; &#160; self.class.class_eval do &#160; &#160; &#160; &#40;alias_method org_alias, org_mthd&#41; unless method_defined? [...]]]></description>
			<content:encoded><![CDATA[<p>Interesante <img src='http://nicolasb.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/ruby1.8</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">module</span> MethodDecorator</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Create a chain between methods:</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1"># &nbsp; Rename org_mthd to org_alias and then point it to new_mthd</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># The next time org_mthd is called new_methd will be executed</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> add_chain org_mthd, new_mthd, org_alias</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw1">class</span>.<span class="me1">class_eval</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>alias_method org_alias, org_mthd<span class="br0">&#41;</span> <span class="kw1">unless</span> method_defined? org_alias</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; alias_method org_mthd, new_mthd</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Extremly evil code ahead!</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">def</span> decorate method, decorator</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># Create a chain counter if it doesn&#8217;t exist</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">@chain_counter</span> ||= <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># Use the chain counter as a method id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; i = <span class="br0">&#40;</span>@chain_counter += <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># Create a new method which will dispatch the call to both</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># the original and the decorator method</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw1">class</span>.<span class="me1">class_eval</span> &lt;&lt;-EOM</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">def</span> chain_dispatcher<span class="co1">#{i} *params</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#{decorator} *params</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; chain_original<span class="co1">#{i} *params</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; EOM</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1"># Once the method was created, add chain</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">eval</span> <span class="st0">&quot;add_chain method, :chain_dispatcher#{i}, :chain_original#{i}&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> Foo</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">include</span> MethodDecorator</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> foo; <span class="kw3">print</span> <span class="st0">&quot;Hello &quot;</span>; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> bar; <span class="kw3">print</span> <span class="st0">&quot;world<span class="es0">\n</span>&quot;</span>; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> initialize; decorate <span class="re3">:bar</span>, <span class="re3">:foo</span>; <span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Foo.<span class="me1">new</span>.<span class="me1">bar</span></div>
</li>
</ol>
</div>
<p><span style="text-decoration: line-through;">Ahora si, tengo que buscar ya un plugin para código.</span></p>
<p><em>Edit: Agregado el plugin para código!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://nicolasb.com.ar/2008/10/ruby-method-chaining/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

