<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>
  Capcode, the Documentation &raquo; Module: Capcode
  </title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
    <script language="JavaScript" type="text/javascript">
    // <![CDATA[

    function toggleSource( id )
    {
    var elem
    var link

    if( document.getElementById )
    {
    elem = document.getElementById( id )
    link = document.getElementById( "l_" + id )
    }
    else if ( document.all )
    {
    elem = eval( "document.all." + id )
    link = eval( "document.all.l_" + id )
    }
    else
    return false;

    if( elem.style.display == "block" )
    {
    elem.style.display = "none"
    link.innerHTML = "show source"
    }
    else
    {
    elem.style.display = "block"
    link.innerHTML = "hide source"
    }
    }

    function openCode( url )
    {
    window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
    }
    // ]]>
    </script>
</head>
<body>
<!--
<div id="menu">
<h3 class="title">Module: Capcode</h3>
</div>
-->
<div id="fullpage">
<div id="pager">
<table>
<tr><td><img src="../rubyfr.png" /></td>
<td id="pagertd">
<strong># Module: Capcode<br />
[
"<a href="../files/README.html" value="File: README">README</a>", 
"<a href="../files/AUTHORS.html" value="File: AUTHORS">AUTHORS</a>", 
"<a href="../files/COPYING.html" value="File: COPYING">COPYING</a>", 
"<a href="../files/lib/capcode_rb.html" value="File: capcode.rb">lib/capcode.rb</a>", 
<a href="http://greg.rubyfr.net">nil</a>].each do<br /> 
<a href="../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
<a href="../classes/Capcode/Views.html" title="Module: Capcode::Views">Capcode::Views</a>.view_html<br />
<a href="../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
<a href="../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
<a href="../classes/Capcode/RenderError.html" title="Class: Capcode::RenderError">Capcode::RenderError</a>.view_html<br />
<a href="../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
<a href="../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
end</strong>
</td></tr>
</table>
</ul>
</div>

    
<div id="Capcode" class="page_shade">
<div class="page">
<h3>Module Capcode</h3>

(in files
<a href="../files/lib/capcode_rb.html">lib/capcode.rb</a>
)




<h4>Includes</h4>
<ul>
<li>Rack</li>
<li><a href="Capcode/Helpers.html">Capcode::Helpers</a></li>
<li><a href="Capcode/Views.html">Capcode::Views</a></li>
</ul>

<h2 class="ruled">Methods</h2>
<h4 class="ruled">Public Class method: 
<strong><a name="M000001">Route(*u)</a></strong> <a href="#M000001"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: Route" /></a></h4>

<p>
Add routes to a controller class
</p>
<pre>
  module Capcode
    class Hello &lt; Route '/hello/(.*)', '/hello/([^#]*)#(.*)'
      def get( arg1, arg2 )
        ...
      end
    end
  end
</pre>
<p>
In the <tt>get</tt> method, you will receive the maximum of parameters
declared by the routes. In this example, you will receive 2 parameters. So
if you go to <tt>/hello/world#friend</tt> then <tt>arg1</tt> will be set to
<tt>world</tt> and <tt>arg2</tt> will be set to <tt>friend</tt>. Now if you
go to <tt>/hello/you</tt>, then <tt>arg1</tt> will be set to <tt>you</tt>
and <tt>arg2</tt> will be set to <tt>nil</tt>
</p>
<p>
If the regexp in the route does not match, all arguments will be
<tt>nil</tt>
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000001_source')" id="l_M000001_source">show source</a> ]</p>
  <div id="M000001_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 202</span>
202:     <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Route</span> <span class="ruby-operator">*</span><span class="ruby-identifier">u</span>
203:       <span class="ruby-constant">Class</span>.<span class="ruby-identifier">new</span> {
204:         <span class="ruby-identifier">meta_def</span>(<span class="ruby-identifier">:__urls__</span>){
205:           <span class="ruby-comment cmt"># &lt; Route '/hello/world/([^\/]*)/id(\d*)', '/hello/(.*)'</span>
206:           <span class="ruby-comment cmt"># # =&gt; [ {'/hello/world' =&gt; '([^\/]*)/id(\d*)', '/hello' =&gt; '(.*)'}, 2, &lt;Capcode::Klass&gt; ]</span>
207:           <span class="ruby-identifier">h</span> = {}
208:           <span class="ruby-identifier">max</span> = <span class="ruby-value">0</span>
209:           <span class="ruby-identifier">u</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_u</span><span class="ruby-operator">|</span>
210:             <span class="ruby-identifier">m</span> = <span class="ruby-regexp re">/\/([^\/]*\(.*)/</span>.<span class="ruby-identifier">match</span>( <span class="ruby-identifier">_u</span> )
211:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span>
212:               <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{_u}' already defined with regexp `#{h[_u]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_u</span>)
213:               <span class="ruby-identifier">h</span>[<span class="ruby-identifier">_u</span>] = <span class="ruby-value str">''</span>
214:             <span class="ruby-keyword kw">else</span>
215:               <span class="ruby-identifier">_pre</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span>
216:               <span class="ruby-identifier">_pre</span> = <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_pre</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
217:               <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{_pre}' already defined with regexp `#{h[_pre]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_pre</span>)
218:               <span class="ruby-identifier">h</span>[<span class="ruby-identifier">_pre</span>] = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>]
219:               <span class="ruby-identifier">max</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>]).<span class="ruby-identifier">number_of_captures</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">max</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>]).<span class="ruby-identifier">number_of_captures</span>
220:             <span class="ruby-keyword kw">end</span>
221:           <span class="ruby-keyword kw">end</span>
222:           [<span class="ruby-identifier">h</span>, <span class="ruby-identifier">max</span>, <span class="ruby-keyword kw">self</span>]
223:         }
224: 
225:         <span class="ruby-comment cmt"># Hash containing all the request parameters (GET or POST)</span>
226:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
227:           <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
228:         <span class="ruby-keyword kw">end</span>
229:         
230:         <span class="ruby-comment cmt"># Hash containing all the environment variables</span>
231:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
232:           <span class="ruby-ivar">@env</span>
233:         <span class="ruby-keyword kw">end</span>
234:         
235:         <span class="ruby-comment cmt"># Hash session</span>
236:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
237:           <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
238:         <span class="ruby-keyword kw">end</span>
239:         
240:         <span class="ruby-comment cmt"># Return the Rack::Request object</span>
241:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
242:           <span class="ruby-ivar">@request</span>
243:         <span class="ruby-keyword kw">end</span>
244:         
245:         <span class="ruby-comment cmt"># Return the Rack::Response object</span>
246:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
247:           <span class="ruby-ivar">@response</span>
248:         <span class="ruby-keyword kw">end</span>
249:         
250:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">call</span>( <span class="ruby-identifier">e</span> ) <span class="ruby-comment cmt">#:nodoc:</span>
251:           <span class="ruby-ivar">@env</span> = <span class="ruby-identifier">e</span>
252:           <span class="ruby-ivar">@response</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Response</span>.<span class="ruby-identifier">new</span>
253:           <span class="ruby-ivar">@request</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Request</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@env</span>)
254: 
255:           <span class="ruby-comment cmt"># __k = self.class.to_s.split( /::/ )[-1].downcase.to_sym</span>
256:           <span class="ruby-comment cmt"># @@__FILTERS.each do |f|</span>
257:           <span class="ruby-comment cmt">#   proc = f.delete(:action)</span>
258:           <span class="ruby-comment cmt">#   __run = true</span>
259:           <span class="ruby-comment cmt">#   if f[:only]</span>
260:           <span class="ruby-comment cmt">#     __run = f[:only].include?(__k)</span>
261:           <span class="ruby-comment cmt">#   end</span>
262:           <span class="ruby-comment cmt">#   if f[:except]</span>
263:           <span class="ruby-comment cmt">#     __run = !f[:except].include?(__k)</span>
264:           <span class="ruby-comment cmt">#   end</span>
265:           <span class="ruby-comment cmt">#   </span>
266:           <span class="ruby-comment cmt">#   # proc.call(self) if __run</span>
267:           <span class="ruby-comment cmt">#   puts &quot;call #{proc} for #{__k}&quot;</span>
268:           <span class="ruby-comment cmt"># end</span>
269: 
270:           <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@env</span>[<span class="ruby-value str">&quot;REQUEST_METHOD&quot;</span>]
271:             <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;GET&quot;</span>
272:               <span class="ruby-identifier">finalPath</span> = <span class="ruby-keyword kw">nil</span>
273:               <span class="ruby-identifier">finalArgs</span> = <span class="ruby-keyword kw">nil</span>
274:               <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-keyword kw">nil</span>
275:               
276:               <span class="ruby-identifier">aPath</span> = <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">&quot;&quot;</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">&quot;/&quot;</span> )
277:               <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span>, <span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
278:                 <span class="ruby-identifier">xPath</span> = <span class="ruby-identifier">p</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">&quot;&quot;</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">&quot;/&quot;</span> )
279:                 <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">xPath</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">aPath</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
280:                   <span class="ruby-identifier">diffArgs</span> = <span class="ruby-identifier">aPath</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">xPath</span>
281:                   <span class="ruby-identifier">diffNArgs</span> = <span class="ruby-identifier">diffArgs</span>.<span class="ruby-identifier">size</span>
282:                   <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">finalNArgs</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">finalNArgs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">diffNArgs</span>
283:                     <span class="ruby-identifier">finalPath</span> = <span class="ruby-identifier">p</span>
284:                     <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-identifier">diffNArgs</span>
285:                     <span class="ruby-identifier">finalArgs</span> = <span class="ruby-identifier">diffArgs</span>
286:                   <span class="ruby-keyword kw">end</span>
287:                 <span class="ruby-keyword kw">end</span>
288:                 
289:               <span class="ruby-keyword kw">end</span>
290: 
291:               <span class="ruby-identifier">nargs</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">1</span>]
292:               <span class="ruby-identifier">regexp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>( <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">0</span>][<span class="ruby-identifier">finalPath</span>] )
293:               <span class="ruby-identifier">args</span> = <span class="ruby-identifier">regexp</span>.<span class="ruby-identifier">match</span>( <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Utils</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span>).<span class="ruby-identifier">gsub</span>( <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>( <span class="ruby-node">&quot;^#{finalPath}&quot;</span> ), <span class="ruby-value str">&quot;&quot;</span> ).<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">&quot;&quot;</span> ) )
294:               <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span>
295:                 <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">ParameterError</span>, <span class="ruby-node">&quot;Path info `#{@request.path_info}' does not match route regexp `#{regexp.source}'&quot;</span>
296:               <span class="ruby-keyword kw">else</span>
297:                 <span class="ruby-identifier">args</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">captures</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>)<span class="ruby-operator">?</span><span class="ruby-keyword kw">nil</span><span class="ruby-operator">:</span><span class="ruby-identifier">x</span> }
298:               <span class="ruby-keyword kw">end</span>
299:               
300:               <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">nargs</span>
301:                 <span class="ruby-identifier">args</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
302:               <span class="ruby-keyword kw">end</span>
303:                     
304:               <span class="ruby-identifier">get</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
305:             <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;POST&quot;</span>
306:               <span class="ruby-identifier">post</span>
307:           <span class="ruby-keyword kw">end</span>
308:           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:to_ary</span>)
309:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">status</span> = <span class="ruby-identifier">r</span>[<span class="ruby-value">0</span>]
310:             <span class="ruby-identifier">r</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
311:               <span class="ruby-ivar">@response</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
312:             <span class="ruby-keyword kw">end</span>
313:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">body</span> = <span class="ruby-identifier">r</span>[<span class="ruby-value">2</span>]
314:           <span class="ruby-keyword kw">else</span>
315:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">r</span>
316:           <span class="ruby-keyword kw">end</span>
317:           
318:           <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">finish</span>
319:         <span class="ruby-keyword kw">end</span>
320:                 
321:         <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span>
322:         <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>
323:       }      
324:     <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000003">env()</a></strong> <a href="#M000003"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: env" /></a></h4>

<p>
Hash containing all the environment variables
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show source</a> ]</p>
  <div id="M000003_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 231</span>
231:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
232:           <span class="ruby-ivar">@env</span>
233:         <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000007">map( r ) {|| ...}</a></strong> <a href="#M000007"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: map" /></a></h4>

<p>
This method help you to <a href="Capcode.html#M000007">map</a> and URL to a
Rack or What you want Helper
</p>
<pre>
  Capcode.map( &quot;/file&quot; ) do
    Rack::File.new( &quot;.&quot; )
  end
</pre>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000007_source')" id="l_M000007_source">show source</a> ]</p>
  <div id="M000007_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 331</span>
331:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">map</span>( <span class="ruby-identifier">r</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> )
332:       <span class="ruby-ivar">@@__ROUTES</span>[<span class="ruby-identifier">r</span>] = <span class="ruby-keyword kw">yield</span>
333:     <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000002">params()</a></strong> <a href="#M000002"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: params" /></a></h4>

<p>
Hash containing all the <a href="Capcode.html#M000005">request</a>
parameters (GET or POST)
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000002_source')" id="l_M000002_source">show source</a> ]</p>
  <div id="M000002_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 226</span>
226:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
227:           <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
228:         <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000005">request()</a></strong> <a href="#M000005"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: request" /></a></h4>

<p>
Return the Rack::Request object
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000005_source')" id="l_M000005_source">show source</a> ]</p>
  <div id="M000005_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 241</span>
241:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
242:           <span class="ruby-ivar">@request</span>
243:         <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000006">response()</a></strong> <a href="#M000006"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: response" /></a></h4>

<p>
Return the Rack::Response object
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000006_source')" id="l_M000006_source">show source</a> ]</p>
  <div id="M000006_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 246</span>
246:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
247:           <span class="ruby-ivar">@response</span>
248:         <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000008">run( args = {} ) {|self| ...}</a></strong> <a href="#M000008"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: run" /></a></h4>

<p>
Start your application.
</p>
<p>
Options :
</p>
<ul>
<li><tt>:port</tt> = Listen port

</li>
<li><tt>:host</tt> = Listen host

</li>
<li><tt>:server</tt> = Server type (webrick or mongrel)

</li>
<li><tt>:log</tt> = Output logfile (default: STDOUT)

</li>
<li><tt>:<a href="Capcode.html#M000004">session</a></tt> = Session parameters.
See Rack::Session for more informations

</li>
<li><tt>:pid</tt> = PID file (default: $0.pid)

</li>
<li><tt>:daemonize</tt> = Daemonize application (default: false)

</li>
<li><tt>:db_config</tt> = database configuration file (default: database.yml)

</li>
<li><tt>:static</tt> = Static directory (default: none &#8212; relative to the
working directory)

</li>
<li><tt>:root</tt> = Root directory (default: directory of the main.rb) &#8212;
This is also the working directory !

</li>
</ul>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000008_source')" id="l_M000008_source">show source</a> ]</p>
  <div id="M000008_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 348</span>
348:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>( <span class="ruby-identifier">args</span> = {} )
349:       <span class="ruby-identifier">__VERBOSE</span> = <span class="ruby-keyword kw">false</span>
350:       
351:       <span class="ruby-identifier">conf</span> = {
352:         <span class="ruby-identifier">:port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:port</span>]<span class="ruby-operator">||</span><span class="ruby-value">3000</span>, 
353:         <span class="ruby-identifier">:host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:host</span>]<span class="ruby-operator">||</span><span class="ruby-value str">&quot;localhost&quot;</span>,
354:         <span class="ruby-identifier">:server</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:server</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">nil</span>,
355:         <span class="ruby-identifier">:log</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:log</span>]<span class="ruby-operator">||</span><span class="ruby-identifier">$stdout</span>,
356:         <span class="ruby-identifier">:session</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:session</span>]<span class="ruby-operator">||</span>{},
357:         <span class="ruby-identifier">:pid</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:pid</span>]<span class="ruby-operator">||</span><span class="ruby-node">&quot;#{$0}.pid&quot;</span>,
358:         <span class="ruby-identifier">:daemonize</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:daemonize</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">false</span>,
359:         <span class="ruby-identifier">:db_config</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:db_config</span>]<span class="ruby-operator">||</span><span class="ruby-value str">&quot;database.yml&quot;</span>,
360:         <span class="ruby-identifier">:static</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:static</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">nil</span>,
361:         <span class="ruby-identifier">:root</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:root</span>]<span class="ruby-operator">||</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">$0</span>)),
362:         
363:         <span class="ruby-identifier">:console</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>
364:       }
365:       
366:       <span class="ruby-comment cmt"># Parse options</span>
367:       <span class="ruby-identifier">opts</span> = <span class="ruby-constant">OptionParser</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">opts</span><span class="ruby-operator">|</span>
368:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-node">&quot;Usage: #{File.basename($0)} [options]&quot;</span>
369:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
370:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Specific options:&quot;</span>
371: 
372:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-C&quot;</span>, <span class="ruby-value str">&quot;--console&quot;</span>, <span class="ruby-value str">&quot;Run in console mode with IRB (default: false)&quot;</span> ) { 
373:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>] = <span class="ruby-keyword kw">true</span>
374:         }
375:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-h&quot;</span>, <span class="ruby-value str">&quot;--host HOSTNAME&quot;</span>, <span class="ruby-node">&quot;Host for web server to bind to (default: #{conf[:host]})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
376:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:host</span>] = <span class="ruby-identifier">h</span>
377:         }
378:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-p&quot;</span>, <span class="ruby-value str">&quot;--port NUM&quot;</span>, <span class="ruby-node">&quot;Port for web server (default: #{conf[:port]})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
379:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>] = <span class="ruby-identifier">p</span>
380:         }
381:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-d&quot;</span>, <span class="ruby-value str">&quot;--daemonize [true|false]&quot;</span>, <span class="ruby-node">&quot;Daemonize (default: #{conf[:daemonize]})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
382:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>] = <span class="ruby-identifier">d</span>
383:         }
384:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-r&quot;</span>, <span class="ruby-value str">&quot;--root PATH&quot;</span>, <span class="ruby-node">&quot;Working directory (default: #{conf[:root]})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">w</span><span class="ruby-operator">|</span>
385:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>] = <span class="ruby-identifier">w</span>
386:         }
387:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-s&quot;</span>, <span class="ruby-value str">&quot;--static PATH&quot;</span>, <span class="ruby-node">&quot;Static directory -- relative to the root directory (default: #{conf[:static]})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
388:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>] = <span class="ruby-identifier">r</span>
389:         }
390: 
391:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
392:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Common options:&quot;</span>
393: 
394:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-?&quot;</span>, <span class="ruby-value str">&quot;--help&quot;</span>, <span class="ruby-value str">&quot;Show this message&quot;</span>) <span class="ruby-keyword kw">do</span>
395:           <span class="ruby-identifier">puts</span> <span class="ruby-identifier">opts</span>
396:           <span class="ruby-identifier">exit</span>
397:         <span class="ruby-keyword kw">end</span>  
398:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-v&quot;</span>, <span class="ruby-value str">&quot;--version&quot;</span>, <span class="ruby-value str">&quot;Show versions&quot;</span>) <span class="ruby-keyword kw">do</span>
399:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Capcode version #{Capcode::CAPCOD_VERION} (ruby v#{RUBY_VERSION})&quot;</span>
400:           <span class="ruby-identifier">exit</span>
401:         <span class="ruby-keyword kw">end</span>  
402:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on_tail</span>( <span class="ruby-value str">&quot;-V&quot;</span>, <span class="ruby-value str">&quot;--verbose&quot;</span>, <span class="ruby-value str">&quot;Run in verbose mode&quot;</span> ) <span class="ruby-keyword kw">do</span>
403:           <span class="ruby-identifier">__VERBOSE</span> = <span class="ruby-keyword kw">true</span>
404:         <span class="ruby-keyword kw">end</span>
405:       <span class="ruby-keyword kw">end</span>
406:       
407:       <span class="ruby-keyword kw">begin</span>
408:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">parse!</span> <span class="ruby-constant">ARGV</span>
409:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">OptionParser</span><span class="ruby-operator">::</span><span class="ruby-constant">ParseError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ex</span>
410:         <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! #{ex.message}&quot;</span>
411:         <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** use `#{File.basename($0)} --help` for more details...&quot;</span>
412:         <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
413:       <span class="ruby-keyword kw">end</span>
414:       
415:       <span class="ruby-comment cmt"># Run in the Working directory</span>
416:       <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Go on root directory (#{File.expand_path(conf[:root])})&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span>
417:       <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>( <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>] ) <span class="ruby-keyword kw">do</span>
418:         
419:         <span class="ruby-comment cmt"># Check that mongrel exists </span>
420:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;mongrel&quot;</span>
421:           <span class="ruby-keyword kw">begin</span>
422:             <span class="ruby-identifier">require</span> <span class="ruby-value str">'mongrel'</span>
423:             <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">&quot;mongrel&quot;</span>
424:           <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">LoadError</span> 
425:             <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;!! could not load mongrel. Falling back to webrick.&quot;</span>
426:             <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">&quot;webrick&quot;</span>
427:           <span class="ruby-keyword kw">end</span>
428:         <span class="ruby-keyword kw">end</span>
429:             
430:         <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">constants</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
431:           <span class="ruby-keyword kw">begin</span>
432:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;Capcode::#{k}.public_methods(true).include?( '__urls__' )&quot;</span>
433:               <span class="ruby-identifier">u</span>, <span class="ruby-identifier">m</span>, <span class="ruby-identifier">c</span> = <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;Capcode::#{k}.__urls__&quot;</span>
434:               <span class="ruby-identifier">u</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_u</span><span class="ruby-operator">|</span>
435:                 <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{_u}' already define !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@__ROUTES</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_u</span>)
436:                 <span class="ruby-ivar">@@__ROUTES</span>[<span class="ruby-identifier">_u</span>] = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">new</span>
437:               <span class="ruby-keyword kw">end</span>
438:             <span class="ruby-keyword kw">end</span>
439:           <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
440:             <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
441:           <span class="ruby-keyword kw">end</span>
442:         <span class="ruby-keyword kw">end</span>
443:         
444:         <span class="ruby-comment cmt"># Set Static directory</span>
445:         <span class="ruby-ivar">@@__STATIC_DIR</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;/&quot;</span>, <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>]))
446:         
447:         <span class="ruby-comment cmt"># Initialize Rack App</span>
448:         <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;** Map routes.&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span>
449:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">URLMap</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@@__ROUTES</span>)
450:         <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Initialize static directory (#{conf[:static]})&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span>
451:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Static</span>.<span class="ruby-identifier">new</span>( 
452:           <span class="ruby-identifier">app</span>, 
453:           <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-ivar">@@__STATIC_DIR</span>], 
454:           <span class="ruby-identifier">:root</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>]) 
455:         ) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>].<span class="ruby-identifier">nil?</span>
456:         <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;** Initialize session&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span>
457:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Session</span><span class="ruby-operator">::</span><span class="ruby-constant">Cookie</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:session</span>] )
458:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>)
459:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">ContentLength</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>)
460:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Lint</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>)
461:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">ShowExceptions</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>)
462: <span class="ruby-comment cmt">#        app = Rack::Reloader.new(app) ## -- NE RELOAD QUE capcode.rb -- So !!!</span>
463:         <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">CommonLogger</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:log</span>]) )
464:         
465:         <span class="ruby-comment cmt"># From rackup !!!</span>
466:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>]
467:           <span class="ruby-keyword kw">if</span> <span class="ruby-regexp re">/java/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-constant">RUBY_PLATFORM</span>).<span class="ruby-identifier">nil?</span>
468:             <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value str">&quot;1.9&quot;</span>
469:               <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
470:               <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span>
471:               <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
472:               <span class="ruby-comment cmt"># Dir.chdir &quot;/&quot;</span>
473:               <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span> <span class="ruby-value">0000</span>
474:               <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>
475:               <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>, <span class="ruby-value str">&quot;a&quot;</span>
476:               <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>, <span class="ruby-value str">&quot;a&quot;</span>
477:             <span class="ruby-keyword kw">else</span>
478:               <span class="ruby-constant">Process</span>.<span class="ruby-identifier">daemon</span>
479:             <span class="ruby-keyword kw">end</span>
480:           <span class="ruby-keyword kw">else</span>
481:             <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! daemonize option unavailable on #{RUBY_PLATFORM} platform.&quot;</span>
482:           <span class="ruby-keyword kw">end</span>
483:         
484:           <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>], <span class="ruby-value str">'w'</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;#{Process.pid}&quot;</span>) }
485:           <span class="ruby-identifier">at_exit</span> { <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>]) }
486:         <span class="ruby-keyword kw">end</span>
487:         
488:         <span class="ruby-comment cmt"># Start database</span>
489:         <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">include?</span> <span class="ruby-value str">&quot;db_connect&quot;</span>
490:           <span class="ruby-identifier">db_connect</span>( <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:db_config</span>], <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:log</span>] )
491:         <span class="ruby-keyword kw">end</span>
492:         
493:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
494:           <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> )
495:         <span class="ruby-keyword kw">end</span>
496:         
497:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>]
498:           <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Run console...&quot;</span>
499:           <span class="ruby-constant">IRB</span>.<span class="ruby-identifier">start</span>
500:           <span class="ruby-identifier">exit</span>
501:         <span class="ruby-keyword kw">end</span>
502:         
503:         <span class="ruby-comment cmt"># Start server</span>
504:         <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>]
505:         <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;mongrel&quot;</span>
506:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Mongrel on #{conf[:host]}:#{conf[:port]}&quot;</span>
507:           <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">Mongrel</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>], <span class="ruby-identifier">:Host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:host</span>]} ) { <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
508:             <span class="ruby-identifier">trap</span> <span class="ruby-value str">&quot;SIGINT&quot;</span>, <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">server</span>.<span class="ruby-identifier">stop</span> }
509:           }
510:         <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;webrick&quot;</span>
511:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting WEBrick on #{conf[:host]}:#{conf[:port]}&quot;</span>
512:           <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">WEBrick</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>], <span class="ruby-identifier">:BindAddress</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:host</span>]} ) { <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
513:             <span class="ruby-identifier">trap</span> <span class="ruby-value str">&quot;SIGINT&quot;</span>, <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">server</span>.<span class="ruby-identifier">shutdown</span> }
514:           }
515:         <span class="ruby-keyword kw">end</span>
516:       <span class="ruby-keyword kw">end</span>
517:     <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>
<h4 class="ruled">Public Class method: 
<strong><a name="M000004">session()</a></strong> <a href="#M000004"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: session" /></a></h4>

<p>
Hash <a href="Capcode.html#M000004">session</a>
</p>

<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show source</a> ]</p>
  <div id="M000004_source" class="dyn-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 236</span>
236:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
237:           <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
238:         <span class="ruby-keyword kw">end</span>
</pre>
  </div>
</div>

</div>
</div>


</div>
</body>
</html>