<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Freelance Mobile & Web Developer]]></title>
  <link href="http://filipemoreira.com/atom.xml" rel="self"/>
  <link href="http://filipemoreira.com/"/>
  <updated>2012-03-15T16:47:30+01:00</updated>
  <id>http://filipemoreira.com/</id>
  <author>
    <name><![CDATA[Filipe Moreira]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Using pry with Rails]]></title>
    <link href="http://filipemoreira.com/blog/2012/03/09/using-pry-with-rails/"/>
    <updated>2012-03-09T10:00:00+01:00</updated>
    <id>http://filipemoreira.com/blog/2012/03/09/using-pry-with-rails</id>
    <content type="html"><![CDATA[<p><a href="http://pry.github.com/">Pry</a> is a IRB replacement with some very nice additional features. I&#8217;ll link to additional resources at the end of this post.</p>

<p>Some of the additional features pry offers us include:</p>

<ul>
<li>Native syntax highlighting</li>
<li>Source and document browsing</li>
<li>Very flexible plugin architecture</li>
</ul>


<h2>Installation</h2>

<p>You can install and run pry with:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>gem install pry
</span><span class='line'><span class="nv">$ </span>pry
</span></code></pre></td></tr></table></div></figure>


<p>They are a few ways to integrate pry with Rails but the one I like it the most came from <a href="http://twitter.com/fnando">@fnando</a> and originally from <a href="http://lucapette.com/pry/pry-everywhere/">Luca Pette</a>. Instead of patching of Rails initializer file, as described on the <a href="https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry">Pry Wiki</a>, you can use the following method:</p>

<p>On IRB initialization file load Pry instead:</p>

<figure class='code'><figcaption><span>~/.irbrc</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>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s1">&#39;pry&#39;</span>
</span><span class='line'>  <span class="no">Pry</span><span class="o">.</span><span class="n">start</span>
</span><span class='line'>  <span class="nb">exit</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span> <span class="o">=&gt;</span> <span class="n">e</span>
</span><span class='line'>  <span class="nb">warn</span> <span class="s2">&quot;=&gt; Unable to load pry&quot;</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>This will load try to load Pry and if failed will print a message to stdout. The exit command after Pry&#8217;s invocation is to avoid going back to IRB after the Pry session has finished.</p>

<p>The other part of the configuration is done on .pryrc</p>

<figure class='code'><figcaption><span>~/.pryrc</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>
<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">if</span> <span class="n">defined?</span><span class="p">(</span><span class="no">Rails</span><span class="p">)</span>
</span><span class='line'>  <span class="k">begin</span>
</span><span class='line'>    <span class="nb">require</span> <span class="s2">&quot;rails/console/app&quot;</span>
</span><span class='line'>    <span class="nb">require</span> <span class="s2">&quot;rails/console/helpers&quot;</span>
</span><span class='line'>  <span class="k">rescue</span> <span class="no">LoadError</span> <span class="o">=&gt;</span> <span class="n">e</span>
</span><span class='line'>    <span class="nb">require</span> <span class="s2">&quot;console_app&quot;</span>
</span><span class='line'>    <span class="nb">require</span> <span class="s2">&quot;console_with_helpers&quot;</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>This will allow you to continue using rails console but using pry instead of irb. I also like to use awesome_print so I added this to my config file:</p>

<figure class='code'><figcaption><span>~/.pryrc</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>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s2">&quot;awesome_print&quot;</span>
</span><span class='line'>  <span class="no">Pry</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">print</span> <span class="o">=</span> <span class="nb">proc</span> <span class="p">{</span><span class="o">|</span><span class="n">output</span><span class="p">,</span> <span class="n">value</span><span class="o">|</span> <span class="no">Pry</span><span class="o">::</span><span class="no">Helpers</span><span class="o">::</span><span class="no">BaseHelpers</span><span class="o">.</span><span class="n">stagger_output</span><span class="p">(</span><span class="s2">&quot;=&gt; </span><span class="si">#{</span><span class="n">value</span><span class="o">.</span><span class="n">ai</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">output</span><span class="p">)}</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span> <span class="o">=&gt;</span> <span class="n">err</span>
</span><span class='line'>   <span class="nb">warn</span> <span class="s2">&quot;=&gt; Unable to load awesome_print&quot;</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>This will try to load awesome_print gem and failing to do that will print a message to stdout.</p>

<p>For more information on Pry see:</p>

<ul>
<li><a href="http://pry.github.com/">Pry&#8217;s website</a></li>
<li><a href="http://railscasts.com/episodes/280-pry-with-rails">Pry Railscast</a></li>
<li><a href="https://github.com/filipeamoreira/dot-files/blob/master/_irbrc">My irbrc</a></li>
<li><a href="https://github.com/filipeamoreira/dot-files/blob/master/_pryrc">My pryrc</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Routing a Wordpress blog inside a Rails app]]></title>
    <link href="http://filipemoreira.com/blog/2012/02/01/routing-a-wordpress-blog-inside-a-rails-app/"/>
    <updated>2012-02-01T07:22:00+01:00</updated>
    <id>http://filipemoreira.com/blog/2012/02/01/routing-a-wordpress-blog-inside-a-rails-app</id>
    <content type="html"><![CDATA[<p>This post describe how to host a subdomain route for a alien application inside a Ruby on Rails app. Wordpress is used here as an example but these instructions work with any outside url.</p>

<p>If you do have control over the web server you can use a url rewrite to accomplish this. See steps for doing this using <a href="http://www.igvita.com/2007/07/04/integrating-wordpress-and-rails/">Apache</a> or <a href="http://www.kalzumeus.com/2009/08/22/using-wordpress-and-rails-on-the-same-domain/">nginx</a>.</p>

<p>However what about when you have no control over the web server layer (such as when hosting the Rails application on Heroku)? The answer is to use the Rails routing engine do the routing.</p>

<figure class='code'><figcaption><span>config/routes.rb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'> <span class="n">match</span> <span class="s2">&quot;/blog&quot;</span> <span class="o">=&gt;</span> <span class="n">redirect</span><span class="p">(</span><span class="s2">&quot;http://yourwordpressblog.com&quot;</span><span class="p">),</span> <span class="ss">:as</span> <span class="o">=&gt;</span> <span class="ss">:blog</span>
</span></code></pre></td></tr></table></div></figure>


<p>This will match any &#8216;/blog&#8217; route and redirect to your chosen domain.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Full text search with MongoDB]]></title>
    <link href="http://filipemoreira.com/blog/2012/01/24/full-text-search-with-mongodb/"/>
    <updated>2012-01-24T23:10:00+01:00</updated>
    <id>http://filipemoreira.com/blog/2012/01/24/full-text-search-with-mongodb</id>
    <content type="html"><![CDATA[<p>Recently I had to implement full text search on a Ruby on Rails application I was developing and based on my needs the easiest way to do it was building a helper array with the keywords needed and search using those keywords.</p>

<p>To illustrate this I&#8217;ve implemented stock tickers search using the awesome <a href="http://rstat.us/">rstat.us</a> project. Have a look at my <a href="https://github.com/filipeamoreira/rstat.us">Github fork.</a></p>

<figure class='code'><figcaption><span>update.rb</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>
<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>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">class</span> <span class="nc">Update</span>
</span><span class='line'><span class="o">.</span><span class="n">.</span><span class="o">.</span>
</span><span class='line'>    <span class="c1"># Adds stocks array mentions</span>
</span><span class='line'>    <span class="n">key</span><span class="p">:</span> <span class="n">stocks</span><span class="p">,</span> <span class="nb">Array</span><span class="p">,</span> <span class="ss">:default</span> <span class="o">=&gt;</span> <span class="o">[]</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1"># Parses update text and build stocks array for simpler search</span>
</span><span class='line'>  <span class="k">def</span> <span class="nf">parse_symbols</span>
</span><span class='line'>    <span class="n">stocks</span> <span class="o">=</span> <span class="o">[]</span>
</span><span class='line'>    <span class="nb">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">update</span><span class="o">|</span>
</span><span class='line'>      <span class="n">stocks</span> <span class="o">&lt;&lt;</span> <span class="n">update</span> <span class="k">if</span> <span class="n">update</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">==</span> <span class="s1">&#39;$&#39;</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">stocks</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>and then the controller:</p>

<figure class='code'><figcaption><span>updates_controller.rb</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>
<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>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">class</span> <span class="nc">UpdatesController</span> <span class="o">&lt;</span> <span class="no">ApplicationController</span>
</span><span class='line'><span class="o">.</span><span class="n">.</span><span class="o">.</span>
</span><span class='line'>    <span class="k">def</span> <span class="nf">create</span>
</span><span class='line'>      <span class="o">.</span><span class="n">.</span><span class="o">.</span>
</span><span class='line'>      <span class="n">u</span> <span class="o">=</span> <span class="no">Update</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">:text</span> <span class="o">=&gt;</span> <span class="n">params</span><span class="o">[</span><span class="ss">:text</span><span class="o">]</span><span class="p">,</span>
</span><span class='line'>          <span class="ss">:referral_id</span> <span class="o">=&gt;</span> <span class="n">params</span><span class="o">[</span><span class="ss">:referral_id</span><span class="o">]</span><span class="p">,</span>
</span><span class='line'>          <span class="ss">:author</span> <span class="o">=&gt;</span> <span class="n">current_user</span><span class="o">.</span><span class="n">author</span><span class="p">,</span>
</span><span class='line'>          <span class="ss">:twitter</span> <span class="o">=&gt;</span> <span class="n">do_tweet</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>      <span class="n">u</span><span class="o">.</span><span class="n">stocks</span> <span class="o">=</span> <span class="n">u</span><span class="o">.</span><span class="n">parse_symbols</span>
</span><span class='line'>      <span class="o">.</span><span class="n">.</span><span class="o">.</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>So it basically looks for words starting with $ and adds it to the stocks array. We can then search using</p>

<figure class='code'><figcaption><span>Perform search using MongoDB built in text search</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="no">Update</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="ss">:conditions</span> <span class="o">=&gt;</span> <span class="p">{</span><span class="ss">:stocks</span> <span class="o">=&gt;</span> <span class="s1">&#39;$goog&#39;</span><span class="p">})</span>
</span></code></pre></td></tr></table></div></figure>


<p>There are different solutions such as <a href="https://github.com/mauriciozaffari/mongoid_search">mongoid_search</a> that could be used but for my needs this approach works the best.</p>

<p>MongoDB gives a lot of flexibility for the developer and speeds things up. Of course there are trade-offs to be made while using so YMMV.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Starting on the blogging path]]></title>
    <link href="http://filipemoreira.com/blog/2012/01/16/starting-on-the-blogging-path/"/>
    <updated>2012-01-16T10:07:00+01:00</updated>
    <id>http://filipemoreira.com/blog/2012/01/16/starting-on-the-blogging-path</id>
    <content type="html"><![CDATA[<p>After trying to blog and failing to continue writing I feel the need to start once more. Hopefully this time I&#8217;ll be able to sit down and write about technical subjects that interest me.</p>

<p>My intention with this blog is to share findings and document my learning process as I build and work on different applications.</p>

<p>More to come soon and thanks for stopping by.</p>
]]></content>
  </entry>
  
</feed>

