<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Gastón Ramos - Ruby, Rails...</title>
	<atom:link href="http://gastonramos.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gastonramos.wordpress.com</link>
	<description>Blog dedicado al desarrollo web en general pero más que nada en ruby on rails</description>
	<pubDate>Fri, 27 Jun 2008 00:00:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>la</language>
			<item>
		<title>Acts as date Module</title>
		<link>http://gastonramos.wordpress.com/2008/06/26/acts-as-date-module/</link>
		<comments>http://gastonramos.wordpress.com/2008/06/26/acts-as-date-module/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 23:58:06 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[modulos]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=68</guid>
		<description><![CDATA[Esta es una solución que se me ocurrió para hacerme más cómodo el trabajo con
el atributo created_at de un modelo, por ej:
Para saber el año de creación de un post, haríamos lo siguiente:

&#62;&#62; p = Post.find(1)
&#62;&#62; p.created_at.month
=&#62; 6

como podemos observar retorna 6, pero resulta que yo lo necesito necesito con el siguiente formato: &#8220;06&#8243;. Lo [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Esta es una solución que se me ocurrió para hacerme más cómodo el trabajo con<br />
el atributo <strong>created_at</strong> de un modelo, por ej:</p>
<p>Para saber el año de creación de un post, haríamos lo siguiente:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
&gt;&gt; p = Post.find(1)
&gt;&gt; p.created_at.month
=&gt; 6
</pre>
<p>como podemos observar retorna 6, pero resulta que yo lo necesito necesito con el siguiente formato: &#8220;06&#8243;. Lo mismo pasa con el día:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
&gt;&gt; p = Post.find(1)
&gt;&gt; p.created_at.day
=&gt; 4
</pre>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">module ActsAsDate

  def year
    created_at.strftime("%Y")
  end

  def month
    created_at.strftime("%m")
  end

  def day
    created_at.strftime("%d")
  end

  def year_month
    [year, month]
  end

  # Armo un string para usarlo en un find
  #    ej:
  #   params = {:year =&gt; "2008", :month =&gt; "06"}
  #   Post.all(:conditions =&gt; Post.created_at_conditions(params))
  #
  def self.included(klass)
    klass.class_eval do
      def self.created_at_conditions(params)
        return nil if params[:year].blank? or params[:month].blank?
        "created_at like '#{params[:year]}-#{params[:month]}%'"
      end
    end
  end

end</pre>
<p>Entonces tenemos que incluir este módulo en modelo que lo queremos usar:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
class Post &lt; ActiveRecord::Base

  include ActsAsDate

end
</pre>
<p>Ahora con esto directamente hago <strong>p.month</strong>, <strong>p.day</strong>, <strong>p.year</strong> y obtengo el mes, día y año de creación del post con el formato que necesito y escribiendo menos código :). Además agregué un método que me arma el param conditions, que se podría un usar así por ej:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">

class PostsController &lt; ApplicationController

def list
    @posts = Post.paginate(
         :page =&gt; params[:page],
         :order =&gt; 'created_at DESC',
         :conditions =&gt; Post.created_at_conditions(params)
    )

    respond_to do |format|
      format.html
      format.xml  { render :xml =&gt; @posts }
    end
  end

end
</pre>
<p>De esta manera no tengo que estar preguntando en el controller si vienen (year y month) como parámetros, por ahora este modulo sólo funciona con el atributo <b>created_at</b> por que está hardcodeado, pero con pocas modificaciones se podría hacer que funciona para cualquier atributo.<br />
Ahora lo que me pregunto es si Rails ya tiene alguna solución mejor para este problema, si alguien la conoce que me lo haga saber por favor (yo no la encontré), además se aceptan modificaciones, sugerencias y comentarios.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/68/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/68/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=68&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/06/26/acts-as-date-module/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Información de debug en Rails</title>
		<link>http://gastonramos.wordpress.com/2008/06/26/informacion-de-debug-en-rails/</link>
		<comments>http://gastonramos.wordpress.com/2008/06/26/informacion-de-debug-en-rails/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 14:27:40 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=59</guid>
		<description><![CDATA[Muchas veces cuando estamos desarrollando una aplicación web necesitamos mirar cierta información de debug, acá les dejo una mi versión de este senippet que leí por acá .
La idea es poner este código en un partial:
 app/view/views/shared/_debug_info.html.erb
y luego ponemos el render en el layout de la aplicación:
 &#60;%= render :partial =&#62; 'shared/debug_info' %&#62;
Va el pastie: [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Muchas veces cuando estamos desarrollando una aplicación web necesitamos mirar cierta información de debug, acá les dejo una mi versión de este senippet que leí <a href="http://64.233.169.104/search?q=cache:r-xd-exte_gJ:wiki.rubyonrails.org/rails/show/TipsAndTricks+snippet+to+toggle+some+debug+info+rails&amp;hl=en&amp;ct=clnk&amp;cd=2&amp;client=iceweasel-a">por acá </a>.</p>
<p>La idea es poner <a href="http://pastie.org/222621">este código</a> en un partial:</p>
<pre> app/view/views/shared/_debug_info.html.erb</pre>
<p>y luego ponemos el render en el layout de la aplicación:</p>
<pre> &lt;%= render :partial =&gt; 'shared/debug_info' %&gt;</pre>
<p>Va el pastie:    <a href="http://pastie.org/222621">http://pastie.org/222621</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/59/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/59/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=59&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/06/26/informacion-de-debug-en-rails/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Paquete de debian para rubinius</title>
		<link>http://gastonramos.wordpress.com/2008/06/15/paquete-de-debian-para-rubinius/</link>
		<comments>http://gastonramos.wordpress.com/2008/06/15/paquete-de-debian-para-rubinius/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 02:20:54 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[rubinius]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=51</guid>
		<description><![CDATA[Hace un tiempo que estoy probando rubunius (una máquina virtual para ruby desarrollada por Evan Phoenix inspirada en smalltalk-80) y además estoy colaborando con rubyspec un proyecto que nació como parte de rubinius. Rubinius está en proceso de desarrolllo, para probarlo hay que bajarse los fuentes y compilarlo, o&#8230; para los que usan debian o [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace un tiempo que estoy probando <a href="http://rubini.us/">rubunius</a> (una máquina virtual para ruby desarrollada por Evan Phoenix inspirada en smalltalk-80) y además estoy colaborando con <a href="http://rubyspec.org/">rubyspec</a> un proyecto que nació como parte de rubinius. Rubinius está en proceso de desarrolllo, para probarlo hay que bajarse los fuentes y compilarlo, o&#8230; para los que usan debian o algunos de sus derivados pueden bajarse el siguiente <a href="http://gastonramos.com.ar/downloads/rubinius_0.8.0-1_i386.deb">.deb</a> que cree hace algunos días, que lo disfruten :).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/51/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/51/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=51&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/06/15/paquete-de-debian-para-rubinius/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Rails edge: Nuevo método Enumerable#many?</title>
		<link>http://gastonramos.wordpress.com/2008/06/13/rails-edge-nuevo-metodo-enumerablemany/</link>
		<comments>http://gastonramos.wordpress.com/2008/06/13/rails-edge-nuevo-metodo-enumerablemany/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 01:47:11 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails edge]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=50</guid>
		<description><![CDATA[Rails agrega un nuevo método al módulo  Enumerable.  Vamos al código para explicar cómo funciona este nuevo método:

&#62;&#62; Post.all.many?
=&#62; false
&#62;&#62; Post.create({:title =&#62; "hola", :post =&#62; "hola"})
&#62;&#62; Post.all.many?
=&#62; false
&#62;&#62; Post.create({:title =&#62; "otro hola", :post =&#62; "otro hola"})
&#62;&#62; Post.all.many?
=&#62; true
&#62;&#62; Post.all.size
=&#62; 2
&#62;&#62; posts = Post.find(:all, :conditions =&#62; {:post =&#62; "hola"})
&#62;&#62; posts.many?
=&#62; false
&#62;&#62; posts.size
=&#62; 1

La función [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Rails agrega un nuevo método al módulo  Enumerable.  Vamos al código para explicar cómo funciona este nuevo método:</p>
<pre>
&gt;&gt; Post.all.many?
=&gt; false
&gt;&gt; Post.create({:title =&gt; "hola", :post =&gt; "hola"})
&gt;&gt; Post.all.many?
=&gt; false
&gt;&gt; Post.create({:title =&gt; "otro hola", :post =&gt; "otro hola"})
&gt;&gt; Post.all.many?
=&gt; true
&gt;&gt; Post.all.size
=&gt; 2
&gt;&gt; posts = Post.find(:all, :conditions =&gt; {:post =&gt; "hola"})
&gt;&gt; posts.many?
=&gt; false
&gt;&gt; posts.size
=&gt; 1
</pre>
<p>La función de este nuevo método many? es básicamente encapsular collection.size &gt; 1, es un detalle bastante cómodo que opinan uds?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/50/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/50/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=50&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/06/13/rails-edge-nuevo-metodo-enumerablemany/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Terminé mi carrera&#8230;o mi caminata</title>
		<link>http://gastonramos.wordpress.com/2008/05/10/termine-mi-carrerao-mi-caminata/</link>
		<comments>http://gastonramos.wordpress.com/2008/05/10/termine-mi-carrerao-mi-caminata/#comments</comments>
		<pubDate>Sat, 10 May 2008 20:45:14 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[facultad]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=48</guid>
		<description><![CDATA[La semana pasada aprobé la última materia de la carrera Analista en Informática Aplicada, después de muuuucho tiempo al fin me recibí, todavía recuerdo cuando recién comenzaba a estudiar, tenía muchas energías y ganas de aprender más y más acerca de todo lo que tenga que ver con computadoras y debo reconocer que aprendí varias [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La semana pasada aprobé la última materia de la carrera Analista en Informática Aplicada, después de muuuucho tiempo al fin me recibí, todavía recuerdo cuando recién comenzaba a estudiar, tenía muchas energías y ganas de aprender más y más acerca de todo lo que tenga que ver con computadoras y debo reconocer que aprendí varias cosas en esa casa estudios pero también tengo que decir que las cosas que considero más importantes las aprendí afuera.  En mi caso particular hace bastante tiempo que me vengo dedicando al desarrollo de software más que nada al desarrollo web, he trabajado en varios lugares/empresas y también hice algunos proyectos personales que publiqué con licencia GPL. En la facultad tuve materias como: Fundamentos de Programación, Programación I, Programación II, Ingeniería de Software, Bases de datos y Optativa y Proyecto final, los lenguajes que conocí en esas materias fueron: <strong>Pascal</strong>, <strong>Delphi</strong>, <strong>Java</strong>, <strong>C++</strong> y <strong>Visual Basic</strong>, sin embargo los lenguajes en con los cuales yo he venido trabajando son: <strong>PHP</strong>,<strong> Perl</strong>, <strong>Ruby </strong>y algo de <strong>Shell Scripting</strong>&#8230; es cierto que en este último tiempo en mi trabajo me están obligando a usar java (uno de los motivos que hace que este lugar se torne bastante aburrido para mí). Debo decir que la mayoría de estas materias (de programación) estaban centradas en enseñar la sintaxis del lenguaje que se daba o en cuales botones había que hacer &#8220;click&#8221; para compilar con netbeans o como generar un reporte con el asistente de Visual Basic xx, otro detalle importante eran los exámenes, a excepción de proyecto final todos los exámenes se hacían en papel y para aprobar bastaba con que el programa &#8220;funcione&#8221; sin importar la forma de resolverlo.<br />
Acá les dejo el último exámen que rendí, el de Optativa y proyecto final:<br />
Este es el enunciado:<br />
<a href="http://gastonramos.files.wordpress.com/2008/05/examen-pf-1.png"><img class="alignnone size-medium wp-image-46" src="http://gastonramos.files.wordpress.com/2008/05/examen-pf-1.png?w=650&h=415" alt="Examen proyectofina 1/2" width="650" height="415" /></a><br />
<a href="http://gastonramos.files.wordpress.com/2008/05/examen-pf-2.png"><img class="alignnone size-medium wp-image-47" src="http://gastonramos.files.wordpress.com/2008/05/examen-pf-2.png?w=650&h=415" alt="Exámen proyecto fina 2/2" width="650" height="415" /></a></p>
<p>El título dice &#8220;Recuperatorio 2do parcial&#8221; se ve que fué reutilizado :), bueno acá les dejo mi solución:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">class Plancuenta  :Plc_id

  def self.calcular_nro_siguiente cuenta
    Plancuenta.find(:all).select{|p| p.Plc_IdPadre == cuenta}.
      sort{|x,y| x.Plc_NroAux  y.Plc_NroAux}.last.Plc_NroAux + 1
  end

  def self.agrega_plan plc_idpadre, plc_desc
    plc_nroaux = self.calcular_nro_siguiente(plc_idpadre)
    @plan_nuevo = Plancuenta.new( :Plc_IdPadre =&gt;  plc_idpadre,
                                   :Plc_NroAux =&gt; plc_nroaux,
                                   :Plc_Desc =&gt; plc_desc)
    @plan_nuevo.save
  end

  def self.pone_puntos_intermedios nro
    str = ''
    nro.to_s.each_byte{|b| str += b.chr + "."}
    str
  end

  def self.cuentas_imputables
    ci = Plancuenta.find_by_sql("select * from plancuenta where id NOT IN
                      (select Plc_IdPadre from plancuenta)")
  end

  def before_save
    self.Plc_id = (self.Plc_IdPadre.to_s + self.Plc_NroAux.to_s).to_i
    self.Plc_Cod =  (Plancuenta.pone_puntos_intermedios(self.Plc_id) +
                               self.Plc_NroAux.to_s)
  end

end
</pre>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">class Asientos  :Plc_Id

  def self.hacer_caja
    str = ''
    Plancuenta.cuentas_imputables.each{|c|
      str += "Cuenta: #{c.Plc_id} Saldo: #{Asientos.saldo(c.Plc_id)}\n"
    }
    puts str
  end

  def self.saldo cuenta
     Asientos.find_all_by_Plc_Id(cuenta).collect{|a| a.Asi_Debe}.sum - \
      Asientos.find_all_by_Plc_Id(cuenta).collect{|a| a.Asi_Haber}.sum
  end

end
</pre>
<p>Esos son los dos modelos que hice para la solución que me llevó 2hs, el código se podría mejorar bastante pero me quedé bastante conforme, recuerden que estaba bajo la presión de rendir un exámen y no tenía mucho tiempo, además el prosefor me entregó la estructura de la base de datos en un archivo .mdb (de MS Access) y como yo uso Linux me la tuve que rebuscar para leer ese archivo y meterlo dentro de una db en Mysql.<br />
Bueno la nota que me saqué fué 9 (sobresaliente).<br />
Que experiencia tuvieron uds. en sus facultades? espero comentarios&#8230;.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/48/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/48/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=48&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/05/10/termine-mi-carrerao-mi-caminata/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>

		<media:content url="http://gastonramos.files.wordpress.com/2008/05/examen-pf-1.png?w=300" medium="image">
			<media:title type="html">Examen proyectofina 1/2</media:title>
		</media:content>

		<media:content url="http://gastonramos.files.wordpress.com/2008/05/examen-pf-2.png?w=300" medium="image">
			<media:title type="html">Exámen proyecto fina 2/2</media:title>
		</media:content>
	</item>
		<item>
		<title>Snakes and rubies</title>
		<link>http://gastonramos.wordpress.com/2008/04/19/snakes-and-rubies/</link>
		<comments>http://gastonramos.wordpress.com/2008/04/19/snakes-and-rubies/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 16:42:17 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[snakes-and-rubies]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=43</guid>
		<description><![CDATA[Hace unos días que con Manuel Kaufmann (humitos) venimos comparando algunas cosas entre python y ruby, por simple curiosidad dado que son 2 lenguajes muy parecidos y que nos gustan mucho. Entonces se nos ocurrió escribir algunos problemas puntuales y sencillos para ver como los resuelve cada lenguaje, quiero aclarar que de ninguna manera queremos [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace unos días que con <a href="http://humitos.wordpress.com/">Manuel Kaufmann (humitos)</a> venimos comparando algunas cosas entre <strong>python</strong> y <strong>ruby</strong>, por simple curiosidad dado que son 2 lenguajes muy parecidos y que nos gustan mucho. Entonces se nos ocurrió escribir algunos problemas puntuales y sencillos para ver como los resuelve cada lenguaje, quiero aclarar que de ninguna manera queremos generar una guerra santa entre lenguajes ni mucho menos simplemente queremos divertirnos comparándolos. Entonces sin más vamos al grano, aquí va mi versión ruby de los ejercicios:</p>
<ol>
<li>Dado un array con nombres de persona eliminar los nombre que comienzan con &#8220;Pe&#8221;:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):005:0&gt; ["Pablo", "Raul",
"Pedro", "Pepe", "Ariel", "TerePe"].delete_if{|n| n =~ /^Pe/}

=&gt;["Pablo", "Raul", "Ariel", "TerePe"]</pre>
</li>
<li>Verificar si el mismo array contiene el nombre &#8220;Raul&#8221;
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;"> irb(main):006:0&gt; ["Pablo", "Raul",
"Pedro", "Pepe", "Ariel", "TerePe"].include?("Raul")

=&gt; true</pre>
</li>
<li>Generar un string con todos los nombres unidos por &#8220;-&#8221;
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):009:0&gt; ["Pablo", "Raul",
"Pedro", "Pepe", "Ariel", "TerePe"].join("-")

=&gt; "Pablo-Raul-Pedro-Pepe-Ariel-TerePe"</pre>
</li>
<li>Generar un segundo array con los nombres todos en minúsculas ordenado alfabéticamente
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):012:0&gt; (["Pablo", "Raul",
"Pedro", "Pepe", "Ariel", "TerePe"].collect{|n| n.downcase}).sort

=&gt; ["ariel", "pablo", "pedro", "pepe", "raul", "terepe"]</pre>
</li>
<li>Desordenar el array:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):016:0&gt; ["Pablo", "Raul",
"Pedro", "Pepe", "Ariel", "TerePe"].sort_by{ rand }

=&gt; ["TerePe", "Pedro", "Raul", "Pablo", "Pepe", "Ariel"]</pre>
</li>
<li>Averiguar si la lista siguiente tiene números pares:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):017:0&gt; [1, 2, 3, 4, 5].any?{|x| x % 2 == 0 }

=&gt; true</pre>
</li>
<li>Averiguar si toda la lista son números pares:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):018:0&gt; [1, 2, 3, 4, 5].all?{|x| x % 2 == 0 }

=&gt; false</pre>
</li>
<li>Obtener el producto de una lista de números:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):023:0&gt; [1, 2, 3, 4, 5].inject{|x,n| x * n }

=&gt; 120</pre>
</li>
<li>Obtener el factorial de 9999:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):025:0&gt; (1..9999).inject{|x,n| x * n }</pre>
<p>No voy a poner la salida del factorial por que es un número muuuuy&#8230;.. largo pero lo pueden probar por uds mismos en el intérprete interactivo de ruby.</li>
<li>Y por último averiguar si dos arrays son iguales:
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">irb(main):002:0&gt; [1, 2, 3, 4, 5].eql? [1, 2, 3, 4, 5]

=&gt; true</pre>
</li>
<p>Todos los ejemplos se probaron con la versión 1.9 de ruby. Ahora para ver las versión python vamos a tener que estar atentos al <a href="http://humitos.wordpress.com/">blog de humitos</a></ol>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/43/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/43/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=43&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/04/19/snakes-and-rubies/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Autotest desde linux  como en una Mac</title>
		<link>http://gastonramos.wordpress.com/2008/02/17/autotest-desde-linux-como-en-una-mac/</link>
		<comments>http://gastonramos.wordpress.com/2008/02/17/autotest-desde-linux-como-en-una-mac/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 00:36:10 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[bdd]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/?p=42</guid>
		<description><![CDATA[Mirando algunos videos de rspec y autotest, noté que al correr los tests, en la pantalla de la notebook del video salían unos hermosos mensajes con transparencias, investigando un poco encontré que esto se hace con un programa llamado growl que sólo viene para usuarios de Mac OS X   luego de tal desilusión [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mirando algunos videos de <a href="http://rspec.info" title="rspec" target="_blank">rspec </a>y <a href="http://www.zenspider.com/ZSS/Products/ZenTest/" title="autotest">autotest</a>, noté que al correr los tests, en la pantalla de la notebook del video salían unos hermosos mensajes con transparencias, investigando un poco encontré que esto se hace con un programa llamado <a href="http://growl.info/" title="growl">growl</a> que sólo viene para usuarios de Mac OS X  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> luego de tal desilusión comencé a buscar una alternativa en GNU/Linux &#8230; sí! hay un programa llamado aosd_cat que sirve para mostrar mensajes de texto UTF8 en la pantalla, vamos al grano:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
apt-get install aosd_cat</pre>
<p>Para probarlo podemos abrir una consola y ejecutar:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
 echo "Probando..." | aosd_cat   --back-color=black  \
          --fore-color=red \
          --back-opacity=135  --padding=50</pre>
<p>Ahora vamos a configurar autotest para que use aosd_cat</p>
<p>editamos el archivo ~/.autotest y ponemos lo siguiente:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
module Autotest::Growl
  def self.aosd_cat title, msg, color
    params = "--back-color=black --fade-in=20 --fade-out=100 \
                   --fore-color=#{color} --back-opacity=200 \
                   --padding=30 \  --shadow-offset=0 \
                   --x-offset=0 --y-offset=0"

    system "echo \"#{title} #{msg} \" | aosd_cat #{params}"

  end

  Autotest.add_hook :run do  |at|

    aosd_cat "Autotest running", "Started", "Orange"

  end

  Autotest.add_hook :ran_command do |at|
    results = [at.results].flatten.join("\n")
    output  = results\
    .slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/)
    if output
      if $~[2].to_i &gt; 0
        aosd_cat "FAIL !!!", "#{output}", "red"
      else
        color = output =~ /[1-9]\spending?/ ? "yellow" : "green"
        aosd_cat "Pass", "#{output}", "#{color}"
      end

  end
end</pre>
<p>Listo, ya podemos usar autotest y ver los mensajes como en una mac <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
autotest path-al-proyecto/</pre>
<p>Les dejo un <a href="http://www.gastonramos.com.ar/screencast/autotest-aosd_cat-rspec-emacs.html" title="screencast" target="_blank">screencast</a> para que vean como quedó.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/42/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/42/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=42&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/02/17/autotest-desde-linux-como-en-una-mac/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>acts_as_menu_role plugin</title>
		<link>http://gastonramos.wordpress.com/2008/01/15/acts_as_menu_role-plugin/</link>
		<comments>http://gastonramos.wordpress.com/2008/01/15/acts_as_menu_role-plugin/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 14:31:58 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[plugins]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/2008/01/15/acts_as_menu_role-plugin/</guid>
		<description><![CDATA[Hace poco tuve que hacer un desarrollo y uno de los requerimientos era hacer un menu (por controller) de acuerdo al rol del usuario, busqué sí ya había un plugin que haga este trabajo pero no encontré nada así me decidí a escribir uno y salió acts_as_menu_role, es algo muy simple, permite &#8220;armar&#8221; menúes basados [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace poco tuve que hacer un desarrollo y uno de los requerimientos era hacer un menu (por controller) de acuerdo al rol del usuario, busqué sí ya había un plugin que haga este trabajo pero no encontré nada así me decidí a escribir uno y salió acts_as_menu_role, es algo muy simple, permite &#8220;armar&#8221; menúes basados en roles.<br />
Aquí les dejo la url del sitio:<br />
<a href="http://actsasmenurole.googlecode.com/">http://actsasmenurole.googlecode.com/</a><br />
y el svn es:<br />
http://actsasmenurole.googlecode.com/svn/tags/acts_as_menu_role<br />
pruébenlo y cualquier cosa acepto sugerencias.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/41/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/41/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=41&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2008/01/15/acts_as_menu_role-plugin/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Módulos parte IV - Callbacks</title>
		<link>http://gastonramos.wordpress.com/2007/12/13/modulos-parte-iv-callbacks/</link>
		<comments>http://gastonramos.wordpress.com/2007/12/13/modulos-parte-iv-callbacks/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 23:59:22 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[modulos]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/2007/12/13/modulos-parte-iv-callbacks/</guid>
		<description><![CDATA[Callbacks y hooks
Para continuar, vamos a ver el tema &#8220;callbacks&#8221; relacionado con los módulos, los callbacks y los hooks son una técnica de metaprogramación bastante común. Estos métodos son invocados cada vez que ocurre un evento particular durante la ejecución del programa, por ejemplo:

Un método inexistente es llamado en un objeto
Una clase es &#8220;mixineada&#8221; en [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>Callbacks y hooks</h2>
<p>Para continuar, vamos a ver el tema &#8220;callbacks&#8221; relacionado con los módulos, los callbacks y los hooks son una técnica de <a href="http://es.wikipedia.org/wiki/Metaprogramaci%C3%B3n">metaprogramación</a> bastante común. Estos métodos son invocados cada vez que ocurre un evento particular durante la ejecución del programa, por ejemplo:</p>
<ul>
<li>Un método inexistente es llamado en un objeto</li>
<li>Una clase es &#8220;mixineada&#8221; en un módulo</li>
<li>El &#8220;subclaseado&#8221; de una clase</li>
<li>Un método de instancia es agregado a una clase</li>
</ul>
<h2>Atrapando las operaciones de include con Module#included</h2>
<p>Cuando un módulo es incluido (Mixed in)  dentro de una clase, si se define un método llamado <strong>included</strong> para ese módulo, entonces este método se ejecuta. El método recibe el nombre de la clase como argumento.</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
module A
  def self.included(clase)
    puts "He sido incluido en #{clase}."
  end
end

class B
  include A
end</pre>
<p>salida:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
=&gt; He sido incluido en la clase B.</pre>
<h2>Usando el callback included para agregar métodos de clase</h2>
<p>Podemos atrapar la operación de include para agregar métodos de clase a la clase que estamos incluyendo el módulo:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
module A
  def self.included(clase)
    def clase.metodo_de_clase
      puts "Agrego un metodo de clase."
    end
  end

  def metodo_de_instancia
    puts "Agrego un metodo de instancia."
  end

end

class B
  include A
end
b = B.new
b.metodo_de_instancia
B.metodo_de_clase</pre>
<p>salida:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
=&gt; Agrego un metodo de instancia.
=&gt; Agrego un metodo de clase</pre>
<p>Bueno como vemos Module#included es una manera muy útil para agregar cosas a las clases/módulos de nuestros programas.<br />
Esto fue todo, hasta el próximo post.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/40/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/40/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=40&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2007/12/13/modulos-parte-iv-callbacks/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
		<item>
		<title>Modulos parte III</title>
		<link>http://gastonramos.wordpress.com/2007/12/12/modulos-parte-iii/</link>
		<comments>http://gastonramos.wordpress.com/2007/12/12/modulos-parte-iii/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 21:56:42 +0000</pubDate>
		<dc:creator>Gastón Ramos</dc:creator>
		
		<category><![CDATA[modulos]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gastonramos.wordpress.com/2007/12/12/modulos-parte-iii/</guid>
		<description><![CDATA[Nuevamente amigos seguimos con el tema de los módulos en ruby, para continuar comenzaremos con un ejmeplo del uso de &#8220;super&#8221; entre módulos y clases:

module A
  def imprimir
    puts "Imprimo desde el --modulo-- A"
  end
end

class B
  include A
  def imprimir
    puts "Imprimo desde la --clase-- [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Nuevamente amigos seguimos con el tema de los módulos en ruby, para continuar comenzaremos con un ejmeplo del uso de <strong>&#8220;super&#8221; </strong>entre módulos y clases:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
module A
  def imprimir
    puts "Imprimo desde el --modulo-- A"
  end
end

class B
  include A
  def imprimir
    puts "Imprimo desde la --clase-- B"
    puts "Trigger para ejecutar el inmediato mas alto 'imprimir'"
    super
    puts "Vuelvo de la llamada a super."
  end
end
b = B.new
b.imprimir</pre>
<p>salida:</p>
<pre style="background:black none repeat scroll 0 50%;font-size:8pt;color:#00ff00;">
=&gt; Imprimo desde la --clase-- B
=&gt; Trigger para ejecutar el inmediato mas alto 'imprimir'
=&gt; Imprimo desde el --modulo-- A
=&gt; Vuelvo de la llamada a super.</pre>
<p>La instancia de B (b) recibe el mensaje &#8220;imprimir&#8221;, como vimos anteriormente comienza mirando la propia clase y encuentra el método &#8220;imprimir&#8221; , por otro lado dentro del método hay una llamada a super, esto significa que cuando encuentre un método &#8220;imprimir&#8221; debe continuar buscando hacia arriba al siguiente, la siguiente &#8220;ocurrencia&#8221; en este caso es la del módulo &#8220;A&#8221;.  Hasta acá todo genial, pero que pasa si el método en cuestión tiene argumentos?<br />
<strong><em>super</em> maneja los argumentos de la siguiente forma:</strong></p>
<ul>
<li><em> Invocado sólo, super automáticamente redirige los argumentos pasado al método desde dónde se invocó.</em></li>
<li><em> Invocado con una lista vacía de argumentos  &#8211;super()&#8211; no envía ningún argumento al método de arriba</em></li>
<li><em> Invocado con una lista de argumentos &#8211;super(a,b,c)&#8211; este envía exactamente estos argumentos</em></li>
</ul>
<p>Cómo siempre cortito y simple, nos vemos en el próximo capítulo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gastonramos.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gastonramos.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gastonramos.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gastonramos.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gastonramos.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gastonramos.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gastonramos.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gastonramos.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gastonramos.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gastonramos.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gastonramos.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gastonramos.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gastonramos.wordpress.com&blog=1034400&post=39&subd=gastonramos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gastonramos.wordpress.com/2007/12/12/modulos-parte-iii/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/gastonramos-128.jpg" medium="image">
			<media:title type="html">Gastón Ramos</media:title>
		</media:content>
	</item>
	</channel>
</rss>