<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[act_as_newbie]]></title>
  
  <link href="http://act-as-newbie.com/" />
  <updated>2011-10-30T13:49:55-02:00</updated>
  <id>http://act-as-newbie.com/</id>
  <author>
    <name><![CDATA[Rafael Barbosa]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/act-as-newbie" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="act-as-newbie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title type="html"><![CDATA[Client_side_validations and Dynamic Nested Forms]]></title>
    <link href="http://act-as-newbie.com/blog/2011/08/22/client-side-validations-and-dynamic-nested-forms/" />
    <updated>2011-08-22T20:59:00-03:00</updated>
    <id>http://act-as-newbie.com/blog/2011/08/22/client-side-validations-and-dynamic-nested-forms</id>
    <content type="html"><![CDATA[<p>Last week I found a little caveat when using the <a href="https://github.com/bcardarella/client_side_validations">client_side_validations</a> gem with ajax-loaded forms. It didn&#8217;t work out of the box.</p>

<p>Digging through the sourcecode I found this comment</p>

<figure class='code'><figcaption><span>rails.validations.js </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'>  <span class="c1">// Main hook</span>
</span><span class='line'>  <span class="c1">// If new forms are dynamically introduced into the DOM the .validate() method</span>
</span><span class='line'>  <span class="c1">// must be invoked on that form</span>
</span><span class='line'>  <span class="nx">$</span><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;form[data-validate]&#39;</span><span class="p">).</span><span class="nx">validate</span><span class="p">();</span> <span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>Ok, so I called <code>$("#my-form").validate()</code> on <code>ajax:success</code> and everything was fine! <em>Except it wasn&#8217;t =/</em></p>

<p>The behavior I understood, after banging my head against the wall several times was: if the form was entirely rendered in my ajax call it would validate ok, but if I added some fields inside it dynamically then I&#8217;d start getting those nasty <code>validators is not defined</code> errors and everything would go boom!</p>

<p>So how do I add some fields to the form and keep them &#8220;validatable&#8221;?
<a href="https://github.com/bcardarella/client_side_validations/issues/149">this issue</a> gave me some insight. And after rummaging the code a little more I found that this gem registers the validators in the <code>window</code> object. This process is done inside the form renderer, and that&#8217;s why the full rendered forms worked and adding just some of the fields did not. To accomplish that I created this helper</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'>  <span class="k">def</span> <span class="nf">add_dynamic_validators</span><span class="p">(</span><span class="n">builders</span><span class="p">)</span>
</span><span class='line'>    <span class="n">result</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span class='line'>    <span class="n">builders</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">builder</span><span class="o">|</span>
</span><span class='line'>      <span class="n">builder</span><span class="o">.</span><span class="n">object</span><span class="o">.</span><span class="n">client_side_validation_hash</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">validator</span><span class="o">|</span>
</span><span class='line'>        <span class="n">result</span> <span class="o">+=</span> <span class="s2">&quot;window[form_id].validators[&#39;</span><span class="si">#{</span><span class="n">builder</span><span class="o">.</span><span class="n">object_name</span><span class="si">}</span><span class="s2">[</span><span class="si">#{</span><span class="n">validator</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="si">}</span><span class="s2">]&#39;] = </span><span class="si">#{</span><span class="n">validator</span><span class="o">[</span><span class="mi">1</span><span class="o">].</span><span class="n">to_json</span><span class="si">}</span><span class="s2">;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>    <span class="n">result</span><span class="o">.</span><span class="n">html_safe</span>
</span><span class='line'>  <span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>It recieves an array of form builders and inspect it for the validators added by the gem. Then it prints the resulting instruction within the form partial, inside a function, to which I pass the id of the form that I want to validate.</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'>  <span class="kd">function</span> <span class="nx">update_dynamic_fields</span><span class="p">(</span><span class="nx">form_id</span><span class="p">)</span>
</span><span class='line'>  <span class="p">{</span>
</span><span class='line'>    <span class="o">&lt;%=</span> <span class="nx">add_dynamic_validators</span> <span class="nx">builders</span> <span class="o">%&gt;</span>
</span><span class='line'>  <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Then after the fields (with the script block) were added the to form you can call</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'>  <span class="kd">var</span> <span class="nx">$form</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s2">&quot;#my-form&quot;</span><span class="p">);</span>
</span><span class='line'>  <span class="nx">update_dynamic_fields</span><span class="p">(</span><span class="nx">$form</span><span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">));</span>
</span></code></pre></td></tr></table></div></figure>


<p>I know this is hacky as hell, but with this I was able to keep using this gem even inside pages with lots of moving parts.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ICanHaz templates - Dealing with the lack of dot notation]]></title>
    <link href="http://act-as-newbie.com/blog/2011/08/11/i-can-haz-js-template/" />
    <updated>2011-08-11T00:00:00-03:00</updated>
    <id>http://act-as-newbie.com/blog/2011/08/11/i-can-haz-js-template</id>
    <content type="html"><![CDATA[<p><strong>[UPDATE: 30/10/2011]</strong> According to <a href="https://github.com/janl/mustache.js/issues/97">this issue</a> we now have dot notation in moustache.js! Yay!</p>

<p>The <a href="http://icanhazjs.com/">ICanHaz</a> javascript templating system is just awesome. It is really simple, and powerful, BUT as all good things in life it&#8217;s not perfect! ICanHaz is built on top of <a href="https://github.com/janl/mustache.js">moustache.js</a> that, on his part, is a javascript implementation of the moustache templates. Originally the moustache implementation didn&#8217;t support dot notation for accessing nested objects. Like for instance</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'>    <span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="p">{</span>
</span><span class='line'>      <span class="nx">title</span> <span class="o">:</span> <span class="s2">&quot;Post title&quot;</span><span class="p">,</span>
</span><span class='line'>      <span class="nx">body</span> <span class="o">:</span> <span class="s2">&quot;post body&quot;</span><span class="p">,</span>
</span><span class='line'>      <span class="nx">author</span> <span class="o">:</span> <span class="p">{</span>
</span><span class='line'>        <span class="nx">name</span> <span class="o">:</span> <span class="s2">&quot;Rafael Barbosa&quot;</span><span class="p">,</span>
</span><span class='line'>        <span class="nx">age</span> <span class="o">:</span> <span class="mi">26</span>
</span><span class='line'>      <span class="p">}</span>
</span><span class='line'>    <span class="p">};</span>
</span></code></pre></td></tr></table></div></figure>


<p>Normally you can access the author&#8217;s name in my js files via dot notation like <code>post.author.name</code>, but until <a href="https://github.com/defunkt/mustache/commit/c183699ff1b23b4bc5efbfa3ed323ff9509855f7">this commit</a> this wasn&#8217;t possible within moustache&#8217;s templates and it still isn&#8217;t supported by the javascript implementation. So how can I access nested objects? The same way you iterate over arrays!</p>

<p>For the post object above, inside an ICanHaz template</p>

<div><script src='https://gist.github.com/1161362.js?file='></script>
<noscript><pre><code>&lt;div class=&quot;post&quot;&gt;
  &lt;h3&gt;{{ title }}&lt;/h3&gt;
  &lt;div&gt;{{ body }}&lt;/div&gt;
  &lt;div&gt;A post by {{ #author }}{{ name }}{{author}}&lt;/div&gt;
&lt;/div&gt;</code></pre></noscript></div>


<p>And that&#8217;ll do it. There&#8217;s an <a href="https://github.com/janl/mustache.js/issues/97">open issue</a> on the moustache.js github for the inclusion of the dot notation.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Show hierarchical data using recursive partials]]></title>
    <link href="http://act-as-newbie.com/blog/2011/08/03/recursive-partials/" />
    <updated>2011-08-03T00:00:00-03:00</updated>
    <id>http://act-as-newbie.com/blog/2011/08/03/recursive-partials</id>
    <content type="html"><![CDATA[<p>Yesterday I needed to show a deep nested tree in a view. The first solution that crossed my mind was something along the lines of a recursive helper like this one.</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">def</span> <span class="nf">display_tree_recursive</span><span class="p">(</span><span class="n">tree</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">)</span>
</span><span class='line'>  <span class="n">ret</span> <span class="o">=</span> <span class="s2">&quot;&lt;ul&gt;&quot;</span>
</span><span class='line'>  <span class="n">tree</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">node</span><span class="o">|</span>
</span><span class='line'>    <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">parent_id</span> <span class="o">==</span> <span class="n">parent_id</span>
</span><span class='line'>      <span class="n">ret</span> <span class="o">+=</span> <span class="s2">&quot;&lt;li&gt;&quot;</span>
</span><span class='line'>      <span class="n">ret</span> <span class="o">+=</span> <span class="n">link_to</span> <span class="n">node</span><span class="o">.</span><span class="n">title</span>
</span><span class='line'>      <span class="n">ret</span> <span class="o">+=</span> <span class="n">display_tree_recursive</span><span class="p">(</span><span class="n">tree</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
</span><span class='line'>      <span class="n">ret</span> <span class="o">+=</span> <span class="s2">&quot;&lt;/li&gt;&quot;</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'>  <span class="n">ret</span> <span class="o">+=</span> <span class="s2">&quot;&lt;/ul&gt;&quot;</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>That&#8217;s ok for simple ul-li pairs but I needed much more markup since my task was to show this information as nested accordions. Wouldn&#8217;t it be better if I could define a partial and call it from inside itself passing the children as its <code>locals</code> variables? Guess what? It works just like that! =)</p>

<p>In the index view</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='erb'><span class='line'><span class="x">&lt;ul class=&quot;accordion&quot;&gt;</span>
</span><span class='line'><span class="x">    </span><span class="cp">&lt;%</span> <span class="vi">@sections</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">section</span><span class="o">|</span> <span class="cp">%&gt;</span><span class="x"></span>
</span><span class='line'><span class="x">      &lt;li&gt;</span>
</span><span class='line'><span class="x">        &lt;h3&gt;</span><span class="cp">&lt;%=</span> <span class="n">section</span><span class="o">.</span><span class="n">name</span> <span class="cp">%&gt;</span><span class="x">&lt;/h3&gt;</span>
</span><span class='line'><span class="x">        &lt;div class=&quot;accordion-content&quot;&gt;</span>
</span><span class='line'><span class="x">          &lt;ul class=&quot;accordion&quot;&gt;</span>
</span><span class='line'><span class="x">            </span><span class="cp">&lt;%=</span> <span class="n">render</span> <span class="s2">&quot;section/section_children&quot;</span><span class="p">,</span> <span class="ss">:section</span> <span class="o">=&gt;</span> <span class="n">section</span> <span class="cp">%&gt;</span><span class="x"></span>
</span><span class='line'><span class="x">          &lt;/ul&gt;</span>
</span><span class='line'><span class="x">        &lt;/div&gt;</span>
</span><span class='line'><span class="x">      &lt;/li&gt;</span>
</span><span class='line'><span class="x">    </span><span class="cp">&lt;%</span> <span class="k">end</span> <span class="cp">%&gt;</span><span class="x"></span>
</span><span class='line'><span class="x">  &lt;/ul&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>That <code>section/section_children</code> partial is the trick. Inside it we have</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='erb'><span class='line'><span class="cp">&lt;%</span> <span class="n">section</span><span class="o">.</span><span class="n">children</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">child</span><span class="o">|</span> <span class="cp">%&gt;</span><span class="x"></span>
</span><span class='line'><span class="x">  &lt;li&gt;</span>
</span><span class='line'><span class="x">    &lt;h3 &gt;&lt;a href=&quot;#&quot; class=&quot;header&quot;&gt;</span><span class="cp">&lt;%=</span> <span class="n">child</span><span class="o">.</span><span class="n">name</span> <span class="cp">%&gt;</span><span class="x">&lt;/a&gt;&lt;/h3&gt;</span>
</span><span class='line'><span class="x">      &lt;div class=&quot;accordion-content&quot;&gt;</span>
</span><span class='line'><span class="x">        &lt;ul class=&quot;accordion&quot;&gt;</span>
</span><span class='line'><span class="x">          </span><span class="cp">&lt;%=</span> <span class="n">render</span> <span class="s2">&quot;section/section_children&quot;</span><span class="p">,</span> <span class="ss">:section</span> <span class="o">=&gt;</span> <span class="n">child</span> <span class="cp">%&gt;</span><span class="x"></span>
</span><span class='line'><span class="x">        &lt;/ul&gt;</span>
</span><span class='line'><span class="x">      &lt;/div&gt;</span>
</span><span class='line'><span class="x">  &lt;/li&gt;</span>
</span><span class='line'><span class="cp">&lt;%</span> <span class="k">end</span> <span class="cp">%&gt;</span><span class="x"></span>
</span></code></pre></td></tr></table></div></figure>


<p>and that&#8217;s it!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Starting things up]]></title>
    <link href="http://act-as-newbie.com/blog/2011/08/02/a-start/" />
    <updated>2011-08-02T00:00:00-03:00</updated>
    <id>http://act-as-newbie.com/blog/2011/08/02/a-start</id>
    <content type="html"><![CDATA[<p>Time to start sharing whatever knowledge comes my way! This will be the first post on this blog and I hope many will follow. I&#8217;ll mainly talk about Rails and its fellas, so if that&#8217;s your thing stick around!</p>
]]></content>
  </entry>
  
</feed>

