<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Module: Capcode</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
  <script type="text/javascript">
  // <![CDATA[

  function popupCode( url ) {
    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
  }

  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;
    
    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }
  
  // Make codeblocks hidden by default
  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
  
  // ]]>
  </script>

</head>
<body>



    <div id="classHeader">
        <table class="header-table">
        <tr class="top-aligned-row">
          <td><strong>Module</strong></td>
          <td class="class-name-in-header">Capcode</td>
        </tr>
        <tr class="top-aligned-row">
            <td><strong>In:</strong></td>
            <td>
                <a href="../files/lib/capcode_rb.html">
                lib/capcode.rb
                </a>
        <br />
                <a href="../files/lib/capcode/base/db_rb.html">
                lib/capcode/base/db.rb
                </a>
        <br />
                <a href="../files/lib/capcode/configuration_rb.html">
                lib/capcode/configuration.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/binary_rb.html">
                lib/capcode/render/binary.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/email_rb.html">
                lib/capcode/render/email.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/erb_rb.html">
                lib/capcode/render/erb.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/haml_rb.html">
                lib/capcode/render/haml.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/json_rb.html">
                lib/capcode/render/json.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/markaby_rb.html">
                lib/capcode/render/markaby.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/mustache_rb.html">
                lib/capcode/render/mustache.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/none_rb.html">
                lib/capcode/render/none.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/redirect_rb.html">
                lib/capcode/render/redirect.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/sass_rb.html">
                lib/capcode/render/sass.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/static_rb.html">
                lib/capcode/render/static.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/text_rb.html">
                lib/capcode/render/text.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/webdav_rb.html">
                lib/capcode/render/webdav.rb
                </a>
        <br />
                <a href="../files/lib/capcode/render/xml_rb.html">
                lib/capcode/render/xml.rb
                </a>
        <br />
                <a href="../files/lib/capcode/helpers/auth_rb.html">
                lib/capcode/helpers/auth.rb
                </a>
        <br />
            </td>
        </tr>

        </table>
    </div>
  <!-- banner header -->

  <div id="bodyContent">



  <div id="contextContent">



   </div>

    <div id="method-list">
      <h3 class="section-bar">Methods</h3>

      <div class="name-list">
      <a href="#M000001">Route</a>&nbsp;&nbsp;
      <a href="#M000010">application</a>&nbsp;&nbsp;
      <a href="#M000013">config</a>&nbsp;&nbsp;
      <a href="#M000003">env</a>&nbsp;&nbsp;
      <a href="#M000009">http_authentication</a>&nbsp;&nbsp;
      <a href="#M000007">map</a>&nbsp;&nbsp;
      <a href="#M000002">params</a>&nbsp;&nbsp;
      <a href="#M000005">request</a>&nbsp;&nbsp;
      <a href="#M000006">response</a>&nbsp;&nbsp;
      <a href="#M000011">run</a>&nbsp;&nbsp;
      <a href="#M000004">session</a>&nbsp;&nbsp;
      <a href="#M000012">set</a>&nbsp;&nbsp;
      <a href="#M000008">use</a>&nbsp;&nbsp;
      </div>
    </div>

  </div>


    <!-- if includes -->
    <div id="includes">
      <h3 class="section-bar">Included Modules</h3>

      <div id="includes-list">
        <span class="include-name">Rack</span>
        <span class="include-name"><a href="Capcode/Helpers.html">Capcode::Helpers</a></span>
        <span class="include-name"><a href="Capcode/Views.html">Capcode::Views</a></span>
      </div>
    </div>

    <div id="section">

    <div id="class-list">
      <h3 class="section-bar">Classes and Modules</h3>

      Module <a href="Capcode/Helpers.html" class="link">Capcode::Helpers</a><br />
Module <a href="Capcode/Resource.html" class="link">Capcode::Resource</a><br />
Module <a href="Capcode/Views.html" class="link">Capcode::Views</a><br />
Class <a href="Capcode/Base.html" class="link">Capcode::Base</a><br />
Class <a href="Capcode/HTTPError.html" class="link">Capcode::HTTPError</a><br />
Class <a href="Capcode/Mab.html" class="link">Capcode::Mab</a><br />

    </div>




    <div id="attribute-list">
      <h3 class="section-bar">Attributes</h3>

      <div class="name-list">
        <table>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">__auth__</td>
          <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        </table>
      </div>
    </div>
      


    <!-- if method_list -->
    <div id="methods">
      <h3 class="section-bar">Public Class methods</h3>

      <div id="method-M000001" class="method-detail">
        <a name="M000001"></a>

        <div class="method-heading">
          <a href="#M000001" class="method-signature">
          <span class="method-name">Route</span><span class="method-args">(*routes_paths)</span>
          </a>
        </div>
      
        <div class="method-description">
          <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 <a
href="Capcode.html#M000012">set</a> to <tt>world</tt> and <tt>arg2</tt>
will be <a href="Capcode.html#M000012">set</a> to <tt>friend</tt>. Now if
you go to <tt>/hello/you</tt>, then <tt>arg1</tt> will be <a
href="Capcode.html#M000012">set</a> to <tt>you</tt> and <tt>arg2</tt> will
be <a href="Capcode.html#M000012">set</a> to <tt>nil</tt>
</p>
<p>
If the regexp in the route does not match, all arguments will be
<tt>nil</tt>
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000001-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 305</span>
305:     <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Route</span> <span class="ruby-operator">*</span><span class="ruby-identifier">routes_paths</span>
306:       <span class="ruby-constant">Class</span>.<span class="ruby-identifier">new</span> {
307:         <span class="ruby-identifier">meta_def</span>(<span class="ruby-identifier">:__urls__</span>) {
308:           <span class="ruby-comment cmt"># &lt; Route '/hello/world/([^\/]*)/id(\d*)', '/hello/(.*)', :agent =&gt; /Songbird (\d\.\d)[\d\/]*?/</span>
309:           <span class="ruby-comment cmt"># # =&gt; [ {'/hello/world' =&gt; '([^\/]*)/id(\d*)', '/hello' =&gt; '(.*)'}, </span>
310:           <span class="ruby-comment cmt">#        2, </span>
311:           <span class="ruby-comment cmt">#        &lt;Capcode::Klass&gt;, </span>
312:           <span class="ruby-comment cmt">#        {:agent =&gt; /Songbird (\d\.\d)[\d\/]*?/} ]</span>
313:           <span class="ruby-identifier">hash_of_routes</span> = {}
314:           <span class="ruby-identifier">max_captures_for_routes</span> = <span class="ruby-value">0</span>
315:           <span class="ruby-identifier">routes_paths</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">current_route_path</span><span class="ruby-operator">|</span>
316:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current_route_path</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">String</span>
317:               <span class="ruby-identifier">m</span> = <span class="ruby-regexp re">/\/([^\/]*\(.*)/</span>.<span class="ruby-identifier">match</span>( <span class="ruby-identifier">current_route_path</span> )
318:               <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span>
319:                 <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 `#{current_route_path}' already defined with regexp `#{hash_of_routes[current_route_path]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash_of_routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">current_route_path</span>)
320:                 <span class="ruby-identifier">hash_of_routes</span>[<span class="ruby-identifier">current_route_path</span>] = <span class="ruby-value str">''</span>
321:               <span class="ruby-keyword kw">else</span>
322:                 <span class="ruby-identifier">_pre</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span>
323:                 <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>
324:                 <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 `#{hash_of_routes[_pre]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash_of_routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_pre</span>)
325:                 <span class="ruby-identifier">hash_of_routes</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>]
326:                 <span class="ruby-identifier">max_captures_for_routes</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_captures_for_routes</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>
327:               <span class="ruby-keyword kw">end</span>
328:             <span class="ruby-keyword kw">else</span>
329:               <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-value str">&quot;Bad route declaration !&quot;</span>, <span class="ruby-identifier">caller</span>
330:             <span class="ruby-keyword kw">end</span>
331:           <span class="ruby-keyword kw">end</span>
332:           [<span class="ruby-identifier">hash_of_routes</span>, <span class="ruby-identifier">max_captures_for_routes</span>, <span class="ruby-keyword kw">self</span>]
333:         }
334:                 
335:         <span class="ruby-comment cmt"># Hash containing all the request parameters (GET or POST)</span>
336:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
337:           <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
338:         <span class="ruby-keyword kw">end</span>
339:         
340:         <span class="ruby-comment cmt"># Hash containing all the environment variables</span>
341:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
342:           <span class="ruby-ivar">@env</span>
343:         <span class="ruby-keyword kw">end</span>
344:         
345:         <span class="ruby-comment cmt"># Session hash</span>
346:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
347:           <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
348:         <span class="ruby-keyword kw">end</span>
349:         
350:         <span class="ruby-comment cmt"># Return the Rack::Request object</span>
351:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
352:           <span class="ruby-ivar">@request</span>
353:         <span class="ruby-keyword kw">end</span>
354:         
355:         <span class="ruby-comment cmt"># Return the Rack::Response object</span>
356:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
357:           <span class="ruby-ivar">@response</span>
358:         <span class="ruby-keyword kw">end</span>
359:         
360:         <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>
361:           <span class="ruby-ivar">@env</span> = <span class="ruby-identifier">e</span>
362:           <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>
363:           <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>)
364: 
365:           <span class="ruby-comment cmt"># __k = self.class.to_s.split( /::/ )[-1].downcase.to_sym</span>
366:           <span class="ruby-comment cmt"># @@__FILTERS.each do |f|</span>
367:           <span class="ruby-comment cmt">#   proc = f.delete(:action)</span>
368:           <span class="ruby-comment cmt">#   __run = true</span>
369:           <span class="ruby-comment cmt">#   if f[:only]</span>
370:           <span class="ruby-comment cmt">#     __run = f[:only].include?(__k)</span>
371:           <span class="ruby-comment cmt">#   end</span>
372:           <span class="ruby-comment cmt">#   if f[:except]</span>
373:           <span class="ruby-comment cmt">#     __run = !f[:except].include?(__k)</span>
374:           <span class="ruby-comment cmt">#   end</span>
375:           <span class="ruby-comment cmt">#   </span>
376:           <span class="ruby-comment cmt">#   # proc.call(self) if __run</span>
377:           <span class="ruby-comment cmt">#   puts &quot;call #{proc} for #{__k}&quot;</span>
378:           <span class="ruby-comment cmt"># end</span>
379: 
380:           <span class="ruby-comment cmt"># Check authz</span>
381:           <span class="ruby-identifier">authz_options</span> = <span class="ruby-keyword kw">nil</span>
382:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span> <span class="ruby-keyword kw">and</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
383:             <span class="ruby-identifier">authz_options</span> = <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span>[<span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">nil</span>
384:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">authz_options</span>.<span class="ruby-identifier">nil?</span>
385:               <span class="ruby-identifier">route</span> = <span class="ruby-keyword kw">nil</span>
386:               
387:               <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span>, <span class="ruby-identifier">o</span><span class="ruby-operator">|</span>
388:                 <span class="ruby-identifier">regexp</span> = <span class="ruby-node">&quot;^#{r.gsub(/\/$/, &quot;&quot;)}([/]{1}.*)?$&quot;</span>
389:                 <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">regexp</span>).<span class="ruby-identifier">match</span>( <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span> )
390:                   <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">route</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">route</span>.<span class="ruby-identifier">size</span>
391:                     <span class="ruby-identifier">route</span> = <span class="ruby-identifier">r</span>
392:                     <span class="ruby-identifier">authz_options</span> = <span class="ruby-identifier">o</span>
393:                   <span class="ruby-keyword kw">end</span>
394:                 <span class="ruby-keyword kw">end</span>  
395:               <span class="ruby-keyword kw">end</span>
396:             <span class="ruby-keyword kw">end</span>
397:           <span class="ruby-keyword kw">end</span>
398: 
399:           <span class="ruby-identifier">r</span> = <span class="ruby-identifier">catch</span>(<span class="ruby-identifier">:halt</span>) { 
400:             <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">authz_options</span>.<span class="ruby-identifier">nil?</span>
401:               <span class="ruby-identifier">http_authentication</span>( <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:type</span>], <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:realm</span>], <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:realm</span>] ) { 
402:                 <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:autz</span>]
403:               }
404:             <span class="ruby-keyword kw">end</span>
405: 
406:             <span class="ruby-identifier">finalPath</span> = <span class="ruby-keyword kw">nil</span>
407:             <span class="ruby-identifier">finalArgs</span> = <span class="ruby-keyword kw">nil</span>
408:             <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-keyword kw">nil</span>
409:             
410:             <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> )
411:             <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>
412:               <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> )
413:               <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>
414:                 <span class="ruby-identifier">diffArgs</span> = <span class="ruby-identifier">aPath</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">xPath</span>
415:                 <span class="ruby-identifier">diffNArgs</span> = <span class="ruby-identifier">diffArgs</span>.<span class="ruby-identifier">size</span>
416:                 <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>
417:                   <span class="ruby-identifier">finalPath</span> = <span class="ruby-identifier">p</span>
418:                   <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-identifier">diffNArgs</span>
419:                   <span class="ruby-identifier">finalArgs</span> = <span class="ruby-identifier">diffArgs</span>
420:                 <span class="ruby-keyword kw">end</span>
421:               <span class="ruby-keyword kw">end</span>
422:               
423:             <span class="ruby-keyword kw">end</span>
424:         
425:             <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>]
426:             <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>] )
427:             <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> ) )
428:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span>
429:               <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>
430:             <span class="ruby-keyword kw">else</span>
431:               <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> }
432:             <span class="ruby-keyword kw">end</span>
433:             
434:             <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>
435:               <span class="ruby-identifier">args</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
436:             <span class="ruby-keyword kw">end</span>
437: 
438:             <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@env</span>[<span class="ruby-value str">&quot;REQUEST_METHOD&quot;</span>]
439:               <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;GET&quot;</span>                      
440:                 <span class="ruby-identifier">get</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
441:               <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;POST&quot;</span>
442:                 <span class="ruby-identifier">_method</span> = <span class="ruby-identifier">params</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-value str">&quot;_method&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">_</span><span class="ruby-operator">|</span> <span class="ruby-value str">&quot;post&quot;</span> }
443:                 <span class="ruby-identifier">send</span>( <span class="ruby-identifier">_method</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
444:               <span class="ruby-keyword kw">else</span>
445:                 <span class="ruby-identifier">_method</span> = <span class="ruby-ivar">@env</span>[<span class="ruby-value str">&quot;REQUEST_METHOD&quot;</span>]
446:                 <span class="ruby-identifier">send</span>( <span class="ruby-identifier">_method</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
447:             <span class="ruby-keyword kw">end</span>
448:           }
449:           <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>)
450:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">status</span> = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">shift</span> <span class="ruby-comment cmt">#r[0]</span>
451:             <span class="ruby-comment cmt">#r[1].each do |k,v|</span>
452:             <span class="ruby-identifier">r</span>.<span class="ruby-identifier">shift</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>
453:               <span class="ruby-ivar">@response</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
454:             <span class="ruby-keyword kw">end</span>
455:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">body</span> = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">shift</span> <span class="ruby-comment cmt">#r[2]</span>
456:           <span class="ruby-keyword kw">else</span>
457:             <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">r</span>
458:           <span class="ruby-keyword kw">end</span>
459:                     
460:           <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">finish</span>
461:         <span class="ruby-keyword kw">end</span>
462:                 
463:         <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span>
464:         <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>
465:       }      
466:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000010" class="method-detail">
        <a name="M000010"></a>

        <div class="method-heading">
          <a href="#M000010" class="method-signature">
          <span class="method-name">application</span><span class="method-args">( args = {} ) {|self| ...}</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Return the Rack App.
</p>
<p>
Options : see <a href="Capcode.html#M000012">Capcode.set</a>
</p>
<p>
Options <a href="Capcode.html#M000012">set</a> here replace the ones <a
href="Capcode.html#M000012">set</a> globally
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000010-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 552</span>
552:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application</span>( <span class="ruby-identifier">args</span> = {} )
553:       <span class="ruby-identifier">conf</span> = <span class="ruby-identifier">configuration</span>(<span class="ruby-identifier">args</span>)
554:       
555:       <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>
556:         <span class="ruby-keyword kw">begin</span>
557:           <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>
558:             <span class="ruby-identifier">hash_of_routes</span>, <span class="ruby-identifier">max_captures_for_routes</span>, <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;Capcode::#{k}.__urls__&quot;</span>
559:             <span class="ruby-identifier">hash_of_routes</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">current_route_path</span><span class="ruby-operator">|</span>
560:               <span class="ruby-comment cmt">#raise Capcode::RouteError, &quot;Route `#{current_route_path}' already define !&quot;, caller if @@__ROUTES.keys.include?(current_route_path)</span>
561:               <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 `#{current_route_path}' already define !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">current_route_path</span>)
562:               <span class="ruby-comment cmt">#@@__ROUTES[current_route_path] = klass.new</span>
563:               <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>[<span class="ruby-identifier">current_route_path</span>] = <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">new</span>
564:             <span class="ruby-keyword kw">end</span>
565:           <span class="ruby-keyword kw">end</span>
566:         <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
567:           <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
568:         <span class="ruby-keyword kw">end</span>
569:       <span class="ruby-keyword kw">end</span>
570:       
571:       <span class="ruby-comment cmt"># Set Static directory</span>
572:       <span class="ruby-comment cmt">#@@__STATIC_DIR = (conf[:static][0].chr == &quot;/&quot;)?conf[:static]:&quot;/&quot;+conf[:static] unless conf[:static].nil?</span>
573:       <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">static</span> = (<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>][<span class="ruby-value">0</span>].<span class="ruby-identifier">chr</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;/&quot;</span>)<span class="ruby-operator">?</span><span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>]<span class="ruby-operator">:</span><span class="ruby-value str">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>] <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>
574:       
575:       <span class="ruby-comment cmt"># Initialize Rack App</span>
576:       <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">conf</span>[<span class="ruby-identifier">:verbose</span>]
577:       <span class="ruby-comment cmt">#app = Rack::URLMap.new(@@__ROUTES)</span>
578:       <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-constant">Capcode</span>.<span class="ruby-identifier">routes</span>)
579:       <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">conf</span>[<span class="ruby-identifier">:verbose</span>]
580:       <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>( 
581:         <span class="ruby-identifier">app</span>, 
582:         <span class="ruby-comment cmt">#:urls =&gt; [@@__STATIC_DIR], </span>
583:         <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">static</span>], 
584:         <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>]) 
585:       ) <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>
586:       <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">conf</span>[<span class="ruby-identifier">:verbose</span>]
587:       <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>] )
588:       <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>)
589:       <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>)
590:       <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>)
591:       <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>)
592:       <span class="ruby-comment cmt">#app = Rack::Reloader.new(app) ## -- NE RELOAD QUE capcode.rb -- So !!!</span>
593:       <span class="ruby-comment cmt"># app = Rack::CommonLogger.new( app, Logger.new(conf[:log]) )</span>
594:       
595:       <span class="ruby-identifier">middlewares</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">mw</span><span class="ruby-operator">|</span>
596:         <span class="ruby-identifier">middleware</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span> = <span class="ruby-identifier">mw</span>
597:         <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Load middleware #{middleware}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:verbose</span>]
598:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block</span>
599:           <span class="ruby-identifier">app</span> = <span class="ruby-identifier">middleware</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
600:         <span class="ruby-keyword kw">else</span>
601:           <span class="ruby-identifier">app</span> = <span class="ruby-identifier">middleware</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
602:         <span class="ruby-keyword kw">end</span>
603:       <span class="ruby-keyword kw">end</span>
604:       
605:       <span class="ruby-comment cmt"># Start database</span>
606:       <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>
607:         <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>] )
608:       <span class="ruby-keyword kw">end</span>
609:       
610:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
611:         <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> )
612:       <span class="ruby-keyword kw">end</span>
613:       
614:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">app</span>
615:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000013" class="method-detail">
        <a name="M000013"></a>

        <div class="method-heading">
          <a href="#M000013" class="method-signature">
          <span class="method-name">config</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000013-source">
<pre>
    <span class="ruby-comment cmt"># File lib/capcode/configuration.rb, line 35</span>
35:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">config</span>
36:       <span class="ruby-ivar">@configuration</span> <span class="ruby-operator">||=</span> {}
37:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000003" class="method-detail">
        <a name="M000003"></a>

        <div class="method-heading">
          <a href="#M000003" class="method-signature">
          <span class="method-name">env</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Hash containing all the environment variables
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000003-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 341</span>
341:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
342:           <span class="ruby-ivar">@env</span>
343:         <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000009" class="method-detail">
        <a name="M000009"></a>

        <div class="method-heading">
          <a href="#M000009" class="method-signature">
          <span class="method-name">http_authentication</span><span class="method-args">( opts = {}, &amp;b )</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Allow you to add and HTTP Authentication (Basic or Digest) to controllers
for or specific route
</p>
<p>
Options :
</p>
<ul>
<li><tt>:type</tt> : Authentication type (<tt>:basic</tt> or <tt>:digest</tt>)
- default : <tt>:basic</tt>

</li>
<li><tt>:realm</tt> : realm ;) - default : &quot;Capcode.app&quot;

</li>
<li><tt>:opaque</tt> : Your secret passphrase. You MUST <a
href="Capcode.html#M000012">set</a> it if you <a
href="Capcode.html#M000008">use</a> Digest Auth - default :
&quot;opaque&quot;

</li>
<li><tt>:routes</tt> : Routes - default : &quot;/&quot;

</li>
</ul>
<p>
The block must return a Hash of username =&gt; password like that :
</p>
<pre>
  {
    &quot;user1&quot; =&gt; &quot;pass1&quot;,
    &quot;user2&quot; =&gt; &quot;pass2&quot;,
    # ...
  }
</pre>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000009-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 509</span>
509:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">http_authentication</span>( <span class="ruby-identifier">opts</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> )
510:       <span class="ruby-identifier">options</span> = {
511:         <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:basic</span>,
512:         <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;Capcode.app&quot;</span>,
513:         <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;opaque&quot;</span>,
514:         <span class="ruby-identifier">:routes</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;/&quot;</span>
515:       }.<span class="ruby-identifier">merge</span>( <span class="ruby-identifier">opts</span> )
516:       
517:       <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:autz</span>] = <span class="ruby-identifier">b</span>.<span class="ruby-identifier">call</span>()
518:       
519:       <span class="ruby-ivar">@__auth__</span> <span class="ruby-operator">||=</span> {}
520:       
521:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:routes</span>].<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
522:         <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:routes</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
523:           <span class="ruby-ivar">@__auth__</span>[<span class="ruby-identifier">r</span>] = <span class="ruby-identifier">options</span>
524:         <span class="ruby-keyword kw">end</span>
525:       <span class="ruby-keyword kw">else</span>
526:         <span class="ruby-ivar">@__auth__</span>[<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:routes</span>]] = <span class="ruby-identifier">options</span>
527:       <span class="ruby-keyword kw">end</span>      
528:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000007" class="method-detail">
        <a name="M000007"></a>

        <div class="method-heading">
          <a href="#M000007" class="method-signature">
          <span class="method-name">map</span><span class="method-args">( route ) {|| ...}</span>
          </a>
        </div>
      
        <div class="method-description">
          <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>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000007-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 473</span>
473:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">map</span>( <span class="ruby-identifier">route</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> )
474:       <span class="ruby-comment cmt">#@@__ROUTES[route] = yield</span>
475:       <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>[<span class="ruby-identifier">route</span>] = <span class="ruby-keyword kw">yield</span>
476:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000002" class="method-detail">
        <a name="M000002"></a>

        <div class="method-heading">
          <a href="#M000002" class="method-signature">
          <span class="method-name">params</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Hash containing all the <a href="Capcode.html#M000005">request</a>
parameters (GET or POST)
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000002-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 336</span>
336:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
337:           <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
338:         <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000005" class="method-detail">
        <a name="M000005"></a>

        <div class="method-heading">
          <a href="#M000005" class="method-signature">
          <span class="method-name">request</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Return the Rack::Request object
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000005-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 351</span>
351:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
352:           <span class="ruby-ivar">@request</span>
353:         <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000006" class="method-detail">
        <a name="M000006"></a>

        <div class="method-heading">
          <a href="#M000006" class="method-signature">
          <span class="method-name">response</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Return the Rack::Response object
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000006-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 356</span>
356:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
357:           <span class="ruby-ivar">@response</span>
358:         <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000011" class="method-detail">
        <a name="M000011"></a>

        <div class="method-heading">
          <a href="#M000011" class="method-signature">
          <span class="method-name">run</span><span class="method-args">( args = {} ) {|self| ...}</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Start your <a href="Capcode.html#M000010">application</a>.
</p>
<p>
Options : see <a href="Capcode.html#M000012">Capcode.set</a>
</p>
<p>
Options <a href="Capcode.html#M000012">set</a> here replace the ones <a
href="Capcode.html#M000012">set</a> globally
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000011-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 622</span>
622:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>( <span class="ruby-identifier">args</span> = {} )
623:       <span class="ruby-identifier">conf</span> = <span class="ruby-identifier">configuration</span>(<span class="ruby-identifier">args</span>)
624:       
625:       <span class="ruby-comment cmt"># Parse options</span>
626:       <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>
627:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-node">&quot;Usage: #{File.basename($0)} [options]&quot;</span>
628:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
629:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Specific options:&quot;</span>
630: 
631:         <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> ) { 
632:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>] = <span class="ruby-keyword kw">true</span>
633:         }
634:         <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>
635:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:host</span>] = <span class="ruby-identifier">h</span>
636:         }
637:         <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>
638:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>] = <span class="ruby-identifier">p</span>
639:         }
640:         <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>
641:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>] = <span class="ruby-identifier">d</span>
642:         }
643:         <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>
644:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>] = <span class="ruby-identifier">w</span>
645:         }
646:         <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>
647:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>] = <span class="ruby-identifier">r</span>
648:         }
649: 
650:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
651:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Common options:&quot;</span>
652: 
653:         <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>
654:           <span class="ruby-identifier">puts</span> <span class="ruby-identifier">opts</span>
655:           <span class="ruby-identifier">exit</span>
656:         <span class="ruby-keyword kw">end</span>  
657:         <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>
658:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Capcode version #{Capcode::CAPCOD_VERION} (ruby v#{RUBY_VERSION})&quot;</span>
659:           <span class="ruby-identifier">exit</span>
660:         <span class="ruby-keyword kw">end</span>  
661:         <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>
662:           <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:verbose</span>] = <span class="ruby-keyword kw">true</span>
663:         <span class="ruby-keyword kw">end</span>
664:       <span class="ruby-keyword kw">end</span>
665:       
666:       <span class="ruby-keyword kw">begin</span>
667:         <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">parse!</span> <span class="ruby-constant">ARGV</span>
668:       <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>
669:         <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! #{ex.message}&quot;</span>
670:         <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** use `#{File.basename($0)} --help` for more details...&quot;</span>
671:         <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
672:       <span class="ruby-keyword kw">end</span>
673:       
674:       <span class="ruby-comment cmt"># Run in the Working directory</span>
675:       <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">conf</span>[<span class="ruby-identifier">:verbose</span>]
676:       <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>
677:         
678:         <span class="ruby-comment cmt"># Check that mongrel exists </span>
679:         <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>
680:           <span class="ruby-keyword kw">begin</span>
681:             <span class="ruby-identifier">require</span> <span class="ruby-value str">'mongrel'</span>
682:             <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">&quot;mongrel&quot;</span>
683:           <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">LoadError</span> 
684:             <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;!! could not load mongrel. Falling back to webrick.&quot;</span>
685:             <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">&quot;webrick&quot;</span>
686:           <span class="ruby-keyword kw">end</span>
687:         <span class="ruby-keyword kw">end</span>
688:         
689:         <span class="ruby-comment cmt"># From rackup !!!</span>
690:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>]
691:           <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>
692:             <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>
693:               <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
694:               <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span>
695:               <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
696:               <span class="ruby-comment cmt"># Dir.chdir &quot;/&quot;</span>
697:               <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span> <span class="ruby-value">0000</span>
698:               <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>
699:               <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>
700:               <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>
701:             <span class="ruby-keyword kw">else</span>
702:               <span class="ruby-constant">Process</span>.<span class="ruby-identifier">daemon</span>
703:             <span class="ruby-keyword kw">end</span>
704:           <span class="ruby-keyword kw">else</span>
705:             <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! daemonize option unavailable on #{RUBY_PLATFORM} platform.&quot;</span>
706:           <span class="ruby-keyword kw">end</span>
707:         
708:           <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>) }
709:           <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>]) }
710:         <span class="ruby-keyword kw">end</span>
711:         
712:         <span class="ruby-identifier">app</span> = <span class="ruby-keyword kw">nil</span>
713:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
714:           <span class="ruby-identifier">app</span> = <span class="ruby-identifier">application</span>(<span class="ruby-identifier">conf</span>) { <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> ) }
715:         <span class="ruby-keyword kw">else</span>
716:           <span class="ruby-identifier">app</span> = <span class="ruby-identifier">application</span>(<span class="ruby-identifier">conf</span>)
717:         <span class="ruby-keyword kw">end</span>
718:         <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>]) )
719:         
720:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>]
721:           <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Run console...&quot;</span>
722:           <span class="ruby-constant">IRB</span>.<span class="ruby-identifier">start</span>
723:           <span class="ruby-identifier">exit</span>
724:         <span class="ruby-keyword kw">end</span>
725:         
726:         <span class="ruby-comment cmt"># Start server</span>
727:         <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>]
728:         <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;mongrel&quot;</span>
729:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Mongrel on #{conf[:host]}:#{conf[:port]}&quot;</span>
730:           <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>
731:             <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> }
732:           }
733:         <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;webrick&quot;</span>
734:           <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting WEBrick on #{conf[:host]}:#{conf[:port]}&quot;</span>
735:           <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>
736:             <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> }
737:           }
738:         <span class="ruby-keyword kw">end</span>
739:       <span class="ruby-keyword kw">end</span>
740:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000004" class="method-detail">
        <a name="M000004"></a>

        <div class="method-heading">
          <a href="#M000004" class="method-signature">
          <span class="method-name">session</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Session hash
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000004-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 346</span>
346:         <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
347:           <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
348:         <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000012" class="method-detail">
        <a name="M000012"></a>

        <div class="method-heading">
          <a href="#M000012" class="method-signature">
          <span class="method-name">set</span><span class="method-args">( key, value )</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Set global configuration options
</p>
<p>
Options :
</p>
<ul>
<li><tt>:port</tt> = Listen port (default: 3000)

</li>
<li><tt>:host</tt> = Listen host (default: 0.0.0.0)

</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 <a
href="Capcode.html#M000010">application</a> (default: false)

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

</li>
<li><tt>:static</tt> = Static directory (default: the working directory)

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

</li>
<li><tt>:verbose</tt> = <a href="Capcode.html#M000011">run</a> in verbose mode

</li>
<li><tt>:auth</tt> = HTTP Basic Authentication options

</li>
</ul>
<p>
It can exist specifics options depending on a renderer, a helper, &#8230;
</p>
<p>
Example :
</p>
<pre>
  module Capcode
    set :erb, &quot;/path/to/erb/files&quot;
    ...
  end
</pre>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000012-source">
<pre>
    <span class="ruby-comment cmt"># File lib/capcode/configuration.rb, line 27</span>
27:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>( <span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span> )
28:       <span class="ruby-identifier">config</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span>
29:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000008" class="method-detail">
        <a name="M000008"></a>

        <div class="method-heading">
          <a href="#M000008" class="method-signature">
          <span class="method-name">use</span><span class="method-args">(middleware, *args, &amp;block)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
This method allow you to <a href="Capcode.html#M000008">use</a> a Rack
middleware
</p>
<p>
Example :
</p>
<pre>
  module Capcode
    ...
    use Rack::Codehighlighter, :coderay, :element =&gt; &quot;pre&quot;,
      :pattern =&gt; /\A:::(\w+)\s*\n/, :logging =&gt; false
    ...
  end
</pre>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000008-source">
<pre>
     <span class="ruby-comment cmt"># File lib/capcode.rb, line 488</span>
488:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">use</span>(<span class="ruby-identifier">middleware</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
489:       <span class="ruby-identifier">middlewares</span> <span class="ruby-operator">&lt;&lt;</span> [<span class="ruby-identifier">middleware</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>]
490:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>


    </div>


  </div>


<div id="validator-badges">
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>

</body>
</html>