Skip to content
Browse files

mongoid part 3

  • Loading branch information...
1 parent f44ab2e commit 1345c7c600d39930abffcb01062b73d2f2f845c8 @eladmeidar committed Mar 8, 2010
View
53 ...creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010.textile
@@ -0,0 +1,53 @@
+---
+title: Creating a Rails authentication system on Mongoid Part 3 - Password Resets
+layout: post
+---
+
+In the last "post":http://blog.eizesus.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010/ we added some functionality to our authentication system. We added a "Remember me" functionality to allow users to log in using a cookie and we also added an activation process that authenticates the email address we get from the user.
+
+On this post, i'll cover *password resets*:
+
+
+h4. Password Resets
+
+The logic behind a password reset process is rather simple, basically it is very similar to the *activation* process we did before.
+
+* We create some kind of a temporary (perishable) token that identifies the user who wishes to reset the password.
+* We send the user an email with a link that contains that token and leads to a page that allows the user to choose a new password.
+* We update the new password, and start dancing.
+
+h5. User.rb
+
+First, we are going to add a field that will contain that reset token, and a method to generate it when required:
+
+<script src="http://gist.github.com/325301.js?file=user.rb"></script>
+
+That's basically it.
+
+h5. UsersController
+
+We need to add a few actions:
+
+* one to generate the token and trigger the reset password email.
+* one to show a "reset password" form with password and password confirmation field.
+* and last, an action to save the new password and log in the user. We can't use the @#update@ action because we need a little different behavior that i think is enough to justify a separate action: First we need to find the user record based on a token not by @id@ and second, we need to use our @logout_keeping_session@ to make sure no malicious changes are made to a logged in user if it exists.
+
+The process will work like that:
+
+* The user will be able to go on a form and enter his email in case they forgot the password, that action will be @UsersController#forgot_password@.
+* If the user entered a valid email address (and one that identifies a user on the application), then @UsersController#send_password_reset@ will generate a new reset token and send the user with reset instructions.
+* When the user follows the reset link on the email, they'll arrive on @UsersController#reset_password@ that will match the reset token from the URI to a specific user on the system and allow the user to enter a new password if matched.
+* Once the user had changed and saved the password, they will be logged off and asked to re-login with their new password.
+
+Here's the current @UsersController@:
+
+<script src="http://gist.github.com/325973.js?file=users_controller.rb"></script>
+
+Source for the "UsersController#forgot_password view":http://gist.github.com/325981, "UsersController#send_password_reset view":http://gist.github.com/325982, "UserMailer model"http://gist.github.com/325983, "Reset instructions mail template":http://gist.github.com/325984 and "UsersController#reset_password":http://gist.github.com/325986 added.
+
+
+h4. Conclusion
+
+Again, it seems that we tackled most of the problems we had with Mongoid in the early stages and practically nothing bothered us too much since the first part of this series.
+
+I keep the implementation of a background processor until a bit later, it is not that important at this stage so we'll get back to it later.
View
173 ...ating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010/index.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Emphasized Insanity - Creating a Rails authentication system on Mongoid Part 3 - Password Resets</title>
+ <script type="text/javascript" src="/javascripts/application.js"></script>
+ <link rel="stylesheet" type="text/css" href="/stylesheets/application.css">
+<link rel="alternate" type="application/rss+xml" title="Emphasized Insanity - Elad Meidar" href="http://feeds.feedburner.com/EladOnRails" />
+</head>
+<body>
+ <div id="wrap">
+ <div id="header">
+ <img src="/images/500.png" alt="Emphasized Insanity" />
+ <div id="summary">
+ <h1><strong>EmphasizedInsanity</strong> at <strong>/life
+ </strong></h1>
+ <h2>undefined method `Sanity` for #&lt;EladMeidar::Developer:0x12e0670&gt;</h2>
+ <ul>
+ <li class="first"><strong>file:</strong> <code>
+ brain.rb</code></li>
+ <li><strong>location:</strong> <code>instance_missing
+ </code></li>
+ <li class="last"><strong>line:
+ </strong> 1</li>
+ </ul>
+ </div>
+ <div class="clear"></div>
+ </div>
+
+ <div id="backtrace" class='expanded'>
+ <h3>BACKTRACE</h3>
+ <p><a href="#" id="expando"
+ onclick="toggleBacktrace(); return false">(condense)</a></p>
+ <p id="nav"><strong>JUMP TO:</strong>
+ <a href="#get-info">GET</a>
+ <a href="#post-info">POSTS</a>
+ <a href="#cookie-info">COOKIES</a>
+ <a href="#env-info">ENV</a>
+ </p>
+ <div class="clear"></div>
+
+ <ul id="backtrace-ul">
+
+ <li class="frame-info framework">
+ <code>
+ No, this is not a real Sinatra error :). <br/>
+ This is the personal homepage of Elad Meidar, a web developer and an entrepreneur specializing in Ruby on Rails. I hang around Fort Lauderdale, FL and Tel-Aviv in Israel, and i am currently running <a href="http://www.nautilus6.com">Nautilus6</a> so Feel free to contact me regarding projects :).<br/>
+ I am a proud member of <a href="http://www.railsbridge.org">RailsBridge</a>, Helping new <a href="http://www.railsmentors.org/users/185">Rails developers</a> get into our world and also contributed a few <a href="http://contributors.rubyonrails.org/contributors/elad-meidar/commits">Patches</a> to the Ruby on Rails core.
+ </code>
+ </li>
+ <li class="code framework">
+ </li>
+ </ul>
+ </div> <!-- /BACKTRACE -->
+
+ <div id="get">
+<a id="homepage_link" href="/">Back to Posts List</a>
+ <h3 id="get-info">GET</h3>
+ <h3 class="post_title"><a href="/2010/03/creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010">Creating a Rails authentication system on Mongoid Part 3 - Password Resets</a></h3>
+ <div class="single_post">
+ <p>In the last <a href="http://blog.eizesus.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010/">post</a> we added some functionality to our authentication system. We added a &#8220;Remember me&#8221; functionality to allow users to log in using a cookie and we also added an activation process that authenticates the email address we get from the user.</p>
+<p>On this post, i&#8217;ll cover <strong>password resets</strong>:</p>
+<h4>Password Resets</h4>
+<p>The logic behind a password reset process is rather simple, basically it is very similar to the <strong>activation</strong> process we did before.</p>
+<ul>
+ <li>We create some kind of a temporary (perishable) token that identifies the user who wishes to reset the password.</li>
+ <li>We send the user an email with a link that contains that token and leads to a page that allows the user to choose a new password.</li>
+ <li>We update the new password, and start dancing.</li>
+</ul>
+<h5>User.rb</h5>
+<p>First, we are going to add a field that will contain that reset token, and a method to generate it when required:</p>
+<script src="http://gist.github.com/325301.js?file=user.rb"></script><p>That&#8217;s basically it.</p>
+<h5>UsersController</h5>
+<p>We need to add a few actions:</p>
+<ul>
+ <li>one to generate the token and trigger the reset password email.</li>
+ <li>one to show a &#8220;reset password&#8221; form with password and password confirmation field.</li>
+ <li>and last, an action to save the new password and log in the user. We can&#8217;t use the <code>#update</code> action because we need a little different behavior that i think is enough to justify a separate action: First we need to find the user record based on a token not by <code>id</code> and second, we need to use our <code>logout_keeping_session</code> to make sure no malicious changes are made to a logged in user if it exists.</li>
+</ul>
+<p>The process will work like that:</p>
+<ul>
+ <li>The user will be able to go on a form and enter his email in case they forgot the password, that action will be <code>UsersController#forgot_password</code>.</li>
+ <li>If the user entered a valid email address (and one that identifies a user on the application), then <code>UsersController#send_password_reset</code> will generate a new reset token and send the user with reset instructions.</li>
+ <li>When the user follows the reset link on the email, they&#8217;ll arrive on <code>UsersController#reset_password</code> that will match the reset token from the <span class="caps">URI</span> to a specific user on the system and allow the user to enter a new password if matched.</li>
+ <li>Once the user had changed and saved the password, they will be logged off and asked to re-login with their new password.</li>
+</ul>
+<p>Here&#8217;s the current <code>UsersController</code>:</p>
+<script src="http://gist.github.com/325973.js?file=users_controller.rb"></script><p>Source for the <a href="http://gist.github.com/325981">UsersController#forgot_password view</a>, <a href="http://gist.github.com/325982">UsersController#send_password_reset view</a>, &#8220;UserMailer model&#8221;http://gist.github.com/325983, <a href="http://gist.github.com/325984">Reset instructions mail template</a> and <a href="http://gist.github.com/325986">UsersController#reset_password</a> added.</p>
+<h4>Conclusion</h4>
+<p>Again, it seems that we tackled most of the problems we had with Mongoid in the early stages and practically nothing bothered us too much since the first part of this series.</p>
+<p>I keep the implementation of a background processor until a bit later, it is not that important at this stage so we&#8217;ll get back to it later.</p>
+ </div>
+ <div class="clear"></div>
+</div> <!-- /GET -->
+
+<div id="post">
+ <h3 id="post-info">POST</h3>
+ <div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/emphasizedinsanity/embed.js"></script><noscript><a href="http://emphasizedinsanity.disqus.com/?url=ref">View the discussion thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
+ <div class="clear"></div>
+</div> <!-- /POST -->
+
+ <div id="cookies">
+ <h3 id="cookie-info">COOKIES</h3>
+
+ <p class="no-data">I Don't have cookies.</p>
+
+ <div class="clear"></div>
+ </div> <!-- /COOKIES -->
+
+ <div id="rack">
+ <h3 id="env-info">ELAD ENV</h3>
+ <table class="req">
+ <tr>
+ <th>Variable</th>
+ <th>Value</th>
+ </tr>
+
+ <tr>
+ <td>LINKEDIN</td>
+ <td class="code"><div><a href="http://www.linkedin.com/in/eladmeidar">http://www.linkedin.com/in/eladmeidar</a></div></td>
+ </tr>
+
+ <tr>
+ <td>TWITTER</td>
+ <td class="code"><div><a href="http://www.twitter.com/eladmeidar">http://www.twitter.com/eladmeidar</a></div></td>
+ </tr>
+
+ <tr>
+ <td>FACEBOOK</td>
+ <td class="code"><div><a href="http://www.facebook.com/eladmeidar">http://www.facebook.com/eladmeidar</a></div></td>
+ </tr>
+
+ <tr>
+ <td>GITHUB</td>
+ <td class="code"><div><a href="http://github.com/eladmeidar">http://github.com/eladmeidar</a></div></td>
+ </tr>
+
+ <tr>
+ <td>WWR</td>
+ <td class="code"><div><code>{ :working_with_rails => '<a href="http://www.workingwithrails.com/person/5844-elad-meidar">http://www.workingwithrails.com/person/5844-elad-meidar</a>' }</code></div></td>
+ </tr>
+
+ <tr>
+ <td>IRC</td>
+ <td class="code"><div><code>{ 'irc.freenode.net' => [ '#rubyonrails', '#railsbridge', '#ruby', '#jquery' ]}</code></div></td>
+ </tr>
+ <tr>
+ <td>SKYPE</td>
+ <td class="code"><div>eladmeidar</div></td>
+ </tr>
+ </table>
+ <div class="clear"></div>
+ </div> <!-- /RACK ENV -->
+
+ <div class="stats">
+ <p>
+ <a href="http://feeds2.feedburner.com/EladOnRails"><img src="http://feeds2.feedburner.com/~fc/EladOnRails?bg=FFFFFF&amp;fg=444444&amp;anim=0" height="26" width="88" style="border:0" alt="" /></a>
+ <script type="text/javascript" language="javascript" src="http://twittercounter.com/embed/?username=eladmeidar&style=white"></script>
+ </p>
+ <p>
+ <script type="text/javascript" src="http://s51.sitemeter.com/js/counter.js?site=s51eizesusrulez"></script>
+ <noscript>
+ <a href="http://s51.sitemeter.com/stats.asp?site=s51eizesusrulez" target="_top">
+ <img src="http://s51.sitemeter.com/meter.asp?site=s51eizesusrulez" alt="Site Meter" border="0"/></a>
+ </noscript>
+ </p>
+ <div class="clear"></div>
+ </div>
+ <p id="explanation">You're seeing this error because I think it is funny.</p>
+
+ </div> <!-- /WRAP -->
+ </body>
+</html>
View
5 _site/archive.html
@@ -65,6 +65,11 @@ <h3 id="get-info">GET</h3>
<h3 id="post-info">POST</h3>
<div class="post">
+ <h4><a href="/2010/03/creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010">Creating a Rails authentication system on Mongoid Part 3 - Password Resets</a></h4>
+ <em>08/03/2010</em>
+ </div>
+
+ <div class="post">
<h4><a href="/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010">Creating a Rails authentication system on Mongoid Part 2 - Remember me and Account activation</a></h4>
<em>07/03/2010</em>
</div>
View
68 _site/feed/atom.xml
@@ -4,7 +4,7 @@
<title>Emphasized Insanity</title>
<link href="http://blog.eizesus.com/feed/atom.xml" rel="self"/>
<link href="http://blog.eizesus.com/"/>
- <updated>2010-03-07T18:37:56-05:00</updated>
+ <updated>2010-03-08T20:14:39-05:00</updated>
<id>http://blog.eizesus.com/</id>
<author>
<name>Elad Meidar</name>
@@ -13,6 +13,44 @@
<entry>
+ <title>Creating a Rails authentication system on Mongoid Part 3 - Password Resets</title>
+ <link href="http://blog.eizesus.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010"/>
+ <updated>2010-03-08T00:00:00-05:00</updated>
+ <id>http://gitready.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010</id>
+ <content type="html">&lt;p&gt;In the last &lt;a href=&quot;http://blog.eizesus.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010/&quot;&gt;post&lt;/a&gt; we added some functionality to our authentication system. We added a &amp;#8220;Remember me&amp;#8221; functionality to allow users to log in using a cookie and we also added an activation process that authenticates the email address we get from the user.&lt;/p&gt;
+&lt;p&gt;On this post, i&amp;#8217;ll cover &lt;strong&gt;password resets&lt;/strong&gt;:&lt;/p&gt;
+&lt;h4&gt;Password Resets&lt;/h4&gt;
+&lt;p&gt;The logic behind a password reset process is rather simple, basically it is very similar to the &lt;strong&gt;activation&lt;/strong&gt; process we did before.&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;We create some kind of a temporary (perishable) token that identifies the user who wishes to reset the password.&lt;/li&gt;
+ &lt;li&gt;We send the user an email with a link that contains that token and leads to a page that allows the user to choose a new password.&lt;/li&gt;
+ &lt;li&gt;We update the new password, and start dancing.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h5&gt;User.rb&lt;/h5&gt;
+&lt;p&gt;First, we are going to add a field that will contain that reset token, and a method to generate it when required:&lt;/p&gt;
+&lt;script src=&quot;http://gist.github.com/325301.js?file=user.rb&quot;&gt;&lt;/script&gt;&lt;p&gt;That&amp;#8217;s basically it.&lt;/p&gt;
+&lt;h5&gt;UsersController&lt;/h5&gt;
+&lt;p&gt;We need to add a few actions:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;one to generate the token and trigger the reset password email.&lt;/li&gt;
+ &lt;li&gt;one to show a &amp;#8220;reset password&amp;#8221; form with password and password confirmation field.&lt;/li&gt;
+ &lt;li&gt;and last, an action to save the new password and log in the user. We can&amp;#8217;t use the &lt;code&gt;#update&lt;/code&gt; action because we need a little different behavior that i think is enough to justify a separate action: First we need to find the user record based on a token not by &lt;code&gt;id&lt;/code&gt; and second, we need to use our &lt;code&gt;logout_keeping_session&lt;/code&gt; to make sure no malicious changes are made to a logged in user if it exists.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;The process will work like that:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;The user will be able to go on a form and enter his email in case they forgot the password, that action will be &lt;code&gt;UsersController#forgot_password&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;If the user entered a valid email address (and one that identifies a user on the application), then &lt;code&gt;UsersController#send_password_reset&lt;/code&gt; will generate a new reset token and send the user with reset instructions.&lt;/li&gt;
+ &lt;li&gt;When the user follows the reset link on the email, they&amp;#8217;ll arrive on &lt;code&gt;UsersController#reset_password&lt;/code&gt; that will match the reset token from the &lt;span class=&quot;caps&quot;&gt;URI&lt;/span&gt; to a specific user on the system and allow the user to enter a new password if matched.&lt;/li&gt;
+ &lt;li&gt;Once the user had changed and saved the password, they will be logged off and asked to re-login with their new password.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;Here&amp;#8217;s the current &lt;code&gt;UsersController&lt;/code&gt;:&lt;/p&gt;
+&lt;script src=&quot;http://gist.github.com/325973.js?file=users_controller.rb&quot;&gt;&lt;/script&gt;&lt;p&gt;Source for the &lt;a href=&quot;http://gist.github.com/325981&quot;&gt;UsersController#forgot_password view&lt;/a&gt;, &lt;a href=&quot;http://gist.github.com/325982&quot;&gt;UsersController#send_password_reset view&lt;/a&gt;, &amp;#8220;UserMailer model&amp;#8221;http://gist.github.com/325983, &lt;a href=&quot;http://gist.github.com/325984&quot;&gt;Reset instructions mail template&lt;/a&gt; and &lt;a href=&quot;http://gist.github.com/325986&quot;&gt;UsersController#reset_password&lt;/a&gt; added.&lt;/p&gt;
+&lt;h4&gt;Conclusion&lt;/h4&gt;
+&lt;p&gt;Again, it seems that we tackled most of the problems we had with Mongoid in the early stages and practically nothing bothered us too much since the first part of this series.&lt;/p&gt;
+&lt;p&gt;I keep the implementation of a background processor until a bit later, it is not that important at this stage so we&amp;#8217;ll get back to it later.&lt;/p&gt;</content>
+ </entry>
+
+ <entry>
<title>Creating a Rails authentication system on Mongoid Part 2 - Remember me and Account activation</title>
<link href="http://blog.eizesus.com/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010"/>
<updated>2010-03-07T00:00:00-05:00</updated>
@@ -407,33 +445,5 @@ Yes, we should have thought about it earlier and we&amp;#8217;ll have to change
&lt;p&gt;I will, where?&lt;/p&gt;</content>
</entry>
- <entry>
- <title>Bye Bye Github</title>
- <link href="http://blog.eizesus.com/2010/02/bye-bye-github-7-2-2010"/>
- <updated>2010-02-07T00:00:00-05:00</updated>
- <id>http://gitready.com/2010/02/bye-bye-github-7-2-2010</id>
- <content type="html">&lt;p&gt;Being a software developer these days, is 90% about having a high quality of service, when you are becoming a serious part of this business you have to keep up with the expectations, especially if you are a providing an essential basic tool for developers all over the world.&lt;/p&gt;
-&lt;p&gt;I love Github, it&amp;#8217;s a very simple tool and made it very easy to collaborate code, find open source projects you want to participate in and basically replaced the need to manage your own source control server.&lt;/p&gt;
-&lt;p&gt;Github are also offering a free account as we all know and their actual paid accounts are not that expensive and start from 7$ which gives you theoretically, a good bang for a buck.&lt;/p&gt;
-&lt;p&gt;But this is where the fun part ends.&lt;/p&gt;
-&lt;p&gt;As a business owner and a person that relies on services such as Github to provide efficient support and operation, i&amp;#8217;ve decided based on the following week fiasco to drop my personal and &lt;a href=&quot;http://www.nautilus6.com&quot;&gt;Nautilus6&lt;/a&gt; &amp;#8217;s paid account on GitHub and look for an alternative.&lt;/p&gt;
-&lt;p&gt;This decision is based on my will to operate my business in a professional, coordinated and responsible matter and as i am responsible on getting things done in time for my clients, i am also obligated to make a right choice if i choose to use a 3rd party service such as Github.&lt;/p&gt;
-&lt;p&gt;It&amp;#8217;s not a new phenomenon that Github goes down, and to be honest i don&amp;#8217;t blame the hosting companies (EngineYard in the past and Rackspace at the momemt) since i am a loyal user of other large scale applications hosted successfully, silently and professionally in those companies.&lt;/p&gt;
-&lt;p&gt;I blame Github. And why? because Github acts like a toy, and when a service acts like a toy, it loses it&amp;#8217;s right to be in my professional company toolset.&lt;br /&gt;
-By saying &amp;#8220;act like a toy&amp;#8221;, i mean &amp;#8220;not acting like a real, serious business&amp;#8221;, a real serious business would have created an infrastructure that will provide &lt;strong&gt;paying customers a better redundancy for their accounts&lt;/strong&gt;, a serious decision that would prevent my (and others) paid account to go down due to overload caused by free account, useless forks and god knows what.&lt;br /&gt;
-I do not accept the excuse of &amp;#8220;we have more users than we expected and when we had less it was fine&amp;#8221; &amp;#8211; that kind of stuff doesn&amp;#8217;t work, someone should have thought about it before.&lt;/p&gt;
-&lt;p&gt;Taking the responsibility of being a serious service provider holds more to it than to have cute animal sketches pop up on your 500 error pages, and as much as i like that octu-cat or whatever it was, i like my happy clients more. But when in one way or another, i delayed 3 client deploys in the past week due to Github&amp;#8217;s downtime, i see that this responsibility is not taken or taken for granted. &lt;br /&gt;
-Some of you may say &amp;#8220;so why don&amp;#8217;t you use a local ssh deploy&amp;#8221; or something like that, Why? simple. Because i pay Github, and i want to get the service i am paying for, and yes, i want the service i am paying for &lt;strong&gt;before&lt;/strong&gt; free accounts get it.&lt;/p&gt;
-&lt;p&gt;As far as my public repositories, they will stay on Github unless something dead serious will happen (doubt it) and since i prefer not to manage our own git server at Nautilus6, i&amp;#8217;d go for one of the following:&lt;/p&gt;
-&lt;ul&gt;
- &lt;li&gt;&lt;a href=&quot;http://www.unfuddle.com&quot;&gt;Unfuddle&lt;/a&gt; &amp;#8211; They also have some free accounts, give out both svn (yak) and git support. comes a long with a ticketing system as well.&lt;/li&gt;
- &lt;li&gt;&lt;a href=&quot;http://bitbucket.org/plans/&quot;&gt;bitbucket&lt;/a&gt; &amp;#8211; been hearing some good reviews on these guys, even cheaper than Github.&lt;/li&gt;
- &lt;li&gt;&lt;a href=&quot;http://repositoryhosting.com/&quot;&gt;Repository Hosting&lt;/a&gt; &amp;#8211; one plan, all included. really looks good&lt;/li&gt;
- &lt;li&gt;&lt;a href=&quot;http://www.codebasehq.com/&quot;&gt;CodeBaseHQ&lt;/a&gt; &amp;#8211; actually my favorite for now, simple, clean and fun.&lt;/li&gt;
- &lt;li&gt;&lt;a href=&quot;http://repo.or.cz/&quot;&gt;repo.or.cz&lt;/a&gt; &amp;#8211; an open source project too, haven&amp;#8217;t tried this one yet.&lt;/li&gt;
-&lt;/ul&gt;
-&lt;p&gt;And i am not forgetting &lt;a href=&quot;http://www.heroku.com&quot;&gt;Heroku&lt;/a&gt; which proves to be an extremely reliable service and for some projects that&amp;#8217;s all you really need, service and cost wise.&lt;/p&gt;</content>
- </entry>
-
</feed>
View
10 _site/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2010/03/creating-a-rails-authentication-system-on-mongoid-part-3-password-resets-8-3-2010">Creating a Rails authentication system on Mongoid Part 3 - Password Resets</a></h4>
+ <em>08/03/2010</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2010/03/creating-a-rails-authentication-system-on-mongoid-part-2-7-3-2010">Creating a Rails authentication system on Mongoid Part 2 - Remember me and Account activation</a></h4>
<em>07/03/2010</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>04/11/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/10/bag-o-links-30-10-2009">Bag O' Links - 30/10/2009</a></h4>
- <em>30/10/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
5 _site/page10/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2008/07/ruby-coding-convetions-2">Ruby Coding Convetions</a></h4>
+ <em>16/07/2008</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2008/07/randexp-gem-2">RandExp Gem</a></h4>
<em>16/07/2008</em>
</div>
View
10 _site/page2/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/10/bag-o-links-30-10-2009">Bag O' Links - 30/10/2009</a></h4>
+ <em>30/10/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/10/using-blackbird-javascript-console-in-rails">Using BlackBird javascript console in Rails</a></h4>
<em>28/10/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>11/08/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/08/rails-bugmash-how-i-fell-in-love-again">Rails BugMash on RailsBridge</a></h4>
- <em>10/08/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page3/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/08/rails-bugmash-how-i-fell-in-love-again">Rails BugMash on RailsBridge</a></h4>
+ <em>10/08/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/08/bag-o-links-10-8-2009">Bag O' Links - 10/8/2009</a></h4>
<em>10/08/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>14/05/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/05/bag-o-links-12-5-2009">Bag O' Links - 12/5/2009</a></h4>
- <em>13/05/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page4/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/05/bag-o-links-12-5-2009">Bag O' Links - 12/5/2009</a></h4>
+ <em>13/05/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/05/bag-o-links-10-5-2009">Bag O' Links - 10/5/2009</a></h4>
<em>11/05/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>16/04/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/04/rails-interview-fails">Rails Interview FAILs</a></h4>
- <em>15/04/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page5/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/04/rails-interview-fails">Rails Interview FAILs</a></h4>
+ <em>15/04/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/04/bag-o-links-15-4-2009">Bag O' Links - 15/4/2009</a></h4>
<em>15/04/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>24/03/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/03/how-to-really-use-table-tag">How to really use the table tag?</a></h4>
- <em>23/03/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page6/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/03/how-to-really-use-table-tag">How to really use the table tag?</a></h4>
+ <em>23/03/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/03/ie8-overview">IE8 Overview</a></h4>
<em>22/03/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>30/01/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/01/amazon-aws-calculate-your-monthly-costs-on-amazon-s3-ec2-and-sqs-2">Amazon AWS: Calculate your monthly costs on Amazon S3, EC2 and SQS</a></h4>
- <em>30/01/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page7/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/01/amazon-aws-calculate-your-monthly-costs-on-amazon-s3-ec2-and-sqs-2">Amazon AWS: Calculate your monthly costs on Amazon S3, EC2 and SQS</a></h4>
+ <em>30/01/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/01/amazon-aws-calculate-your-monthly-costs-on-amazon-s3-ec2-and-sqs">Amazon AWS: Calculate your monthly costs on Amazon S3, EC2 and SQS</a></h4>
<em>30/01/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>11/01/2009</em>
</div>
- <div class="post_headline">
- <h4><a href="/2009/01/free-legal-documents-contracts-and-other-stuff">Free Legal Documents, Contracts and other stuff</a></h4>
- <em>11/01/2009</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page8/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2009/01/free-legal-documents-contracts-and-other-stuff">Free Legal Documents, Contracts and other stuff</a></h4>
+ <em>11/01/2009</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2009/01/yougetsignal-com-great-web2-0-tool-2">yougetsignal.com: Great web2.0 tool</a></h4>
<em>09/01/2009</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>30/10/2008</em>
</div>
- <div class="post_headline">
- <h4><a href="/2008/10/updated-brand-new-rails-security-for-2-1-2">updated: Brand new Rails security for 2.1</a></h4>
- <em>24/10/2008</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->
View
10 _site/page9/index.html
@@ -71,6 +71,11 @@ <h3 id="post-info">POSTS</h3>
<div class="posts_list">
<div class="post_headline">
+ <h4><a href="/2008/10/updated-brand-new-rails-security-for-2-1-2">updated: Brand new Rails security for 2.1</a></h4>
+ <em>24/10/2008</em>
+ </div>
+
+ <div class="post_headline">
<h4><a href="/2008/10/tip-finding-all-unread-messages-in-your-gmail-inbox-2">Tip: Finding all Unread messages in your gmail inbox</a></h4>
<em>24/10/2008</em>
</div>
@@ -215,11 +220,6 @@ <h3 id="post-info">POSTS</h3>
<em>16/07/2008</em>
</div>
- <div class="post_headline">
- <h4><a href="/2008/07/ruby-coding-convetions-2">Ruby Coding Convetions</a></h4>
- <em>16/07/2008</em>
- </div>
-
</div>
<div class="clear"></div>
</div> <!-- /POST -->

0 comments on commit 1345c7c

Please sign in to comment.
Something went wrong with that request. Please try again.