<?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> <a href="#M000010">application</a> <a href="#M000013">config</a> <a href="#M000003">env</a> <a href="#M000009">http_authentication</a> <a href="#M000007">map</a> <a href="#M000002">params</a> <a href="#M000005">request</a> <a href="#M000006">response</a> <a href="#M000011">run</a> <a href="#M000004">session</a> <a href="#M000012">set</a> <a href="#M000008">use</a> </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"> [RW] </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 < 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"># < Route '/hello/world/([^\/]*)/id(\d*)', '/hello/(.*)', :agent => /Songbird (\d\.\d)[\d\/]*?/</span> 309: <span class="ruby-comment cmt"># # => [ {'/hello/world' => '([^\/]*)/id(\d*)', '/hello' => '(.*)'}, </span> 310: <span class="ruby-comment cmt"># 2, </span> 311: <span class="ruby-comment cmt"># <Capcode::Klass>, </span> 312: <span class="ruby-comment cmt"># {:agent => /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">"Route `#{current_route_path}' already defined with regexp `#{hash_of_routes[current_route_path]}' !"</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">"/"</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">"Route `#{_pre}' already defined with regexp `#{hash_of_routes[_pre]}' !"</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"><</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">"Bad route declaration !"</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 "call #{proc} for #{__k}"</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">></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">"^#{r.gsub(/\/$/, "")}([/]{1}.*)?$"</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">></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">></span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:type</span>], <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:realm</span>], <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">></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">""</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">"/"</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">""</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">"/"</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">></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">"^#{finalPath}"</span> ), <span class="ruby-value str">""</span> ).<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">""</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">"Path info `#{@request.path_info}' does not match route regexp `#{regexp.source}'"</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"><</span> <span class="ruby-identifier">nargs</span> 435: <span class="ruby-identifier">args</span> <span class="ruby-operator"><<</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">"REQUEST_METHOD"</span>] 439: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">"GET"</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">"POST"</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">"_method"</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">_</span><span class="ruby-operator">|</span> <span class="ruby-value str">"post"</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">"REQUEST_METHOD"</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">"Capcode::#{k}.public_methods(true).include?( '__urls__' )"</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">"Capcode::#{k}.__urls__"</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, "Route `#{current_route_path}' already define !", 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">"Route `#{current_route_path}' already define !"</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">></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 == "/")?conf[:static]:"/"+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">"/"</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">"/"</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">"** Map routes."</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">"** Initialize static directory (#{conf[:static]})"</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 => [@@__STATIC_DIR], </span> 583: <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">></span> [<span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">static</span>], 584: <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-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">"** Initialize session"</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">"** Load middleware #{middleware}"</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">&</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">"db_connect"</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 = {}, &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 : "Capcode.app" </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 : "opaque" </li> <li><tt>:routes</tt> : Routes - default : "/" </li> </ul> <p> The block must return a Hash of username => password like that : </p> <pre> { "user1" => "pass1", "user2" => "pass2", # ... } </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">&</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">></span> <span class="ruby-identifier">:basic</span>, 512: <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"Capcode.app"</span>, 513: <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"opaque"</span>, 514: <span class="ruby-identifier">:routes</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"/"</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( "/file" ) do Rack::File.new( "." ) 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">&</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">"Usage: #{File.basename($0)} [options]"</span> 628: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span> 629: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Specific options:"</span> 630: 631: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-C"</span>, <span class="ruby-value str">"--console"</span>, <span class="ruby-value str">"Run in console mode with IRB (default: false)"</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">"-h"</span>, <span class="ruby-value str">"--host HOSTNAME"</span>, <span class="ruby-node">"Host for web server to bind to (default: #{conf[:host]})"</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">"-p"</span>, <span class="ruby-value str">"--port NUM"</span>, <span class="ruby-node">"Port for web server (default: #{conf[:port]})"</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">"-d"</span>, <span class="ruby-value str">"--daemonize [true|false]"</span>, <span class="ruby-node">"Daemonize (default: #{conf[:daemonize]})"</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">"-r"</span>, <span class="ruby-value str">"--root PATH"</span>, <span class="ruby-node">"Working directory (default: #{conf[:root]})"</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">"-s"</span>, <span class="ruby-value str">"--static PATH"</span>, <span class="ruby-node">"Static directory -- relative to the root directory (default: #{conf[:static]})"</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">""</span> 651: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Common options:"</span> 652: 653: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">"-?"</span>, <span class="ruby-value str">"--help"</span>, <span class="ruby-value str">"Show this message"</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">"-v"</span>, <span class="ruby-value str">"--version"</span>, <span class="ruby-value str">"Show versions"</span>) <span class="ruby-keyword kw">do</span> 658: <span class="ruby-identifier">puts</span> <span class="ruby-node">"Capcode version #{Capcode::CAPCOD_VERION} (ruby v#{RUBY_VERSION})"</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">"-V"</span>, <span class="ruby-value str">"--verbose"</span>, <span class="ruby-value str">"Run in verbose mode"</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">></span> <span class="ruby-identifier">ex</span> 669: <span class="ruby-identifier">puts</span> <span class="ruby-node">"!! #{ex.message}"</span> 670: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** use `#{File.basename($0)} --help` for more details..."</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">"** Go on root directory (#{File.expand_path(conf[:root])})"</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">"mongrel"</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">"mongrel"</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">"!! could not load mongrel. Falling back to webrick."</span> 685: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">"webrick"</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"><</span> <span class="ruby-value str">"1.9"</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 "/"</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">"/dev/null"</span> 699: <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">"/dev/null"</span>, <span class="ruby-value str">"a"</span> 700: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">"/dev/null"</span>, <span class="ruby-value str">"a"</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">"!! daemonize option unavailable on #{RUBY_PLATFORM} platform."</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">"#{Process.pid}"</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">"Run console..."</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">"mongrel"</span> 729: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Starting Mongrel on #{conf[:host]}:#{conf[:port]}"</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">></span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>], <span class="ruby-identifier">:Host</span> =<span class="ruby-operator">></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">"SIGINT"</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">"webrick"</span> 734: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Starting WEBrick on #{conf[:host]}:#{conf[:port]}"</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">></span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>], <span class="ruby-identifier">:BindAddress</span> =<span class="ruby-operator">></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">"SIGINT"</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) — 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, … </p> <p> Example : </p> <pre> module Capcode set :erb, "/path/to/erb/files" ... 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, &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 => "pre", :pattern => /\A:::(\w+)\s*\n/, :logging => 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">&</span><span class="ruby-identifier">block</span>) 489: <span class="ruby-identifier">middlewares</span> <span class="ruby-operator"><<</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>