<?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>El Futirifoken &#187; plugin</title>
	<atom:link href="http://www.gazer.com.ar/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gazer.com.ar</link>
	<description>El arte de no decir nada ;-)</description>
	<lastBuildDate>Mon, 26 Dec 2011 19:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Refactoring de &#8220;Fat Methods&#8221; &#8211; Episodio 4</title>
		<link>http://www.gazer.com.ar/2008/12/01/refactoring-de-fat-methods-episodio-4/</link>
		<comments>http://www.gazer.com.ar/2008/12/01/refactoring-de-fat-methods-episodio-4/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 13:22:16 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=930</guid>
		<description><![CDATA[En la última entrega habíamos logrado separar las notificaciones del controlador. Una de las cosas que todavía me seguían molestando eran los métodos donde obtengo las direcciones de email, como por ejemplo : @notifications = @match.players.select &#123;&#124;p&#124; p.user.notify_new_match_comment? &#125;.collect &#123;&#124;p&#124; p.user.email&#125; Lo que busca esto es obtener los emails de los usuarios para notificar ante [...]]]></description>
			<content:encoded><![CDATA[<p>En la <a href="http://www.gazer.com.ar/2008/10/30/refactoring-de-fat-methods-episodio-3/">última</a> entrega habíamos logrado separar las notificaciones del controlador. Una de las cosas que todavía me seguían molestando eran los métodos donde obtengo las direcciones de email, como por ejemplo :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@notifications</span> = <span style="color:#0066ff; font-weight:bold;">@match</span>.<span style="color:#9900CC;">players</span>.<span style="color:#CC0066; font-weight:bold;">select</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>p<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">notify_new_match_comment</span>? <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">collect</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>p<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">email</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Lo que busca esto es obtener los emails de los usuarios para notificar ante un evento dado (un nuevo partido creado, un nuevo comentario, una petición de amistad, etc). Me molesta principalmente porque se ven horribles mis controllers <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>La respuesta que motiva este episodio llegó por casualidad. Intentando solucionar un bug que tenía en uno de los plugins que uso (<a href="http://agilewebdevelopment.com/plugins/has_many_friends">has_many_friends</a>, que es feo pero cómodo para un proyecto como este de prueba) vi algo que no conocía : las asociaciones (has_many, has_one, etc) aceptan un bloque donde podemos agregar funcionalidad extra.</p>
<p>Entonces, por ejemplo, si yo quisiera que el ejemplo anterior pueda ser escrito como <code>@match.players.notificables</code> (si, el nombre no es de lo mejor, pero es a modo ilustrativo) simplemente debería agregar ese método como sigue :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Match <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_many <span style="color:#ff3333; font-weight:bold;">:players</span>  <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> notificables
      collect <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>p<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">email</span> <span style="color:#9966CC; font-weight:bold;">if</span> !<span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">email</span>.<span style="color:#9900CC;">blank</span>? <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">notify_new_match_comment</span>? <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Ejemplo de uso</span>
<span style="color:#0066ff; font-weight:bold;">@notifications</span> = <span style="color:#0066ff; font-weight:bold;">@match</span>.<span style="color:#9900CC;">players</span>.<span style="color:#9900CC;">notificables</span></pre></div></div>

<p>El método que agregamos trabaja directamente sobre la asociación, que en este caso es una colección de <code>Player</code>, por lo que el <code>collect</code> nos dará todos los emails de los usuarios que se anotaron al partido y tienen activa la opción de recibir notificaciones cuando alguien deja un comentario nuevo en ese partido.</p>
<p>Los métodos que agregamos pueden aceptar parámetros también, con lo cual podría aceptar un symbol con el tipo de permiso a verificar y tener todos los emails de los usuarios para un tipo de notificación dada. Ahora si se hace un refactor de las opciones de notificación de los usuarios tenemos centralizada la lógica en los modelos en lugar de tenerla en los controladores u observers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/12/01/refactoring-de-fat-methods-episodio-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>has_sitemap plugin</title>
		<link>http://www.gazer.com.ar/2008/06/22/has_sitemap-plugin/</link>
		<comments>http://www.gazer.com.ar/2008/06/22/has_sitemap-plugin/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 19:52:11 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[has_sitemap]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=271</guid>
		<description><![CDATA[Este fin de semana tenía que agregar a 4 sitios de clientes un sitemap para mejorar la indexación por los motores de búsqueda, así que para hacerlo una vez y rápido, decidí aprender a hacer plugins para Rails. No es que sea una magia absoluta, de hecho es muy tonto hacer uno. Pero cómo codeas [...]]]></description>
			<content:encoded><![CDATA[<p>Este fin de semana tenía que agregar a 4 sitios de clientes un sitemap para mejorar la indexación por los motores de búsqueda, así que para hacerlo una vez y rápido, decidí aprender a hacer plugins para Rails.</p>
<p>No es que sea una magia absoluta, de hecho es muy tonto hacer uno. Pero cómo codeas adentro del plugin creo que es importante, porque la gente los usa como cajas negras, y si es un desastre, todo lo de afuera se vuelve un desastre.</p>
<p>El plugin permite agregar sitemaps tal cual lo define el <a href="http://www.sitemaps.org/protocol.php">protocolo</a>, mediante un simple helper y una función adicional donde el controller debe generar la data que desea agregar. Lo que se encapsula es básicamente el generador del XML.</p>
<p>Todo se genera dinámicamente y por ahora solo es útil para sitios realmente chicos (&lt; 100 urls) como los que yo necesitaba. El protocolo especifica que se pueden poner hasta 50k de URLs (o 10Mb) por lo que este plugin no es útil, al menos por ahora, para esos casos.</p>
<p>El código está hosteado en <a href="http://github.com/Gazer/has_sitemap/tree/master">http://github.com/Gazer/has_sitemap/tree/master</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/06/22/has_sitemap-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

