<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MyFunnyDev &#187; ruby on rails</title>
	<atom:link href="http://michalkuklis.com/blog/category/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://michalkuklis.com/blog</link>
	<description></description>
	<lastBuildDate>Sat, 31 Mar 2012 06:11:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>rendering generic views in rails 3</title>
		<link>http://michalkuklis.com/blog/2010/09/27/rendering-generic-views-rails-3/</link>
		<comments>http://michalkuklis.com/blog/2010/09/27/rendering-generic-views-rails-3/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 12:40:16 +0000</pubDate>
		<dc:creator>Michał Kuklis</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://michalkuklis.com/blog/?p=313</guid>
		<description><![CDATA[# serve mustache templates class TemplatesController &#60; ActionController::Metal &#160; # include render functionality &#160; include ActionController::Rendering &#160; append_view_path Rails.root.join&#40;&#34;app&#34;, &#34;views&#34;&#41; &#160; def serve &#160; &#160; if env&#91;&#34;PATH_INFO&#34;&#93; =~ /^\/templates\/&#40;.+&#41;$/ &#160; &#160; &#160; key = $1 &#160; &#160; &#160; &#160; &#160; &#160; begin &#160; &#160; &#160; &#160; render :file =&#62; &#34;templates/properties/_#{key}.html.mustache&#34; &#160; &#160; &#160; rescue &#160; [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container ruby blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:700px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># serve mustache templates</span><br />
<span style="color:#9966CC; font-weight:bold;">class</span> TemplatesController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Metal</span><br />
&nbsp; <span style="color:#008000; font-style:italic;"># include render functionality</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Rendering</span><br />
<br />
&nbsp; append_view_path Rails.<span style="color:#9900CC;">root</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;app&quot;</span>, <span style="color:#996600;">&quot;views&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> serve<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> env<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;PATH_INFO&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> =~ <span style="color:#006600; font-weight:bold;">/</span>^\<span style="color:#006600; font-weight:bold;">/</span>templates\<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#40;</span>.<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span>$<span style="color:#006600; font-weight:bold;">/</span><br />
&nbsp; &nbsp; &nbsp; key = $1 &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; render <span style="color:#ff3333; font-weight:bold;">:file</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;templates/properties/_#{key}.html.mustache&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">rescue</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">status</span> = <span style="color:#ff3333; font-weight:bold;">:file_not_found</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">content_type</span> = <span style="color:#996600;">'text/plain'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">response_body</span> = <span style="color:#996600;">''</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">status</span> = <span style="color:#ff3333; font-weight:bold;">:file_not_found</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">content_type</span> = <span style="color:#996600;">'text/plain'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">response_body</span> = <span style="color:#996600;">''</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://michalkuklis.com/blog/2010/09/27/rendering-generic-views-rails-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby maxins in rails plugins</title>
		<link>http://michalkuklis.com/blog/2009/07/20/ruby-maxins-in-rails-plugins/</link>
		<comments>http://michalkuklis.com/blog/2009/07/20/ruby-maxins-in-rails-plugins/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 01:16:46 +0000</pubDate>
		<dc:creator>Michał Kuklis</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://michalkuklis.com/blog/?p=175</guid>
		<description><![CDATA[Very often when looking at the code in rails plugins you can run into this: module Taggable def self.included&#40;base&#41; base.extend&#40;ClassMethods&#41; end module module ClassMethods #methods here end end This is a part of a bigger pattern which is shown below: module ModuleA def self.included&#40;base&#41; # add class methods from ModuleB base.extend&#40;ModuleB&#41; end end &#160; module [...]]]></description>
			<content:encoded><![CDATA[<p>Very often when looking at the code in rails plugins you can run into this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span class="kw1">module</span> Taggable 
  <span class="kw1">def</span> <span class="kw2">self</span>.<span class="me1">included</span><span class="br0">&#40;</span>base<span class="br0">&#41;</span>
    base.<span class="me1">extend</span><span class="br0">&#40;</span>ClassMethods<span class="br0">&#41;</span>
  <span class="kw1">end</span>
  <span class="kw1">module</span> <span class="kw1">module</span> ClassMethods
    <span class="co1">#methods here</span>
  <span class="kw1">end</span>
<span class="kw1">end</span></pre></div></div>

<p>This is a part of a bigger pattern which is shown below:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span class="kw1">module</span> ModuleA
  <span class="kw1">def</span> <span class="kw2">self</span>.<span class="me1">included</span><span class="br0">&#40;</span>base<span class="br0">&#41;</span>
    <span class="co1"># add class methods from ModuleB</span>
    base.<span class="me1">extend</span><span class="br0">&#40;</span>ModuleB<span class="br0">&#41;</span>
  <span class="kw1">end</span>
<span class="kw1">end</span>
&nbsp;
<span class="kw1">module</span> ModuleB
  <span class="kw1">def</span> act_as_hello
    <span class="kw3">p</span> <span class="st0">&quot;hello from module B&quot;</span>
  <span class="kw1">end</span>
<span class="kw1">end</span>
&nbsp;
<span class="kw1">class</span> ClassC
 <span class="co1">#class body here</span>
<span class="kw1">end</span>
&nbsp;
<span class="co1"># include moduleA in classC</span>
ClassC.<span class="me1">send</span><span class="br0">&#40;</span>:<span class="kw1">include</span>, ModuleA<span class="br0">&#41;</span>
&nbsp;
<span class="kw1">class</span> ClassD <span class="sy0">&lt;</span> ClassC
  act_as_hello
<span class="kw1">end</span>
&nbsp;
classD = ClassD.<span class="me1">new</span></pre></div></div>

<p>The pattern is used often when developing plugins with ActiveRecord. What we gain by inheriting from ClassC  (<b>class ClassD < ClassC</b>) are instance methods from ModuleA. This is done by:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">ClassC.<span class="me1">send</span><span class="br0">&#40;</span>:<span class="kw1">include</span>, ModuleA<span class="br0">&#41;</span></pre></div></div>

<p>Moreover since ModuleA is included in ClassC, ModuleA&#8217;s initializer <strong>def self.included(base)</strong> will be invoked at the time  ModuleA is mixed with ClassC. The invocation will call <b>base.extend(ModuleB)</b>. In this case <b>base</b> represents ClassC which will be extended by adding class methods from ModuleB. The ModuleA&#8217;s init method is shown again below:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span class="kw1">def</span> <span class="kw2">self</span>.<span class="me1">included</span><span class="br0">&#40;</span>base<span class="br0">&#41;</span>
  <span class="co1"># add class methods from ModuleB to ClassC</span>
  base.<span class="me1">extend</span><span class="br0">&#40;</span>ModuleB<span class="br0">&#41;</span>
<span class="kw1">end</span></pre></div></div>

<p>At the end our ClassD has now access to all class methods defined in ModuleB.  <strong>act_as_hello</strong> will be called during ClassD initialization:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span class="kw1">class</span> ClassD <span class="sy0">&lt;</span> ClassC
  act_as_hello
<span class="kw1">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://michalkuklis.com/blog/2009/07/20/ruby-maxins-in-rails-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>heroku</title>
		<link>http://michalkuklis.com/blog/2008/02/19/heroku/</link>
		<comments>http://michalkuklis.com/blog/2008/02/19/heroku/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 04:25:18 +0000</pubDate>
		<dc:creator>Michał Kuklis</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://michalkuklis.com/blog/?p=31</guid>
		<description><![CDATA[http://heroku.com/ &#8211; awesome work&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://heroku.com/">http://heroku.com/</a> &#8211; awesome work&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://michalkuklis.com/blog/2008/02/19/heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

