<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> Capcode, the Documentation » Module: Capcode </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" /> <script language="JavaScript" type="text/javascript"> // <![CDATA[ function toggleSource( id ) { var elem var link if( document.getElementById ) { elem = document.getElementById( id ) link = document.getElementById( "l_" + id ) } else if ( document.all ) { elem = eval( "document.all." + id ) link = eval( "document.all.l_" + id ) } else return false; if( elem.style.display == "block" ) { elem.style.display = "none" link.innerHTML = "show source" } else { elem.style.display = "block" link.innerHTML = "hide source" } } function openCode( url ) { window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" ) } // ]]> </script> </head> <body> <!-- <div id="menu"> <h3 class="title">Module: Capcode</h3> </div> --> <div id="fullpage"> <div id="pager"> <table> <tr><td><img src="../rubyfr.png" /></td> <td id="pagertd"> <strong># Module: Capcode<br /> [ "<a href="../files/README.html" value="File: README">README</a>", "<a href="../files/AUTHORS.html" value="File: AUTHORS">AUTHORS</a>", "<a href="../files/COPYING.html" value="File: COPYING">COPYING</a>", "<a href="../files/lib/capcode_rb.html" value="File: capcode.rb">lib/capcode.rb</a>", <a href="http://greg.rubyfr.net">nil</a>].each do<br /> <a href="../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br /> <a href="../classes/Capcode/Views.html" title="Module: Capcode::Views">Capcode::Views</a>.view_html<br /> <a href="../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br /> <a href="../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br /> <a href="../classes/Capcode/RenderError.html" title="Class: Capcode::RenderError">Capcode::RenderError</a>.view_html<br /> <a href="../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br /> <a href="../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br /> end</strong> </td></tr> </table> </ul> </div> <div id="Capcode" class="page_shade"> <div class="page"> <h3>Module Capcode</h3> (in files <a href="../files/lib/capcode_rb.html">lib/capcode.rb</a> ) <h4>Includes</h4> <ul> <li>Rack</li> <li><a href="Capcode/Helpers.html">Capcode::Helpers</a></li> <li><a href="Capcode/Views.html">Capcode::Views</a></li> </ul> <h2 class="ruled">Methods</h2> <h4 class="ruled">Public Class method: <strong><a name="M000001">Route(*u)</a></strong> <a href="#M000001"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: Route" /></a></h4> <p> Add routes to a controller class </p> <pre> module Capcode class Hello < Route '/hello/(.*)', '/hello/([^#]*)#(.*)' def get( arg1, arg2 ) ... end end end </pre> <p> In the <tt>get</tt> method, you will receive the maximum of parameters declared by the routes. In this example, you will receive 2 parameters. So if you go to <tt>/hello/world#friend</tt> then <tt>arg1</tt> will be set to <tt>world</tt> and <tt>arg2</tt> will be set to <tt>friend</tt>. Now if you go to <tt>/hello/you</tt>, then <tt>arg1</tt> will be set to <tt>you</tt> and <tt>arg2</tt> will be set to <tt>nil</tt> </p> <p> If the regexp in the route does not match, all arguments will be <tt>nil</tt> </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000001_source')" id="l_M000001_source">show source</a> ]</p> <div id="M000001_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 202</span> 202: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Route</span> <span class="ruby-operator">*</span><span class="ruby-identifier">u</span> 203: <span class="ruby-constant">Class</span>.<span class="ruby-identifier">new</span> { 204: <span class="ruby-identifier">meta_def</span>(<span class="ruby-identifier">:__urls__</span>){ 205: <span class="ruby-comment cmt"># < Route '/hello/world/([^\/]*)/id(\d*)', '/hello/(.*)'</span> 206: <span class="ruby-comment cmt"># # => [ {'/hello/world' => '([^\/]*)/id(\d*)', '/hello' => '(.*)'}, 2, <Capcode::Klass> ]</span> 207: <span class="ruby-identifier">h</span> = {} 208: <span class="ruby-identifier">max</span> = <span class="ruby-value">0</span> 209: <span class="ruby-identifier">u</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_u</span><span class="ruby-operator">|</span> 210: <span class="ruby-identifier">m</span> = <span class="ruby-regexp re">/\/([^\/]*\(.*)/</span>.<span class="ruby-identifier">match</span>( <span class="ruby-identifier">_u</span> ) 211: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span> 212: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">"Route `#{_u}' already defined with regexp `#{h[_u]}' !"</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_u</span>) 213: <span class="ruby-identifier">h</span>[<span class="ruby-identifier">_u</span>] = <span class="ruby-value str">''</span> 214: <span class="ruby-keyword kw">else</span> 215: <span class="ruby-identifier">_pre</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span> 216: <span class="ruby-identifier">_pre</span> = <span class="ruby-value str">"/"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_pre</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> 217: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">"Route `#{_pre}' already defined with regexp `#{h[_pre]}' !"</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_pre</span>) 218: <span class="ruby-identifier">h</span>[<span class="ruby-identifier">_pre</span>] = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>] 219: <span class="ruby-identifier">max</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>]).<span class="ruby-identifier">number_of_captures</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">max</span> <span class="ruby-operator"><</span> <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>]).<span class="ruby-identifier">number_of_captures</span> 220: <span class="ruby-keyword kw">end</span> 221: <span class="ruby-keyword kw">end</span> 222: [<span class="ruby-identifier">h</span>, <span class="ruby-identifier">max</span>, <span class="ruby-keyword kw">self</span>] 223: } 224: 225: <span class="ruby-comment cmt"># Hash containing all the request parameters (GET or POST)</span> 226: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span> 227: <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span> 228: <span class="ruby-keyword kw">end</span> 229: 230: <span class="ruby-comment cmt"># Hash containing all the environment variables</span> 231: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span> 232: <span class="ruby-ivar">@env</span> 233: <span class="ruby-keyword kw">end</span> 234: 235: <span class="ruby-comment cmt"># Hash session</span> 236: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span> 237: <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>] 238: <span class="ruby-keyword kw">end</span> 239: 240: <span class="ruby-comment cmt"># Return the Rack::Request object</span> 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span> 242: <span class="ruby-ivar">@request</span> 243: <span class="ruby-keyword kw">end</span> 244: 245: <span class="ruby-comment cmt"># Return the Rack::Response object</span> 246: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span> 247: <span class="ruby-ivar">@response</span> 248: <span class="ruby-keyword kw">end</span> 249: 250: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">call</span>( <span class="ruby-identifier">e</span> ) <span class="ruby-comment cmt">#:nodoc:</span> 251: <span class="ruby-ivar">@env</span> = <span class="ruby-identifier">e</span> 252: <span class="ruby-ivar">@response</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Response</span>.<span class="ruby-identifier">new</span> 253: <span class="ruby-ivar">@request</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Request</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@env</span>) 254: 255: <span class="ruby-comment cmt"># __k = self.class.to_s.split( /::/ )[-1].downcase.to_sym</span> 256: <span class="ruby-comment cmt"># @@__FILTERS.each do |f|</span> 257: <span class="ruby-comment cmt"># proc = f.delete(:action)</span> 258: <span class="ruby-comment cmt"># __run = true</span> 259: <span class="ruby-comment cmt"># if f[:only]</span> 260: <span class="ruby-comment cmt"># __run = f[:only].include?(__k)</span> 261: <span class="ruby-comment cmt"># end</span> 262: <span class="ruby-comment cmt"># if f[:except]</span> 263: <span class="ruby-comment cmt"># __run = !f[:except].include?(__k)</span> 264: <span class="ruby-comment cmt"># end</span> 265: <span class="ruby-comment cmt"># </span> 266: <span class="ruby-comment cmt"># # proc.call(self) if __run</span> 267: <span class="ruby-comment cmt"># puts "call #{proc} for #{__k}"</span> 268: <span class="ruby-comment cmt"># end</span> 269: 270: <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@env</span>[<span class="ruby-value str">"REQUEST_METHOD"</span>] 271: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">"GET"</span> 272: <span class="ruby-identifier">finalPath</span> = <span class="ruby-keyword kw">nil</span> 273: <span class="ruby-identifier">finalArgs</span> = <span class="ruby-keyword kw">nil</span> 274: <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-keyword kw">nil</span> 275: 276: <span class="ruby-identifier">aPath</span> = <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">""</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">"/"</span> ) 277: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span>, <span class="ruby-identifier">r</span><span class="ruby-operator">|</span> 278: <span class="ruby-identifier">xPath</span> = <span class="ruby-identifier">p</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\//</span>, <span class="ruby-value str">""</span> ).<span class="ruby-identifier">split</span>( <span class="ruby-value str">"/"</span> ) 279: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">xPath</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">aPath</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> 280: <span class="ruby-identifier">diffArgs</span> = <span class="ruby-identifier">aPath</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">xPath</span> 281: <span class="ruby-identifier">diffNArgs</span> = <span class="ruby-identifier">diffArgs</span>.<span class="ruby-identifier">size</span> 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">finalNArgs</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">finalNArgs</span> <span class="ruby-operator">></span> <span class="ruby-identifier">diffNArgs</span> 283: <span class="ruby-identifier">finalPath</span> = <span class="ruby-identifier">p</span> 284: <span class="ruby-identifier">finalNArgs</span> = <span class="ruby-identifier">diffNArgs</span> 285: <span class="ruby-identifier">finalArgs</span> = <span class="ruby-identifier">diffArgs</span> 286: <span class="ruby-keyword kw">end</span> 287: <span class="ruby-keyword kw">end</span> 288: 289: <span class="ruby-keyword kw">end</span> 290: 291: <span class="ruby-identifier">nargs</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">1</span>] 292: <span class="ruby-identifier">regexp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>( <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">__urls__</span>[<span class="ruby-value">0</span>][<span class="ruby-identifier">finalPath</span>] ) 293: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">regexp</span>.<span class="ruby-identifier">match</span>( <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Utils</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-ivar">@request</span>.<span class="ruby-identifier">path</span>).<span class="ruby-identifier">gsub</span>( <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>( <span class="ruby-node">"^#{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> ) ) 294: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span> 295: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">ParameterError</span>, <span class="ruby-node">"Path info `#{@request.path_info}' does not match route regexp `#{regexp.source}'"</span> 296: <span class="ruby-keyword kw">else</span> 297: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">captures</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>)<span class="ruby-operator">?</span><span class="ruby-keyword kw">nil</span><span class="ruby-operator">:</span><span class="ruby-identifier">x</span> } 298: <span class="ruby-keyword kw">end</span> 299: 300: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">nargs</span> 301: <span class="ruby-identifier">args</span> <span class="ruby-operator"><<</span> <span class="ruby-keyword kw">nil</span> 302: <span class="ruby-keyword kw">end</span> 303: 304: <span class="ruby-identifier">get</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> ) 305: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">"POST"</span> 306: <span class="ruby-identifier">post</span> 307: <span class="ruby-keyword kw">end</span> 308: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:to_ary</span>) 309: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">status</span> = <span class="ruby-identifier">r</span>[<span class="ruby-value">0</span>] 310: <span class="ruby-identifier">r</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> 311: <span class="ruby-ivar">@response</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span> 312: <span class="ruby-keyword kw">end</span> 313: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">body</span> = <span class="ruby-identifier">r</span>[<span class="ruby-value">2</span>] 314: <span class="ruby-keyword kw">else</span> 315: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">r</span> 316: <span class="ruby-keyword kw">end</span> 317: 318: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">finish</span> 319: <span class="ruby-keyword kw">end</span> 320: 321: <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span> 322: <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span> 323: } 324: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000003">env()</a></strong> <a href="#M000003"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: env" /></a></h4> <p> Hash containing all the environment variables </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show source</a> ]</p> <div id="M000003_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 231</span> 231: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span> 232: <span class="ruby-ivar">@env</span> 233: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000007">map( r ) {|| ...}</a></strong> <a href="#M000007"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: map" /></a></h4> <p> This method help you to <a href="Capcode.html#M000007">map</a> and URL to a Rack or What you want Helper </p> <pre> Capcode.map( "/file" ) do Rack::File.new( "." ) end </pre> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000007_source')" id="l_M000007_source">show source</a> ]</p> <div id="M000007_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 331</span> 331: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">map</span>( <span class="ruby-identifier">r</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">b</span> ) 332: <span class="ruby-ivar">@@__ROUTES</span>[<span class="ruby-identifier">r</span>] = <span class="ruby-keyword kw">yield</span> 333: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000002">params()</a></strong> <a href="#M000002"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: params" /></a></h4> <p> Hash containing all the <a href="Capcode.html#M000005">request</a> parameters (GET or POST) </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000002_source')" id="l_M000002_source">show source</a> ]</p> <div id="M000002_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 226</span> 226: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span> 227: <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span> 228: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000005">request()</a></strong> <a href="#M000005"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: request" /></a></h4> <p> Return the Rack::Request object </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000005_source')" id="l_M000005_source">show source</a> ]</p> <div id="M000005_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 241</span> 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span> 242: <span class="ruby-ivar">@request</span> 243: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000006">response()</a></strong> <a href="#M000006"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: response" /></a></h4> <p> Return the Rack::Response object </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000006_source')" id="l_M000006_source">show source</a> ]</p> <div id="M000006_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 246</span> 246: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span> 247: <span class="ruby-ivar">@response</span> 248: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000008">run( args = {} ) {|self| ...}</a></strong> <a href="#M000008"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: run" /></a></h4> <p> Start your application. </p> <p> Options : </p> <ul> <li><tt>:port</tt> = Listen port </li> <li><tt>:host</tt> = Listen host </li> <li><tt>:server</tt> = Server type (webrick or mongrel) </li> <li><tt>:log</tt> = Output logfile (default: STDOUT) </li> <li><tt>:<a href="Capcode.html#M000004">session</a></tt> = Session parameters. See Rack::Session for more informations </li> <li><tt>:pid</tt> = PID file (default: $0.pid) </li> <li><tt>:daemonize</tt> = Daemonize application (default: false) </li> <li><tt>:db_config</tt> = database configuration file (default: database.yml) </li> <li><tt>:static</tt> = Static directory (default: none — relative to the working directory) </li> <li><tt>:root</tt> = Root directory (default: directory of the main.rb) — This is also the working directory ! </li> </ul> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000008_source')" id="l_M000008_source">show source</a> ]</p> <div id="M000008_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 348</span> 348: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>( <span class="ruby-identifier">args</span> = {} ) 349: <span class="ruby-identifier">__VERBOSE</span> = <span class="ruby-keyword kw">false</span> 350: 351: <span class="ruby-identifier">conf</span> = { 352: <span class="ruby-identifier">:port</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:port</span>]<span class="ruby-operator">||</span><span class="ruby-value">3000</span>, 353: <span class="ruby-identifier">:host</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:host</span>]<span class="ruby-operator">||</span><span class="ruby-value str">"localhost"</span>, 354: <span class="ruby-identifier">:server</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:server</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">nil</span>, 355: <span class="ruby-identifier">:log</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:log</span>]<span class="ruby-operator">||</span><span class="ruby-identifier">$stdout</span>, 356: <span class="ruby-identifier">:session</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:session</span>]<span class="ruby-operator">||</span>{}, 357: <span class="ruby-identifier">:pid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:pid</span>]<span class="ruby-operator">||</span><span class="ruby-node">"#{$0}.pid"</span>, 358: <span class="ruby-identifier">:daemonize</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:daemonize</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">false</span>, 359: <span class="ruby-identifier">:db_config</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:db_config</span>]<span class="ruby-operator">||</span><span class="ruby-value str">"database.yml"</span>, 360: <span class="ruby-identifier">:static</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:static</span>]<span class="ruby-operator">||</span><span class="ruby-keyword kw">nil</span>, 361: <span class="ruby-identifier">:root</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">args</span>[<span class="ruby-identifier">:root</span>]<span class="ruby-operator">||</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">$0</span>)), 362: 363: <span class="ruby-identifier">:console</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span> 364: } 365: 366: <span class="ruby-comment cmt"># Parse options</span> 367: <span class="ruby-identifier">opts</span> = <span class="ruby-constant">OptionParser</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">opts</span><span class="ruby-operator">|</span> 368: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-node">"Usage: #{File.basename($0)} [options]"</span> 369: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span> 370: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Specific options:"</span> 371: 372: <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> ) { 373: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>] = <span class="ruby-keyword kw">true</span> 374: } 375: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-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> 376: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:host</span>] = <span class="ruby-identifier">h</span> 377: } 378: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-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> 379: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:port</span>] = <span class="ruby-identifier">p</span> 380: } 381: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-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> 382: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>] = <span class="ruby-identifier">d</span> 383: } 384: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-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> 385: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>] = <span class="ruby-identifier">w</span> 386: } 387: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">"-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> 388: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>] = <span class="ruby-identifier">r</span> 389: } 390: 391: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span> 392: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Common options:"</span> 393: 394: <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> 395: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">opts</span> 396: <span class="ruby-identifier">exit</span> 397: <span class="ruby-keyword kw">end</span> 398: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">"-v"</span>, <span class="ruby-value str">"--version"</span>, <span class="ruby-value str">"Show versions"</span>) <span class="ruby-keyword kw">do</span> 399: <span class="ruby-identifier">puts</span> <span class="ruby-node">"Capcode version #{Capcode::CAPCOD_VERION} (ruby v#{RUBY_VERSION})"</span> 400: <span class="ruby-identifier">exit</span> 401: <span class="ruby-keyword kw">end</span> 402: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on_tail</span>( <span class="ruby-value str">"-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> 403: <span class="ruby-identifier">__VERBOSE</span> = <span class="ruby-keyword kw">true</span> 404: <span class="ruby-keyword kw">end</span> 405: <span class="ruby-keyword kw">end</span> 406: 407: <span class="ruby-keyword kw">begin</span> 408: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">parse!</span> <span class="ruby-constant">ARGV</span> 409: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">OptionParser</span><span class="ruby-operator">::</span><span class="ruby-constant">ParseError</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">ex</span> 410: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"!! #{ex.message}"</span> 411: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** use `#{File.basename($0)} --help` for more details..."</span> 412: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span> 413: <span class="ruby-keyword kw">end</span> 414: 415: <span class="ruby-comment cmt"># Run in the Working directory</span> 416: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Go on root directory (#{File.expand_path(conf[:root])})"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span> 417: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>( <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:root</span>] ) <span class="ruby-keyword kw">do</span> 418: 419: <span class="ruby-comment cmt"># Check that mongrel exists </span> 420: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">"mongrel"</span> 421: <span class="ruby-keyword kw">begin</span> 422: <span class="ruby-identifier">require</span> <span class="ruby-value str">'mongrel'</span> 423: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">"mongrel"</span> 424: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">LoadError</span> 425: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"!! could not load mongrel. Falling back to webrick."</span> 426: <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] = <span class="ruby-value str">"webrick"</span> 427: <span class="ruby-keyword kw">end</span> 428: <span class="ruby-keyword kw">end</span> 429: 430: <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">constants</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span> 431: <span class="ruby-keyword kw">begin</span> 432: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">eval</span> <span class="ruby-node">"Capcode::#{k}.public_methods(true).include?( '__urls__' )"</span> 433: <span class="ruby-identifier">u</span>, <span class="ruby-identifier">m</span>, <span class="ruby-identifier">c</span> = <span class="ruby-identifier">eval</span> <span class="ruby-node">"Capcode::#{k}.__urls__"</span> 434: <span class="ruby-identifier">u</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_u</span><span class="ruby-operator">|</span> 435: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">"Route `#{_u}' already define !"</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@__ROUTES</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_u</span>) 436: <span class="ruby-ivar">@@__ROUTES</span>[<span class="ruby-identifier">_u</span>] = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">new</span> 437: <span class="ruby-keyword kw">end</span> 438: <span class="ruby-keyword kw">end</span> 439: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span> 440: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span> 441: <span class="ruby-keyword kw">end</span> 442: <span class="ruby-keyword kw">end</span> 443: 444: <span class="ruby-comment cmt"># Set Static directory</span> 445: <span class="ruby-ivar">@@__STATIC_DIR</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">"/"</span>, <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>])) 446: 447: <span class="ruby-comment cmt"># Initialize Rack App</span> 448: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"** Map routes."</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span> 449: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">URLMap</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@@__ROUTES</span>) 450: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Initialize static directory (#{conf[:static]})"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span> 451: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Static</span>.<span class="ruby-identifier">new</span>( 452: <span class="ruby-identifier">app</span>, 453: <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">></span> [<span class="ruby-ivar">@@__STATIC_DIR</span>], 454: <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>]) 455: ) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:static</span>].<span class="ruby-identifier">nil?</span> 456: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"** Initialize session"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">__VERBOSE</span> 457: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Session</span><span class="ruby-operator">::</span><span class="ruby-constant">Cookie</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:session</span>] ) 458: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>) 459: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">ContentLength</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>) 460: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Lint</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>) 461: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">ShowExceptions</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>) 462: <span class="ruby-comment cmt"># app = Rack::Reloader.new(app) ## -- NE RELOAD QUE capcode.rb -- So !!!</span> 463: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">CommonLogger</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:log</span>]) ) 464: 465: <span class="ruby-comment cmt"># From rackup !!!</span> 466: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:daemonize</span>] 467: <span class="ruby-keyword kw">if</span> <span class="ruby-regexp re">/java/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-constant">RUBY_PLATFORM</span>).<span class="ruby-identifier">nil?</span> 468: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator"><</span> <span class="ruby-value str">"1.9"</span> 469: <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span> 470: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span> 471: <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span> 472: <span class="ruby-comment cmt"># Dir.chdir "/"</span> 473: <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span> <span class="ruby-value">0000</span> 474: <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">"/dev/null"</span> 475: <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> 476: <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> 477: <span class="ruby-keyword kw">else</span> 478: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">daemon</span> 479: <span class="ruby-keyword kw">end</span> 480: <span class="ruby-keyword kw">else</span> 481: <span class="ruby-identifier">puts</span> <span class="ruby-node">"!! daemonize option unavailable on #{RUBY_PLATFORM} platform."</span> 482: <span class="ruby-keyword kw">end</span> 483: 484: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>], <span class="ruby-value str">'w'</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">"#{Process.pid}"</span>) } 485: <span class="ruby-identifier">at_exit</span> { <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:pid</span>]) } 486: <span class="ruby-keyword kw">end</span> 487: 488: <span class="ruby-comment cmt"># Start database</span> 489: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">include?</span> <span class="ruby-value str">"db_connect"</span> 490: <span class="ruby-identifier">db_connect</span>( <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:db_config</span>], <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:log</span>] ) 491: <span class="ruby-keyword kw">end</span> 492: 493: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span> 494: <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> ) 495: <span class="ruby-keyword kw">end</span> 496: 497: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:console</span>] 498: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"Run console..."</span> 499: <span class="ruby-constant">IRB</span>.<span class="ruby-identifier">start</span> 500: <span class="ruby-identifier">exit</span> 501: <span class="ruby-keyword kw">end</span> 502: 503: <span class="ruby-comment cmt"># Start server</span> 504: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">conf</span>[<span class="ruby-identifier">:server</span>] 505: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">"mongrel"</span> 506: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Starting Mongrel on #{conf[:host]}:#{conf[:port]}"</span> 507: <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">Mongrel</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">></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> 508: <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> } 509: } 510: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">"webrick"</span> 511: <span class="ruby-identifier">puts</span> <span class="ruby-node">"** Starting WEBrick on #{conf[:host]}:#{conf[:port]}"</span> 512: <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">WEBrick</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">></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> 513: <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> } 514: } 515: <span class="ruby-keyword kw">end</span> 516: <span class="ruby-keyword kw">end</span> 517: <span class="ruby-keyword kw">end</span> </pre> </div> </div> <h4 class="ruled">Public Class method: <strong><a name="M000004">session()</a></strong> <a href="#M000004"><img src="../permalink.gif" border="0" title="Permalink to Public Class method: session" /></a></h4> <p> Hash <a href="Capcode.html#M000004">session</a> </p> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show source</a> ]</p> <div id="M000004_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/capcode.rb, line 236</span> 236: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span> 237: <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>] 238: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> </div> </div> </body> </html>