Capcode 0.9.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/README.rdoc +3 -0
  2. data/examples/rest.log +15 -0
  3. data/examples/static.rb +12 -0
  4. data/examples/static/static-index.html +1 -0
  5. data/lib/capcode.rb +14 -344
  6. data/lib/capcode/filters.rb +1 -0
  7. data/lib/capcode/helpers.rb +246 -0
  8. data/lib/capcode/http_error.rb +49 -0
  9. data/lib/capcode/static_files.rb +68 -0
  10. data/lib/capcode/version.rb +1 -1
  11. metadata +46 -61
  12. data/doc/rdoc/classes/Capcode.html +0 -1076
  13. data/doc/rdoc/classes/Capcode/Base.html +0 -136
  14. data/doc/rdoc/classes/Capcode/Configuration.html +0 -290
  15. data/doc/rdoc/classes/Capcode/HTTPError.html +0 -148
  16. data/doc/rdoc/classes/Capcode/Helpers.html +0 -674
  17. data/doc/rdoc/classes/Capcode/Helpers/Authorization.html +0 -219
  18. data/doc/rdoc/classes/Capcode/Resource.html +0 -111
  19. data/doc/rdoc/classes/Capcode/StaticFiles.html +0 -199
  20. data/doc/rdoc/classes/Capcode/Views.html +0 -112
  21. data/doc/rdoc/created.rid +0 -1
  22. data/doc/rdoc/files/AUTHORS.html +0 -107
  23. data/doc/rdoc/files/COPYING.html +0 -531
  24. data/doc/rdoc/files/README_rdoc.html +0 -887
  25. data/doc/rdoc/files/lib/capcode/base/db_rb.html +0 -101
  26. data/doc/rdoc/files/lib/capcode/configuration_rb.html +0 -101
  27. data/doc/rdoc/files/lib/capcode/filters_rb.html +0 -101
  28. data/doc/rdoc/files/lib/capcode/helpers/auth_rb.html +0 -101
  29. data/doc/rdoc/files/lib/capcode/render/text_rb.html +0 -101
  30. data/doc/rdoc/files/lib/capcode_rb.html +0 -144
  31. data/doc/rdoc/fr_class_index.html +0 -35
  32. data/doc/rdoc/fr_file_index.html +0 -35
  33. data/doc/rdoc/fr_method_index.html +0 -56
  34. data/doc/rdoc/index.html +0 -24
  35. data/doc/rdoc/rdoc-style.css +0 -208
  36. data/lib/capcode.rbSAVE +0 -881
@@ -1,1076 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Module: Capcode</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Module</strong></td>
53
- <td class="class-name-in-header">Capcode</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../files/lib/capcode_rb.html">
59
- lib/capcode.rb
60
- </a>
61
- <br />
62
- <a href="../files/lib/capcode/base/db_rb.html">
63
- lib/capcode/base/db.rb
64
- </a>
65
- <br />
66
- <a href="../files/lib/capcode/configuration_rb.html">
67
- lib/capcode/configuration.rb
68
- </a>
69
- <br />
70
- <a href="../files/lib/capcode/filters_rb.html">
71
- lib/capcode/filters.rb
72
- </a>
73
- <br />
74
- <a href="../files/lib/capcode/render/text_rb.html">
75
- lib/capcode/render/text.rb
76
- </a>
77
- <br />
78
- <a href="../files/lib/capcode/helpers/auth_rb.html">
79
- lib/capcode/helpers/auth.rb
80
- </a>
81
- <br />
82
- </td>
83
- </tr>
84
-
85
- </table>
86
- </div>
87
- <!-- banner header -->
88
-
89
- <div id="bodyContent">
90
-
91
-
92
-
93
- <div id="contextContent">
94
-
95
-
96
-
97
- </div>
98
-
99
- <div id="method-list">
100
- <h3 class="section-bar">Methods</h3>
101
-
102
- <div class="name-list">
103
- <a href="#M000001">Route</a>&nbsp;&nbsp;
104
- <a href="#M000010">application</a>&nbsp;&nbsp;
105
- <a href="#M000014">before_filter</a>&nbsp;&nbsp;
106
- <a href="#M000003">env</a>&nbsp;&nbsp;
107
- <a href="#M000009">http_authentication</a>&nbsp;&nbsp;
108
- <a href="#M000012">logger</a>&nbsp;&nbsp;
109
- <a href="#M000007">map</a>&nbsp;&nbsp;
110
- <a href="#M000002">params</a>&nbsp;&nbsp;
111
- <a href="#M000005">request</a>&nbsp;&nbsp;
112
- <a href="#M000006">response</a>&nbsp;&nbsp;
113
- <a href="#M000011">run</a>&nbsp;&nbsp;
114
- <a href="#M000004">session</a>&nbsp;&nbsp;
115
- <a href="#M000013">set</a>&nbsp;&nbsp;
116
- <a href="#M000008">use</a>&nbsp;&nbsp;
117
- </div>
118
- </div>
119
-
120
- </div>
121
-
122
-
123
- <!-- if includes -->
124
- <div id="includes">
125
- <h3 class="section-bar">Included Modules</h3>
126
-
127
- <div id="includes-list">
128
- <span class="include-name">Rack</span>
129
- <span class="include-name"><a href="Capcode/Helpers.html">Capcode::Helpers</a></span>
130
- <span class="include-name"><a href="Capcode/Views.html">Capcode::Views</a></span>
131
- </div>
132
- </div>
133
-
134
- <div id="section">
135
-
136
- <div id="class-list">
137
- <h3 class="section-bar">Classes and Modules</h3>
138
-
139
- Module <a href="Capcode/Helpers.html" class="link">Capcode::Helpers</a><br />
140
- Module <a href="Capcode/Resource.html" class="link">Capcode::Resource</a><br />
141
- Module <a href="Capcode/Views.html" class="link">Capcode::Views</a><br />
142
- Class <a href="Capcode/Base.html" class="link">Capcode::Base</a><br />
143
- Class <a href="Capcode/Configuration.html" class="link">Capcode::Configuration</a><br />
144
- Class <a href="Capcode/HTTPError.html" class="link">Capcode::HTTPError</a><br />
145
- Class <a href="Capcode/StaticFiles.html" class="link">Capcode::StaticFiles</a><br />
146
-
147
- </div>
148
-
149
- <div id="constants-list">
150
- <h3 class="section-bar">Constants</h3>
151
-
152
- <div class="name-list">
153
- <table summary="Constants">
154
- <tr class="top-aligned-row context-row">
155
- <td class="context-item-name">Route</td>
156
- <td>=</td>
157
- <td class="context-item-value">Capcode::Route(nil)</td>
158
- </tr>
159
- </table>
160
- </div>
161
- </div>
162
-
163
-
164
-
165
- <div id="attribute-list">
166
- <h3 class="section-bar">Attributes</h3>
167
-
168
- <div class="name-list">
169
- <table>
170
- <tr class="top-aligned-row context-row">
171
- <td class="context-item-name">__auth__</td>
172
- <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
173
- <td class="context-item-desc"></td>
174
- </tr>
175
- </table>
176
- </div>
177
- </div>
178
-
179
-
180
-
181
- <!-- if method_list -->
182
- <div id="methods">
183
- <h3 class="section-bar">Public Class methods</h3>
184
-
185
- <div id="method-M000001" class="method-detail">
186
- <a name="M000001"></a>
187
-
188
- <div class="method-heading">
189
- <a href="#M000001" class="method-signature">
190
- <span class="method-name">Route</span><span class="method-args">(*routes_paths)</span>
191
- </a>
192
- </div>
193
-
194
- <div class="method-description">
195
- <p>
196
- Add routes to a controller class
197
- </p>
198
- <pre>
199
- module Capcode
200
- class Hello &lt; Route '/hello/(.*)', '/hello/([^#]*)#(.*)'
201
- def get( arg1, arg2 )
202
- ...
203
- end
204
- end
205
- end
206
- </pre>
207
- <p>
208
- In the <tt>get</tt> method, you will receive the maximum of parameters
209
- declared by the routes. In this example, you will receive 2 parameters. So
210
- if you go to <tt>/hello/world#friend</tt> then <tt>arg1</tt> will be <a
211
- href="Capcode.html#M000013">set</a> to <tt>world</tt> and <tt>arg2</tt>
212
- will be <a href="Capcode.html#M000013">set</a> to <tt>friend</tt>. Now if
213
- you go to <tt>/hello/you</tt>, then <tt>arg1</tt> will be <a
214
- href="Capcode.html#M000013">set</a> to <tt>you</tt> and <tt>arg2</tt> will
215
- be <a href="Capcode.html#M000013">set</a> to <tt>nil</tt>
216
- </p>
217
- <p>
218
- If the regexp in the route does not match, all arguments will be
219
- <tt>nil</tt>
220
- </p>
221
- <p><a class="source-toggle" href="#"
222
- onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
223
- <div class="method-source-code" id="M000001-source">
224
- <pre>
225
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 396</span>
226
- 396: <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>
227
- 397: <span class="ruby-identifier">create_path</span> = <span class="ruby-identifier">routes_paths</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">nil?</span>
228
- 398: <span class="ruby-constant">Class</span>.<span class="ruby-identifier">new</span> {
229
- 399: <span class="ruby-identifier">meta_def</span>(<span class="ruby-identifier">:__urls__</span>) {
230
- 400: <span class="ruby-identifier">routes_paths</span> = [<span class="ruby-value str">'/'</span><span class="ruby-operator">+</span><span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^Capcode::/</span>, <span class="ruby-value str">&quot;&quot;</span> ).<span class="ruby-identifier">underscore</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">create_path</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">true</span>
231
- 401: <span class="ruby-comment cmt"># &lt; Route '/hello/world/([^\/]*)/id(\d*)', '/hello/(.*)', :agent =&gt; /Songbird (\d\.\d)[\d\/]*?/</span>
232
- 402: <span class="ruby-comment cmt"># # =&gt; [ {</span>
233
- 403: <span class="ruby-comment cmt"># '/hello/world' =&gt; {</span>
234
- 404: <span class="ruby-comment cmt"># :regexp =&gt; '([^\/]*)/id(\d*)',</span>
235
- 405: <span class="ruby-comment cmt"># :route =&gt; '/hello/world/([^\/]*)/id(\d*)',</span>
236
- 406: <span class="ruby-comment cmt"># :nargs =&gt; 2</span>
237
- 407: <span class="ruby-comment cmt"># },</span>
238
- 408: <span class="ruby-comment cmt"># '/hello/world' =&gt; {</span>
239
- 409: <span class="ruby-comment cmt"># :regexp =&gt; '(.*)',</span>
240
- 410: <span class="ruby-comment cmt"># :route =&gt; '/hello/(.*)',</span>
241
- 411: <span class="ruby-comment cmt"># :nargs =&gt; 1</span>
242
- 412: <span class="ruby-comment cmt"># }</span>
243
- 413: <span class="ruby-comment cmt"># },</span>
244
- 414: <span class="ruby-comment cmt"># 2, </span>
245
- 415: <span class="ruby-comment cmt"># &lt;Capcode::Klass&gt;, </span>
246
- 416: <span class="ruby-comment cmt"># {:agent =&gt; /Songbird (\d\.\d)[\d\/]*?/} ]</span>
247
- 417: <span class="ruby-identifier">hash_of_routes</span> = {}
248
- 418: <span class="ruby-identifier">max_captures_for_routes</span> = <span class="ruby-value">0</span>
249
- 419: <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>
250
- 420: <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>
251
- 421: <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> )
252
- 422: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span>
253
- 423: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{current_route_path}' already defined with regexp `#{hash_of_routes[current_route_path]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash_of_routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">current_route_path</span>)
254
- 424: <span class="ruby-identifier">hash_of_routes</span>[<span class="ruby-identifier">current_route_path</span>] = {
255
- 425: <span class="ruby-identifier">:regexp</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">''</span>,
256
- 426: <span class="ruby-identifier">:route</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">current_route_path</span>,
257
- 427: <span class="ruby-identifier">:nargs</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
258
- 428: }
259
- 429: <span class="ruby-keyword kw">else</span>
260
- 430: <span class="ruby-identifier">_pre</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span>
261
- 431: <span class="ruby-identifier">_pre</span> = <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_pre</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
262
- 432: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{_pre}' already defined with regexp `#{hash_of_routes[_pre]}' !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash_of_routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">_pre</span>)
263
- 433: <span class="ruby-identifier">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>
264
- 434:
265
- 435: <span class="ruby-identifier">hash_of_routes</span>[<span class="ruby-identifier">_pre</span>] = {
266
- 436: <span class="ruby-identifier">:regexp</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">captures</span>[<span class="ruby-value">0</span>],
267
- 437: <span class="ruby-identifier">:route</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">current_route_path</span>,
268
- 438: <span class="ruby-identifier">:nargs</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">captures_for_routes</span>
269
- 439: }
270
- 440: <span class="ruby-identifier">max_captures_for_routes</span> = <span class="ruby-identifier">captures_for_routes</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">max_captures_for_routes</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">captures_for_routes</span>
271
- 441: <span class="ruby-keyword kw">end</span>
272
- 442: <span class="ruby-keyword kw">else</span>
273
- 443: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">ParameterError</span>, <span class="ruby-value str">&quot;Bad route declaration !&quot;</span>, <span class="ruby-identifier">caller</span>
274
- 444: <span class="ruby-keyword kw">end</span>
275
- 445: <span class="ruby-keyword kw">end</span>
276
- 446: [<span class="ruby-identifier">hash_of_routes</span>, <span class="ruby-identifier">max_captures_for_routes</span>, <span class="ruby-keyword kw">self</span>]
277
- 447: }
278
- 448:
279
- 449: <span class="ruby-comment cmt"># Hash containing all the request parameters (GET or POST)</span>
280
- 450: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
281
- 451: <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
282
- 452: <span class="ruby-keyword kw">end</span>
283
- 453:
284
- 454: <span class="ruby-comment cmt"># Hash containing all the environment variables</span>
285
- 455: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
286
- 456: <span class="ruby-ivar">@env</span>
287
- 457: <span class="ruby-keyword kw">end</span>
288
- 458:
289
- 459: <span class="ruby-comment cmt"># Session hash</span>
290
- 460: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
291
- 461: <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
292
- 462: <span class="ruby-keyword kw">end</span>
293
- 463:
294
- 464: <span class="ruby-comment cmt"># Return the Rack::Request object</span>
295
- 465: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
296
- 466: <span class="ruby-ivar">@request</span>
297
- 467: <span class="ruby-keyword kw">end</span>
298
- 468:
299
- 469: <span class="ruby-comment cmt"># Return the Rack::Response object</span>
300
- 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
301
- 471: <span class="ruby-ivar">@response</span>
302
- 472: <span class="ruby-keyword kw">end</span>
303
- 473:
304
- 474: <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>
305
- 475: <span class="ruby-ivar">@env</span> = <span class="ruby-identifier">e</span>
306
- 476: <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>
307
- 477: <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>)
308
- 478:
309
- 479: <span class="ruby-comment cmt"># Check authz</span>
310
- 480: <span class="ruby-identifier">authz_options</span> = <span class="ruby-keyword kw">nil</span>
311
- 481: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span> <span class="ruby-keyword kw">and</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">__auth__</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
312
- 482: <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>
313
- 483: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">authz_options</span>.<span class="ruby-identifier">nil?</span>
314
- 484: <span class="ruby-identifier">route</span> = <span class="ruby-keyword kw">nil</span>
315
- 485:
316
- 486: <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>
317
- 487: <span class="ruby-identifier">regexp</span> = <span class="ruby-node">&quot;^#{r.gsub(/\/$/, &quot;&quot;)}([/]{1}.*)?$&quot;</span>
318
- 488: <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> )
319
- 489: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">route</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">route</span>.<span class="ruby-identifier">size</span>
320
- 490: <span class="ruby-identifier">route</span> = <span class="ruby-identifier">r</span>
321
- 491: <span class="ruby-identifier">authz_options</span> = <span class="ruby-identifier">o</span>
322
- 492: <span class="ruby-keyword kw">end</span>
323
- 493: <span class="ruby-keyword kw">end</span>
324
- 494: <span class="ruby-keyword kw">end</span>
325
- 495: <span class="ruby-keyword kw">end</span>
326
- 496: <span class="ruby-keyword kw">end</span>
327
- 497:
328
- 498: <span class="ruby-identifier">r</span> = <span class="ruby-identifier">catch</span>(<span class="ruby-identifier">:halt</span>) {
329
- 499: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">authz_options</span>.<span class="ruby-identifier">nil?</span>
330
- 500: <span class="ruby-identifier">http_authentication</span>( <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:type</span>], <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:realm</span>], <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:realm</span>] ) {
331
- 501: <span class="ruby-identifier">authz_options</span>[<span class="ruby-identifier">:autz</span>]
332
- 502: }
333
- 503: <span class="ruby-keyword kw">end</span>
334
- 504:
335
- 505: <span class="ruby-identifier">max_match_size</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>]
336
- 506: <span class="ruby-identifier">match_distance</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>]
337
- 507:
338
- 508: <span class="ruby-identifier">result_route</span> = <span class="ruby-keyword kw">nil</span>
339
- 509: <span class="ruby-identifier">result_nargs</span> = <span class="ruby-keyword kw">nil</span>
340
- 510: <span class="ruby-identifier">result_args</span> = []
341
- 511:
342
- 512: <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">route</span>, <span class="ruby-identifier">data</span><span class="ruby-operator">|</span>
343
- 513: <span class="ruby-identifier">regexp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;^&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">data</span>[<span class="ruby-identifier">:route</span>]<span class="ruby-operator">+</span><span class="ruby-value str">&quot;$&quot;</span>)
344
- 514:
345
- 515: <span class="ruby-identifier">matching</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>)
346
- 516: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matching</span>.<span class="ruby-identifier">nil?</span>
347
- 517:
348
- 518: <span class="ruby-identifier">result_args</span> = <span class="ruby-identifier">matching</span>.<span class="ruby-identifier">to_a</span>
349
- 519: <span class="ruby-identifier">result_args</span>.<span class="ruby-identifier">shift</span>
350
- 520: <span class="ruby-identifier">match_size</span> = <span class="ruby-identifier">matching</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
351
- 521:
352
- 522: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match_size</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">max_match_size</span>
353
- 523: <span class="ruby-comment cmt"># OK Terminé</span>
354
- 524: <span class="ruby-identifier">result_route</span> = <span class="ruby-identifier">data</span>[<span class="ruby-identifier">:route</span>]
355
- 525: <span class="ruby-identifier">result_nargs</span> = <span class="ruby-identifier">data</span>[<span class="ruby-identifier">:nargs</span>]
356
- 526:
357
- 527: <span class="ruby-keyword kw">break</span>
358
- 528: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">max_match_size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">match_size</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">match_distance</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max_match_size</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">match_size</span>
359
- 529: <span class="ruby-identifier">match_distance</span> = <span class="ruby-identifier">max_match_size</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">match_size</span>
360
- 530:
361
- 531: <span class="ruby-identifier">result_route</span> = <span class="ruby-identifier">data</span>[<span class="ruby-identifier">:route</span>]
362
- 532: <span class="ruby-identifier">result_nargs</span> = <span class="ruby-identifier">data</span>[<span class="ruby-identifier">:nargs</span>]
363
- 533: <span class="ruby-keyword kw">end</span>
364
- 534: <span class="ruby-keyword kw">end</span>
365
- 535:
366
- 536: <span class="ruby-keyword kw">return</span> [<span class="ruby-value">404</span>, {<span class="ruby-value str">'Content-Type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/plain'</span>}, <span class="ruby-node">&quot;Not Found: #{@request.path}&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result_route</span>.<span class="ruby-identifier">nil?</span>
367
- 537:
368
- 538: <span class="ruby-identifier">result_args</span> = <span class="ruby-identifier">result_args</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">max_match_size</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">result_nargs</span>)
369
- 539:
370
- 540: <span class="ruby-identifier">filter_output</span> = <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Filter</span>.<span class="ruby-identifier">execute</span>( <span class="ruby-keyword kw">self</span> )
371
- 541:
372
- 542: <span class="ruby-keyword kw">if</span>( <span class="ruby-identifier">filter_output</span>.<span class="ruby-identifier">nil?</span> )
373
- 543: <span class="ruby-comment cmt"># case @env[&quot;REQUEST_METHOD&quot;]</span>
374
- 544: <span class="ruby-comment cmt"># when &quot;GET&quot; </span>
375
- 545: <span class="ruby-comment cmt"># get( *args )</span>
376
- 546: <span class="ruby-comment cmt"># when &quot;POST&quot;</span>
377
- 547: <span class="ruby-comment cmt"># _method = params.delete( &quot;_method&quot; ) { |_| &quot;post&quot; }</span>
378
- 548: <span class="ruby-comment cmt"># send( _method.downcase.to_sym, *args )</span>
379
- 549: <span class="ruby-comment cmt"># else</span>
380
- 550: <span class="ruby-comment cmt"># _method = @env[&quot;REQUEST_METHOD&quot;]</span>
381
- 551: <span class="ruby-comment cmt"># send( _method.downcase.to_sym, *args )</span>
382
- 552: <span class="ruby-comment cmt"># end</span>
383
- 553: <span class="ruby-keyword kw">begin</span>
384
- 554: <span class="ruby-identifier">_method</span> = <span class="ruby-identifier">params</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-value str">&quot;_method&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">_</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@env</span>[<span class="ruby-value str">&quot;REQUEST_METHOD&quot;</span>] }
385
- 555: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">method_defined?</span>( <span class="ruby-identifier">_method</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span> )
386
- 556: <span class="ruby-comment cmt"># send( _method.downcase.to_sym, *args )</span>
387
- 557: <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">result_args</span> )
388
- 558: <span class="ruby-keyword kw">else</span>
389
- 559: <span class="ruby-comment cmt"># any( *args )</span>
390
- 560: <span class="ruby-identifier">any</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">result_args</span> )
391
- 561: <span class="ruby-keyword kw">end</span>
392
- 562: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
393
- 563: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">class</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>
394
- 564: <span class="ruby-keyword kw">end</span>
395
- 565: <span class="ruby-keyword kw">else</span>
396
- 566: <span class="ruby-identifier">filter_output</span>
397
- 567: <span class="ruby-keyword kw">end</span>
398
- 568: }
399
- 569:
400
- 570: <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>)
401
- 571: <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>
402
- 572: <span class="ruby-comment cmt">#r[1].each do |k,v|</span>
403
- 573: <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>
404
- 574: <span class="ruby-ivar">@response</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
405
- 575: <span class="ruby-keyword kw">end</span>
406
- 576: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">shift</span> <span class="ruby-comment cmt">#r[2]</span>
407
- 577: <span class="ruby-keyword kw">else</span>
408
- 578: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">r</span>
409
- 579: <span class="ruby-keyword kw">end</span>
410
- 580:
411
- 581: <span class="ruby-ivar">@response</span>.<span class="ruby-identifier">finish</span>
412
- 582: <span class="ruby-keyword kw">end</span>
413
- 583:
414
- 584: <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span>
415
- 585: <span class="ruby-identifier">include</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>
416
- 586: }
417
- 587: <span class="ruby-keyword kw">end</span>
418
- </pre>
419
- </div>
420
- </div>
421
- </div>
422
-
423
- <div id="method-M000010" class="method-detail">
424
- <a name="M000010"></a>
425
-
426
- <div class="method-heading">
427
- <a href="#M000010" class="method-signature">
428
- <span class="method-name">application</span><span class="method-args">( args = {} ) {|self| ...}</span>
429
- </a>
430
- </div>
431
-
432
- <div class="method-description">
433
- <p>
434
- Return the Rack App.
435
- </p>
436
- <p>
437
- Options : see <a
438
- href="Capcode/Configuration.html#M000028">Capcode::Configuration.set</a>
439
- </p>
440
- <p>
441
- Options <a href="Capcode.html#M000013">set</a> here replace the ones <a
442
- href="Capcode.html#M000013">set</a> globally
443
- </p>
444
- <p><a class="source-toggle" href="#"
445
- onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
446
- <div class="method-source-code" id="M000010-source">
447
- <pre>
448
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 656</span>
449
- 656: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application</span>( <span class="ruby-identifier">args</span> = {} )
450
- 657: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">configuration</span>(<span class="ruby-identifier">args</span>)
451
- 658: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">print_debug</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
452
- 659:
453
- 660: <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">constants</span>.<span class="ruby-identifier">clone</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
454
- 661: <span class="ruby-keyword kw">not</span>( <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">const_get</span>(<span class="ruby-identifier">k</span>).<span class="ruby-identifier">to_s</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/Capcode/</span> ) <span class="ruby-keyword kw">or</span> [
455
- 662: <span class="ruby-value str">&quot;Filter&quot;</span>,
456
- 663: <span class="ruby-value str">&quot;Helpers&quot;</span>,
457
- 664: <span class="ruby-value str">&quot;RouteError&quot;</span>,
458
- 665: <span class="ruby-value str">&quot;Views&quot;</span>,
459
- 666: <span class="ruby-value str">&quot;ParameterError&quot;</span>,
460
- 667: <span class="ruby-value str">&quot;HTTPError&quot;</span>,
461
- 668: <span class="ruby-value str">&quot;StaticFiles&quot;</span>,
462
- 669: <span class="ruby-value str">&quot;Configuration&quot;</span>,
463
- 670: <span class="ruby-value str">&quot;MissingLibrary&quot;</span>,
464
- 671: <span class="ruby-value str">&quot;Route&quot;</span>,
465
- 672: <span class="ruby-value str">&quot;RenderError&quot;</span>
466
- 673: ].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">k</span>)
467
- 674: }.<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>
468
- 675: <span class="ruby-keyword kw">begin</span>
469
- 676: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;Capcode::#{k}.public_methods(true).include?( '__urls__' )&quot;</span>
470
- 677: <span class="ruby-identifier">hash_of_routes</span>, <span class="ruby-identifier">max_captures_for_routes</span>, <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;Capcode::#{k}.__urls__&quot;</span>
471
- 678: <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>
472
- 679: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">RouteError</span>, <span class="ruby-node">&quot;Route `#{current_route_path}' already define !&quot;</span>, <span class="ruby-identifier">caller</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">current_route_path</span>)
473
- 680: <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>
474
- 681: <span class="ruby-keyword kw">end</span>
475
- 682: <span class="ruby-keyword kw">end</span>
476
- 683: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
477
- 684: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
478
- 685: <span class="ruby-keyword kw">end</span>
479
- 686: <span class="ruby-keyword kw">end</span>
480
- 687:
481
- 688: <span class="ruby-comment cmt"># Set Static directory</span>
482
- 689: <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">static</span> = (<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:static</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">chr</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;/&quot;</span>)<span class="ruby-operator">?</span><span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:static</span>)<span class="ruby-operator">:</span><span class="ruby-value str">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:static</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:static</span>).<span class="ruby-identifier">nil?</span>
483
- 690:
484
- 691: <span class="ruby-comment cmt"># Initialize Rack App</span>
485
- 692: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;** Map routes.&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
486
- 693: <span class="ruby-comment cmt"># app = Rack::URLMap.new(Capcode.routes)</span>
487
- 694: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Ext</span><span class="ruby-operator">::</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>)
488
- 695: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Initialize static directory (#{Capcode.static}) in #{File.expand_path(Capcode::Configuration.get(:root))}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
489
- 696: <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>(
490
- 697: <span class="ruby-identifier">app</span>,
491
- 698: <span class="ruby-comment cmt">#:urls =&gt; [@@__STATIC_DIR], </span>
492
- 699: <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">static</span>],
493
- 700: <span class="ruby-identifier">:root</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:root</span>))
494
- 701: ) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:static</span>).<span class="ruby-identifier">nil?</span>
495
- 702: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;** Initialize session&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
496
- 703: <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-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:session</span>) )
497
- 704: <span class="ruby-identifier">app</span> = <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">StaticFiles</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">app</span>)
498
- 705: <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>)
499
- 706: <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>)
500
- 707: <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>)
501
- 708: <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>)
502
- 709: <span class="ruby-comment cmt">#app = Rack::Reloader.new(app) ## -- NE RELOAD QUE capcode.rb -- So !!!</span>
503
- 710: <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-ivar">@cclogger</span> = <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:log</span>)) )
504
- 711:
505
- 712: <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>
506
- 713: <span class="ruby-identifier">middleware</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span> = <span class="ruby-identifier">mw</span>
507
- 714: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Load middleware #{middleware}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
508
- 715: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block</span>
509
- 716: <span class="ruby-identifier">app</span> = <span class="ruby-identifier">middleware</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
510
- 717: <span class="ruby-keyword kw">else</span>
511
- 718: <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> )
512
- 719: <span class="ruby-keyword kw">end</span>
513
- 720: <span class="ruby-keyword kw">end</span>
514
- 721:
515
- 722: <span class="ruby-comment cmt"># Start database</span>
516
- 723: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">include?</span> <span class="ruby-value str">&quot;db_connect&quot;</span>
517
- 724: <span class="ruby-identifier">db_connect</span>( <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:db_config</span>), <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:log</span>) )
518
- 725: <span class="ruby-keyword kw">end</span>
519
- 726:
520
- 727: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
521
- 728: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;** Execute block&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
522
- 729: <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> )
523
- 730: <span class="ruby-keyword kw">end</span>
524
- 731:
525
- 732: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">app</span>
526
- 733: <span class="ruby-keyword kw">end</span>
527
- </pre>
528
- </div>
529
- </div>
530
- </div>
531
-
532
- <div id="method-M000014" class="method-detail">
533
- <a name="M000014"></a>
534
-
535
- <div class="method-heading">
536
- <a href="#M000014" class="method-signature">
537
- <span class="method-name">before_filter</span><span class="method-args">( action, opts = {} )</span>
538
- </a>
539
- </div>
540
-
541
- <div class="method-description">
542
- <p>
543
- Add a before filter :
544
- </p>
545
- <pre>
546
- module Capcode
547
- before_filter :my_global_action
548
- before_filter :need_login, :except =&gt; [:Login]
549
- before_filter :check_mail, :only =&gt; [:MailBox]
550
- # ...
551
- end
552
- </pre>
553
- <p>
554
- If the action return nil, the normal get or post will be executed, else no.
555
- </p>
556
- <p><a class="source-toggle" href="#"
557
- onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
558
- <div class="method-source-code" id="M000014-source">
559
- <pre>
560
- <span class="ruby-comment cmt"># File lib/capcode/filters.rb, line 14</span>
561
- 14: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">before_filter</span>( <span class="ruby-identifier">action</span>, <span class="ruby-identifier">opts</span> = {} )
562
- 15: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Filter</span>.<span class="ruby-identifier">filters</span>[<span class="ruby-identifier">action</span>] = { }
563
- 16: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Filter</span>.<span class="ruby-identifier">ordered_actions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">action</span>
564
- 17:
565
- 18: <span class="ruby-identifier">opts</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>
566
- 19: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Filter</span>.<span class="ruby-identifier">filters</span>[<span class="ruby-identifier">action</span>][<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
567
- 20: <span class="ruby-keyword kw">end</span>
568
- 21: <span class="ruby-keyword kw">end</span>
569
- </pre>
570
- </div>
571
- </div>
572
- </div>
573
-
574
- <div id="method-M000003" class="method-detail">
575
- <a name="M000003"></a>
576
-
577
- <div class="method-heading">
578
- <a href="#M000003" class="method-signature">
579
- <span class="method-name">env</span><span class="method-args">()</span>
580
- </a>
581
- </div>
582
-
583
- <div class="method-description">
584
- <p>
585
- Hash containing all the environment variables
586
- </p>
587
- <p><a class="source-toggle" href="#"
588
- onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
589
- <div class="method-source-code" id="M000003-source">
590
- <pre>
591
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 455</span>
592
- 455: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">env</span>
593
- 456: <span class="ruby-ivar">@env</span>
594
- 457: <span class="ruby-keyword kw">end</span>
595
- </pre>
596
- </div>
597
- </div>
598
- </div>
599
-
600
- <div id="method-M000009" class="method-detail">
601
- <a name="M000009"></a>
602
-
603
- <div class="method-heading">
604
- <a href="#M000009" class="method-signature">
605
- <span class="method-name">http_authentication</span><span class="method-args">( opts = {}, &amp;b )</span>
606
- </a>
607
- </div>
608
-
609
- <div class="method-description">
610
- <p>
611
- Allow you to add and HTTP Authentication (Basic or Digest) to controllers
612
- for or specific route
613
- </p>
614
- <p>
615
- Options :
616
- </p>
617
- <ul>
618
- <li><tt>:type</tt> : Authentication type (<tt>:basic</tt> or <tt>:digest</tt>)
619
- - default : <tt>:basic</tt>
620
-
621
- </li>
622
- <li><tt>:realm</tt> : realm ;) - default : &quot;Capcode.app&quot;
623
-
624
- </li>
625
- <li><tt>:opaque</tt> : Your secret passphrase. You MUST <a
626
- href="Capcode.html#M000013">set</a> it if you <a
627
- href="Capcode.html#M000008">use</a> Digest Auth - default :
628
- &quot;opaque&quot;
629
-
630
- </li>
631
- <li><tt>:routes</tt> : Routes - default : &quot;/&quot;
632
-
633
- </li>
634
- </ul>
635
- <p>
636
- The block must return a Hash of username =&gt; password like that :
637
- </p>
638
- <pre>
639
- {
640
- &quot;user1&quot; =&gt; &quot;pass1&quot;,
641
- &quot;user2&quot; =&gt; &quot;pass2&quot;,
642
- # ...
643
- }
644
- </pre>
645
- <p><a class="source-toggle" href="#"
646
- onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
647
- <div class="method-source-code" id="M000009-source">
648
- <pre>
649
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 630</span>
650
- 630: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">http_authentication</span>( <span class="ruby-identifier">opts</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> )
651
- 631: <span class="ruby-identifier">options</span> = {
652
- 632: <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:basic</span>,
653
- 633: <span class="ruby-identifier">:realm</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;Capcode.app&quot;</span>,
654
- 634: <span class="ruby-identifier">:opaque</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;opaque&quot;</span>,
655
- 635: <span class="ruby-identifier">:routes</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;/&quot;</span>
656
- 636: }.<span class="ruby-identifier">merge</span>( <span class="ruby-identifier">opts</span> )
657
- 637:
658
- 638: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:autz</span>] = <span class="ruby-identifier">b</span>.<span class="ruby-identifier">call</span>()
659
- 639:
660
- 640: <span class="ruby-ivar">@__auth__</span> <span class="ruby-operator">||=</span> {}
661
- 641:
662
- 642: <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>
663
- 643: <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>
664
- 644: <span class="ruby-ivar">@__auth__</span>[<span class="ruby-identifier">r</span>] = <span class="ruby-identifier">options</span>
665
- 645: <span class="ruby-keyword kw">end</span>
666
- 646: <span class="ruby-keyword kw">else</span>
667
- 647: <span class="ruby-ivar">@__auth__</span>[<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:routes</span>]] = <span class="ruby-identifier">options</span>
668
- 648: <span class="ruby-keyword kw">end</span>
669
- 649: <span class="ruby-keyword kw">end</span>
670
- </pre>
671
- </div>
672
- </div>
673
- </div>
674
-
675
- <div id="method-M000012" class="method-detail">
676
- <a name="M000012"></a>
677
-
678
- <div class="method-heading">
679
- <a href="#M000012" class="method-signature">
680
- <span class="method-name">logger</span><span class="method-args">()</span>
681
- </a>
682
- </div>
683
-
684
- <div class="method-description">
685
- <p><a class="source-toggle" href="#"
686
- onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
687
- <div class="method-source-code" id="M000012-source">
688
- <pre>
689
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 884</span>
690
- 884: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">logger</span>
691
- 885: <span class="ruby-ivar">@cclogger</span>
692
- 886: <span class="ruby-keyword kw">end</span>
693
- </pre>
694
- </div>
695
- </div>
696
- </div>
697
-
698
- <div id="method-M000007" class="method-detail">
699
- <a name="M000007"></a>
700
-
701
- <div class="method-heading">
702
- <a href="#M000007" class="method-signature">
703
- <span class="method-name">map</span><span class="method-args">( route ) {|| ...}</span>
704
- </a>
705
- </div>
706
-
707
- <div class="method-description">
708
- <p>
709
- This method help you to <a href="Capcode.html#M000007">map</a> and URL to a
710
- Rack or What you want Helper
711
- </p>
712
- <pre>
713
- Capcode.map( &quot;/file&quot; ) do
714
- Rack::File.new( &quot;.&quot; )
715
- end
716
- </pre>
717
- <p><a class="source-toggle" href="#"
718
- onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
719
- <div class="method-source-code" id="M000007-source">
720
- <pre>
721
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 595</span>
722
- 595: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">map</span>( <span class="ruby-identifier">route</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> )
723
- 596: <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>
724
- 597: <span class="ruby-keyword kw">end</span>
725
- </pre>
726
- </div>
727
- </div>
728
- </div>
729
-
730
- <div id="method-M000002" class="method-detail">
731
- <a name="M000002"></a>
732
-
733
- <div class="method-heading">
734
- <a href="#M000002" class="method-signature">
735
- <span class="method-name">params</span><span class="method-args">()</span>
736
- </a>
737
- </div>
738
-
739
- <div class="method-description">
740
- <p>
741
- Hash containing all the <a href="Capcode.html#M000005">request</a>
742
- parameters (GET or POST)
743
- </p>
744
- <p><a class="source-toggle" href="#"
745
- onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
746
- <div class="method-source-code" id="M000002-source">
747
- <pre>
748
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 450</span>
749
- 450: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
750
- 451: <span class="ruby-ivar">@request</span>.<span class="ruby-identifier">params</span>
751
- 452: <span class="ruby-keyword kw">end</span>
752
- </pre>
753
- </div>
754
- </div>
755
- </div>
756
-
757
- <div id="method-M000005" class="method-detail">
758
- <a name="M000005"></a>
759
-
760
- <div class="method-heading">
761
- <a href="#M000005" class="method-signature">
762
- <span class="method-name">request</span><span class="method-args">()</span>
763
- </a>
764
- </div>
765
-
766
- <div class="method-description">
767
- <p>
768
- Return the Rack::Request object
769
- </p>
770
- <p><a class="source-toggle" href="#"
771
- onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
772
- <div class="method-source-code" id="M000005-source">
773
- <pre>
774
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 465</span>
775
- 465: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">request</span>
776
- 466: <span class="ruby-ivar">@request</span>
777
- 467: <span class="ruby-keyword kw">end</span>
778
- </pre>
779
- </div>
780
- </div>
781
- </div>
782
-
783
- <div id="method-M000006" class="method-detail">
784
- <a name="M000006"></a>
785
-
786
- <div class="method-heading">
787
- <a href="#M000006" class="method-signature">
788
- <span class="method-name">response</span><span class="method-args">()</span>
789
- </a>
790
- </div>
791
-
792
- <div class="method-description">
793
- <p>
794
- Return the Rack::Response object
795
- </p>
796
- <p><a class="source-toggle" href="#"
797
- onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
798
- <div class="method-source-code" id="M000006-source">
799
- <pre>
800
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 470</span>
801
- 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">response</span>
802
- 471: <span class="ruby-ivar">@response</span>
803
- 472: <span class="ruby-keyword kw">end</span>
804
- </pre>
805
- </div>
806
- </div>
807
- </div>
808
-
809
- <div id="method-M000011" class="method-detail">
810
- <a name="M000011"></a>
811
-
812
- <div class="method-heading">
813
- <a href="#M000011" class="method-signature">
814
- <span class="method-name">run</span><span class="method-args">( args = {} ) {|self| ...}</span>
815
- </a>
816
- </div>
817
-
818
- <div class="method-description">
819
- <p>
820
- Start your <a href="Capcode.html#M000010">application</a>.
821
- </p>
822
- <p>
823
- Options : see <a
824
- href="Capcode/Configuration.html#M000028">Capcode::Configuration.set</a>
825
- </p>
826
- <p>
827
- Options <a href="Capcode.html#M000013">set</a> here replace the ones <a
828
- href="Capcode.html#M000013">set</a> globally
829
- </p>
830
- <p><a class="source-toggle" href="#"
831
- onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
832
- <div class="method-source-code" id="M000011-source">
833
- <pre>
834
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 740</span>
835
- 740: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>( <span class="ruby-identifier">args</span> = {} )
836
- 741: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">configuration</span>(<span class="ruby-identifier">args</span>)
837
- 742:
838
- 743: <span class="ruby-comment cmt"># Parse options</span>
839
- 744: <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>
840
- 745: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-node">&quot;Usage: #{File.basename($0)} [options]&quot;</span>
841
- 746: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
842
- 747: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Specific options:&quot;</span>
843
- 748:
844
- 749: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-C&quot;</span>, <span class="ruby-value str">&quot;--console&quot;</span>, <span class="ruby-value str">&quot;Run in console mode with IRB (default: false)&quot;</span> ) {
845
- 750: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:console</span>, <span class="ruby-keyword kw">true</span>
846
- 751: }
847
- 752: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-h&quot;</span>, <span class="ruby-value str">&quot;--host HOSTNAME&quot;</span>, <span class="ruby-node">&quot;Host for web server to bind to (default: #{Capcode::Configuration.get(:host)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
848
- 753: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:host</span>, <span class="ruby-identifier">h</span>
849
- 754: }
850
- 755: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-p&quot;</span>, <span class="ruby-value str">&quot;--port NUM&quot;</span>, <span class="ruby-node">&quot;Port for web server (default: #{Capcode::Configuration.get(:port)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
851
- 756: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:port</span>, <span class="ruby-identifier">p</span>
852
- 757: }
853
- 758: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-d&quot;</span>, <span class="ruby-value str">&quot;--daemonize [true|false]&quot;</span>, <span class="ruby-node">&quot;Daemonize (default: #{Capcode::Configuration.get(:daemonize)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
854
- 759: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:daemonize</span>, <span class="ruby-identifier">d</span>
855
- 760: }
856
- 761: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-r&quot;</span>, <span class="ruby-value str">&quot;--root PATH&quot;</span>, <span class="ruby-node">&quot;Working directory (default: #{Capcode::Configuration.get(:root)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">w</span><span class="ruby-operator">|</span>
857
- 762: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:root</span>, <span class="ruby-identifier">w</span>
858
- 763: }
859
- 764: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-s&quot;</span>, <span class="ruby-value str">&quot;--static PATH&quot;</span>, <span class="ruby-node">&quot;Static directory -- relative to the root directory (default: #{Capcode::Configuration.get(:static)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
860
- 765: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:static</span>, <span class="ruby-identifier">r</span>
861
- 766: }
862
- 767: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>( <span class="ruby-value str">&quot;-S&quot;</span>, <span class="ruby-value str">&quot;--server SERVER&quot;</span>, <span class="ruby-node">&quot;Server to use (default: #{Capcode::Configuration.get(:server)})&quot;</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
863
- 768: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:server</span>, <span class="ruby-identifier">r</span>
864
- 769: }
865
- 770:
866
- 771: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
867
- 772: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Common options:&quot;</span>
868
- 773:
869
- 774: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-?&quot;</span>, <span class="ruby-value str">&quot;--help&quot;</span>, <span class="ruby-value str">&quot;Show this message&quot;</span>) <span class="ruby-keyword kw">do</span>
870
- 775: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">opts</span>
871
- 776: <span class="ruby-identifier">exit</span>
872
- 777: <span class="ruby-keyword kw">end</span>
873
- 778: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;-v&quot;</span>, <span class="ruby-value str">&quot;--version&quot;</span>, <span class="ruby-value str">&quot;Show versions&quot;</span>) <span class="ruby-keyword kw">do</span>
874
- 779: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Capcode version #{Capcode::CAPCOD_VERION} (ruby v#{RUBY_VERSION})&quot;</span>
875
- 780: <span class="ruby-identifier">exit</span>
876
- 781: <span class="ruby-keyword kw">end</span>
877
- 782: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on_tail</span>( <span class="ruby-value str">&quot;-V&quot;</span>, <span class="ruby-value str">&quot;--verbose&quot;</span>, <span class="ruby-value str">&quot;Run in verbose mode&quot;</span> ) <span class="ruby-keyword kw">do</span>
878
- 783: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:verbose</span>, <span class="ruby-keyword kw">true</span>
879
- 784: <span class="ruby-keyword kw">end</span>
880
- 785: <span class="ruby-keyword kw">end</span>
881
- 786:
882
- 787: <span class="ruby-keyword kw">begin</span>
883
- 788: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">parse!</span> <span class="ruby-constant">ARGV</span>
884
- 789: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">OptionParser</span><span class="ruby-operator">::</span><span class="ruby-constant">ParseError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ex</span>
885
- 790: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! #{ex.message}&quot;</span>
886
- 791: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** use `#{File.basename($0)} --help` for more details...&quot;</span>
887
- 792: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
888
- 793: <span class="ruby-keyword kw">end</span>
889
- 794:
890
- 795: <span class="ruby-comment cmt"># Run in the Working directory</span>
891
- 796: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Go on root directory (#{File.expand_path(Capcode::Configuration.get(:root))})&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:verbose</span>)
892
- 797: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>( <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:root</span>) ) <span class="ruby-keyword kw">do</span>
893
- 798:
894
- 799: <span class="ruby-comment cmt"># Check that mongrel exists </span>
895
- 800: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:server</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:server</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;mongrel&quot;</span>
896
- 801: <span class="ruby-keyword kw">begin</span>
897
- 802: <span class="ruby-identifier">require</span> <span class="ruby-value str">'mongrel'</span>
898
- 803: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:server</span>, <span class="ruby-identifier">:mongrel</span>
899
- 804: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">LoadError</span>
900
- 805: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;!! could not load mongrel. Falling back to webrick.&quot;</span>
901
- 806: <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span> <span class="ruby-identifier">:server</span>, <span class="ruby-identifier">:webrick</span>
902
- 807: <span class="ruby-keyword kw">end</span>
903
- 808: <span class="ruby-keyword kw">end</span>
904
- 809:
905
- 810: <span class="ruby-comment cmt"># From rackup !!!</span>
906
- 811: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:daemonize</span>)
907
- 812: <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>
908
- 813: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value str">&quot;1.9&quot;</span>
909
- 814: <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
910
- 815: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span>
911
- 816: <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
912
- 817: <span class="ruby-comment cmt"># Dir.chdir &quot;/&quot;</span>
913
- 818: <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span> <span class="ruby-value">0000</span>
914
- 819: <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>
915
- 820: <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>, <span class="ruby-value str">&quot;a&quot;</span>
916
- 821: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">reopen</span> <span class="ruby-value str">&quot;/dev/null&quot;</span>, <span class="ruby-value str">&quot;a&quot;</span>
917
- 822: <span class="ruby-keyword kw">else</span>
918
- 823: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">daemon</span>
919
- 824: <span class="ruby-keyword kw">end</span>
920
- 825: <span class="ruby-keyword kw">else</span>
921
- 826: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;!! daemonize option unavailable on #{RUBY_PLATFORM} platform.&quot;</span>
922
- 827: <span class="ruby-keyword kw">end</span>
923
- 828:
924
- 829: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:pid</span>), <span class="ruby-value str">'w'</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;#{Process.pid}&quot;</span>) }
925
- 830: <span class="ruby-identifier">at_exit</span> { <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</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-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:pid</span>)) }
926
- 831: <span class="ruby-keyword kw">end</span>
927
- 832:
928
- 833: <span class="ruby-identifier">app</span> = <span class="ruby-keyword kw">nil</span>
929
- 834: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
930
- 835: <span class="ruby-identifier">app</span> = <span class="ruby-identifier">application</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>) { <span class="ruby-keyword kw">yield</span>( <span class="ruby-keyword kw">self</span> ) }
931
- 836: <span class="ruby-keyword kw">else</span>
932
- 837: <span class="ruby-identifier">app</span> = <span class="ruby-identifier">application</span>(<span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>)
933
- 838: <span class="ruby-keyword kw">end</span>
934
- 839:
935
- 840: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:console</span>)
936
- 841: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Run console...&quot;</span>
937
- 842: <span class="ruby-constant">IRB</span>.<span class="ruby-identifier">start</span>
938
- 843: <span class="ruby-identifier">exit</span>
939
- 844: <span class="ruby-keyword kw">end</span>
940
- 845:
941
- 846: <span class="ruby-comment cmt"># Start server</span>
942
- 847: <span class="ruby-keyword kw">case</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:server</span>).<span class="ruby-identifier">to_s</span>
943
- 848: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;mongrel&quot;</span>
944
- 849: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Mongrel on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
945
- 850: <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">Mongrel</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:port</span>), <span class="ruby-identifier">:Host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:host</span>)} ) { <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
946
- 851: <span class="ruby-identifier">trap</span> <span class="ruby-value str">&quot;SIGINT&quot;</span>, <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">server</span>.<span class="ruby-identifier">stop</span> }
947
- 852: }
948
- 853: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;webrick&quot;</span>
949
- 854: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting WEBrick on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
950
- 855: <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Handler</span><span class="ruby-operator">::</span><span class="ruby-constant">WEBrick</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:port</span>), <span class="ruby-identifier">:BindAddress</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:host</span>)} ) { <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
951
- 856: <span class="ruby-identifier">trap</span> <span class="ruby-value str">&quot;SIGINT&quot;</span>, <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">server</span>.<span class="ruby-identifier">shutdown</span> }
952
- 857: }
953
- 858: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;thin&quot;</span>
954
- 859: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Thin on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
955
- 860: <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">Thin</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:Port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:port</span>), <span class="ruby-identifier">:Host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:host</span>)} ) { <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
956
- 861: <span class="ruby-identifier">trap</span> <span class="ruby-value str">&quot;SIGINT&quot;</span>, <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">server</span>.<span class="ruby-identifier">stop</span> }
957
- 862: }
958
- 863: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;unicorn&quot;</span>
959
- 864: <span class="ruby-identifier">require</span> <span class="ruby-value str">'unicorn/launcher'</span>
960
- 865: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Unicorn on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
961
- 866: <span class="ruby-constant">Unicorn</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:listeners</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-node">&quot;#{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>]} )
962
- 867: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;rainbows&quot;</span>
963
- 868: <span class="ruby-identifier">require</span> <span class="ruby-value str">'unicorn/launcher'</span>
964
- 869: <span class="ruby-identifier">require</span> <span class="ruby-value str">'rainbows'</span>
965
- 870: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting Rainbow on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
966
- 871: <span class="ruby-constant">Rainbows</span>.<span class="ruby-identifier">run</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:listeners</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-node">&quot;#{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>]} )
967
- 872: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;control_tower&quot;</span>
968
- 873: <span class="ruby-identifier">require</span> <span class="ruby-value str">'control_tower'</span>
969
- 874: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;** Starting ControlTower on #{Capcode::Configuration.get(:host)}:#{Capcode::Configuration.get(:port)}&quot;</span>
970
- 875: <span class="ruby-constant">ControlTower</span><span class="ruby-operator">::</span><span class="ruby-constant">Server</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">app</span>, {<span class="ruby-identifier">:host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:host</span>), <span class="ruby-identifier">:port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Capcode</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:port</span>)} ).<span class="ruby-identifier">start</span>
971
- 876: <span class="ruby-keyword kw">end</span>
972
- 877: <span class="ruby-keyword kw">end</span>
973
- 878: <span class="ruby-keyword kw">end</span>
974
- </pre>
975
- </div>
976
- </div>
977
- </div>
978
-
979
- <div id="method-M000004" class="method-detail">
980
- <a name="M000004"></a>
981
-
982
- <div class="method-heading">
983
- <a href="#M000004" class="method-signature">
984
- <span class="method-name">session</span><span class="method-args">()</span>
985
- </a>
986
- </div>
987
-
988
- <div class="method-description">
989
- <p>
990
- Session hash
991
- </p>
992
- <p><a class="source-toggle" href="#"
993
- onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
994
- <div class="method-source-code" id="M000004-source">
995
- <pre>
996
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 460</span>
997
- 460: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">session</span>
998
- 461: <span class="ruby-ivar">@env</span>[<span class="ruby-value str">'rack.session'</span>]
999
- 462: <span class="ruby-keyword kw">end</span>
1000
- </pre>
1001
- </div>
1002
- </div>
1003
- </div>
1004
-
1005
- <div id="method-M000013" class="method-detail">
1006
- <a name="M000013"></a>
1007
-
1008
- <div class="method-heading">
1009
- <a href="#M000013" class="method-signature">
1010
- <span class="method-name">set</span><span class="method-args">(key, value, opts = {})</span>
1011
- </a>
1012
- </div>
1013
-
1014
- <div class="method-description">
1015
- <p><a class="source-toggle" href="#"
1016
- onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
1017
- <div class="method-source-code" id="M000013-source">
1018
- <pre>
1019
- <span class="ruby-comment cmt"># File lib/capcode/configuration.rb, line 3</span>
1020
- 3: <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>, <span class="ruby-identifier">opts</span> = {}); <span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">opts</span>); <span class="ruby-keyword kw">end</span>
1021
- </pre>
1022
- </div>
1023
- </div>
1024
- </div>
1025
-
1026
- <div id="method-M000008" class="method-detail">
1027
- <a name="M000008"></a>
1028
-
1029
- <div class="method-heading">
1030
- <a href="#M000008" class="method-signature">
1031
- <span class="method-name">use</span><span class="method-args">(middleware, *args, &amp;block)</span>
1032
- </a>
1033
- </div>
1034
-
1035
- <div class="method-description">
1036
- <p>
1037
- This method allow you to <a href="Capcode.html#M000008">use</a> a Rack
1038
- middleware
1039
- </p>
1040
- <p>
1041
- Example :
1042
- </p>
1043
- <pre>
1044
- module Capcode
1045
- ...
1046
- use Rack::Codehighlighter, :coderay, :element =&gt; &quot;pre&quot;,
1047
- :pattern =&gt; /\A:::(\w+)\s*\n/, :logging =&gt; false
1048
- ...
1049
- end
1050
- </pre>
1051
- <p><a class="source-toggle" href="#"
1052
- onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
1053
- <div class="method-source-code" id="M000008-source">
1054
- <pre>
1055
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 609</span>
1056
- 609: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">use</span>(<span class="ruby-identifier">middleware</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
1057
- 610: <span class="ruby-identifier">middlewares</span> <span class="ruby-operator">&lt;&lt;</span> [<span class="ruby-identifier">middleware</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>]
1058
- 611: <span class="ruby-keyword kw">end</span>
1059
- </pre>
1060
- </div>
1061
- </div>
1062
- </div>
1063
-
1064
-
1065
- </div>
1066
-
1067
-
1068
- </div>
1069
-
1070
-
1071
- <div id="validator-badges">
1072
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1073
- </div>
1074
-
1075
- </body>
1076
- </html>