narf 0.5.1 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/ChangeLog +44 -0
  2. data/README +6 -2
  3. data/README~ +124 -0
  4. data/build.rb +3 -2
  5. data/build.rb~ +1 -1
  6. data/doc/apache_cgi.txt +1 -5
  7. data/doc/apache_cgi.txt~ +17 -0
  8. data/doc/fastcgi.txt +1 -1
  9. data/doc/fastcgi.txt~ +19 -0
  10. data/doc/rdoc/classes/Web.html +9 -6
  11. data/doc/rdoc/classes/Web.src/M000002.html +1 -1
  12. data/doc/rdoc/classes/Web.src/M000003.html +1 -1
  13. data/doc/rdoc/classes/Web.src/M000004.html +1 -1
  14. data/doc/rdoc/classes/Web.src/M000005.html +1 -1
  15. data/doc/rdoc/classes/Web.src/M000006.html +1 -1
  16. data/doc/rdoc/classes/Web.src/M000007.html +1 -1
  17. data/doc/rdoc/classes/Web.src/M000008.html +1 -1
  18. data/doc/rdoc/classes/Web.src/M000009.html +1 -1
  19. data/doc/rdoc/classes/Web/CGD.src/M000038.html +2 -1
  20. data/doc/rdoc/classes/Web/CGD.src/M000039.html +1 -1
  21. data/doc/rdoc/classes/Web/CGD.src/M000040.html +1 -1
  22. data/doc/rdoc/classes/Web/CGD.src/M000041.html +1 -1
  23. data/doc/rdoc/classes/Web/CGI.src/M000105.html +1 -1
  24. data/doc/rdoc/classes/Web/CGI.src/M000106.html +1 -1
  25. data/doc/rdoc/classes/Web/CGI.src/M000107.html +1 -1
  26. data/doc/rdoc/classes/Web/Narflates.html +4 -2
  27. data/doc/rdoc/classes/Web/Testing.src/M000027.html +1 -4
  28. data/doc/rdoc/classes/Web/Testing.src/M000028.html +1 -2
  29. data/doc/rdoc/classes/Web/Testing.src/M000029.html +1 -1
  30. data/doc/rdoc/classes/Web/Testing.src/M000030.html +1 -1
  31. data/doc/rdoc/classes/Web/Testing.src/M000031.html +1 -1
  32. data/doc/rdoc/classes/Web/Testing.src/M000032.html +1 -1
  33. data/doc/rdoc/classes/Web/Testing.src/M000033.html +1 -1
  34. data/doc/rdoc/classes/Web/Testing.src/M000034.html +1 -1
  35. data/doc/rdoc/classes/Web/Testing.src/M000035.html +1 -1
  36. data/doc/rdoc/classes/Web/Testing.src/M000036.html +1 -1
  37. data/doc/rdoc/created.rid +1 -1
  38. data/doc/rdoc/files/README.html +7 -3
  39. data/doc/rdoc/files/doc/apache_cgi_txt.html +3 -9
  40. data/doc/rdoc/files/doc/fastcgi_txt.html +2 -2
  41. data/doc/rdoc/files/lib/web/cgi_rb.html +1 -1
  42. data/doc/rdoc/files/lib/web/parser_rb.html +1 -1
  43. data/doc/rdoc/files/lib/web/template_rb.html +1 -1
  44. data/doc/rdoc/files/lib/web/testing_rb.html +1 -1
  45. data/doc/rdoc/files/lib/web/wiki_rb.html +1 -1
  46. data/doc/rdoc/files/lib/web_rb.html +1 -1
  47. data/lib/web.rb +127 -20
  48. data/lib/web/parser.rb +25 -7
  49. data/lib/web/parser.rb~ +30 -8
  50. data/lib/web/template.rb +6 -4
  51. data/lib/web/wiki.rb +23 -12
  52. data/lib/web/wiki.rb~ +1 -1
  53. data/narf-0.5.1.gem +0 -0
  54. data/narf.gemspec +1 -1
  55. data/narf.gemspec~ +18 -30
  56. data/test/test.request.rb +33 -20
  57. data/test/test.request.rb~ +10 -0
  58. data/test/testfiles/mac_ie_env.yaml +32 -0
  59. data/test/testfiles/mac_ie_stdin.bin +0 -0
  60. data/test/testfiles/mac_safari_stdin.bin +0 -0
  61. data/test/wiki/test.tarpit.rb +16 -0
  62. data/test/wiki/test.tarpit.rb~ +40 -0
  63. metadata +9 -3
  64. data/vandals.test.txt +0 -3
data/ChangeLog CHANGED
@@ -1,4 +1,48 @@
1
1
  ------------------------------------------------------------------------
2
+ rev 62: patsplat | 2004-11-03 00:39:47 -0500 (Wed, 03 Nov 2004) | 1 line
3
+
4
+ Updated ChangeLog for 0.6.0
5
+ ------------------------------------------------------------------------
6
+ rev 61: patsplat | 2004-11-03 00:35:31 -0500 (Wed, 03 Nov 2004) | 1 line
7
+
8
+ added escapeHTML methods from cgi.rb; setup tarpit to accept IP ranges ~ pat
9
+ ------------------------------------------------------------------------
10
+ rev 60: patsplat | 2004-10-31 17:04:24 -0500 (Sun, 31 Oct 2004) | 1 line
11
+
12
+ fixed multipart bug ~pat
13
+ ------------------------------------------------------------------------
14
+ rev 59: patsplat | 2004-10-04 00:47:29 -0400 (Mon, 04 Oct 2004) | 1 line
15
+
16
+ re-arrangements ~ pat
17
+ ------------------------------------------------------------------------
18
+ rev 58: patsplat | 2004-10-03 11:42:02 -0400 (Sun, 03 Oct 2004) | 1 line
19
+
20
+ documention tweaks ~ pat
21
+ ------------------------------------------------------------------------
22
+ rev 57: patsplat | 2004-10-03 11:27:46 -0400 (Sun, 03 Oct 2004) | 1 line
23
+
24
+ re-arranged documentation ~ pat
25
+ ------------------------------------------------------------------------
26
+ rev 56: patsplat | 2004-10-03 10:45:08 -0400 (Sun, 03 Oct 2004) | 1 line
27
+
28
+ made Web::env case insensitive (because who cares about case anyways?) ~ pat
29
+ ------------------------------------------------------------------------
30
+ rev 55: patsplat | 2004-10-01 20:25:15 -0400 (Fri, 01 Oct 2004) | 1 line
31
+
32
+ added Web::clear & fixed trivial failures in test.assertincludes.rb for 1.6 -> 1.8 ~ pat
33
+ ------------------------------------------------------------------------
34
+ rev 54: patsplat | 2004-09-04 01:06:48 -0400 (Sat, 04 Sep 2004) | 1 line
35
+
36
+ more documentation fixes ~ pat
37
+ ------------------------------------------------------------------------
38
+ rev 52: patsplat | 2004-09-03 18:21:33 -0400 (Fri, 03 Sep 2004) | 1 line
39
+
40
+ Updated ChangeLog for 0.5.1
41
+ ------------------------------------------------------------------------
42
+ rev 51: patsplat | 2004-09-03 18:20:36 -0400 (Fri, 03 Sep 2004) | 1 line
43
+
44
+ added inatallation notes ~ pat
45
+ ------------------------------------------------------------------------
2
46
  rev 49: patsplat | 2004-09-03 18:19:24 -0400 (Fri, 03 Sep 2004) | 1 line
3
47
 
4
48
  Updated ChangeLog for 0.5.0
data/README CHANGED
@@ -52,7 +52,9 @@ this:
52
52
  === Hello World
53
53
 
54
54
  require 'web'
55
- Web << 'Hello World'
55
+ Web::process do
56
+ Web << 'Hello World'
57
+ end
56
58
 
57
59
  === Testing an App
58
60
 
@@ -66,7 +68,9 @@ where script.rb is:
66
68
  #!/usr/bin/ruby
67
69
  require 'web'
68
70
 
69
- Web << "param is #{Web["param"]}"
71
+ Web::process do
72
+ Web << "param is #{Web["param"]}"
73
+ end
70
74
 
71
75
  and test.rb is:
72
76
 
data/README~ ADDED
@@ -0,0 +1,124 @@
1
+ === Purpose
2
+
3
+ NARF is a replacement for, and derivative of, the Ruby CGI
4
+ library. It exists one reason:
5
+
6
+ * To trivialize web development
7
+
8
+ We hope that these 3 lines of development will accomplish our task:
9
+
10
+ * To provide a clean API for writing Web applications.
11
+
12
+ * To make it very easy to write testable Web applications (using
13
+ Web::Testing), and provide a template system (Web::Narflates).
14
+
15
+ * To test the above goals by developing integrated, high quality,
16
+ configurable versions of common web apps in a simple and easy
17
+ to use manner. The heart of http://www.narf-lib.org, Web::Wiki
18
+ is an easy to use wiki. Not the only one, but it does make
19
+ us eat our own dogfood :-)
20
+
21
+ NARF does all of this as a regular CGI application. It also runs in-process under fastcgi, mod_ruby, and webrick. View these files for details:
22
+
23
+ * sapi/fastcgi/INSTALL.txt
24
+ * sapi/mod_ruby/INSTALL.txt
25
+ * sapi/webrick/INSTALL.txt
26
+
27
+ === Installation
28
+
29
+ Run the installer for NARF:
30
+
31
+ ruby build.rb test (optional)
32
+
33
+ ruby install.rb config
34
+ ruby install.rb setup
35
+ ruby install.rb install
36
+
37
+ === Dependencies
38
+
39
+ NARF requires the following packages on ruby 1.6. These packages are included in ruby 1.8:
40
+
41
+ testunit (unit testing framework):
42
+ http://testunit.talbott.ws/packages/testunit-0.1.6.tar.gz
43
+
44
+ strscan (string scanner library):
45
+ http://www.loveruby.net/archive/strscan/strscan-0.6.5.tar.gz
46
+
47
+ You can use raa-install (http://www.ruby-lang.org/raa/list.rhtml?id=729) for
48
+ this:
49
+ raa-install -i testunit
50
+ raa-install -i strscan
51
+
52
+ === Hello World
53
+
54
+ require 'web'
55
+ Web << 'Hello World'
56
+
57
+ === Testing an App
58
+
59
+ If you haven't noticed, NARF has a cgi style api. It's also has a testing api. Given these files:
60
+
61
+ script.rb
62
+ test.rb
63
+
64
+ where script.rb is:
65
+
66
+ #!/usr/bin/ruby
67
+ require 'web'
68
+
69
+ Web << "param is #{Web["param"]}"
70
+
71
+ and test.rb is:
72
+
73
+ require 'web'
74
+ require 'test/unit'
75
+
76
+ class MyAppTest < Test::Unit::TestCase
77
+ include Web::Testing
78
+
79
+ def test_prints_content
80
+ do_request "script.rb", "param" => "THIS!"
81
+ assert_content "param is THIS!"
82
+ end
83
+ end
84
+
85
+ Do this to run tests:
86
+
87
+ ruby test.rb
88
+
89
+ See Web::Testing for more examples.
90
+
91
+ === Websites
92
+
93
+ Home page:
94
+ http://www.narf-lib.org
95
+
96
+ Project info page, including downloads and CVS instructions:
97
+ http://www.sourceforge.net/projects/narf-lib
98
+
99
+ === Credits
100
+
101
+ Narf was written by Tom Clarke and Patrick May, partly based on cgi.rb
102
+ written by Wakou Aoyama. It makes significant use of ruby-htmltools,
103
+ written by Ned Konz. Also, Keunwoo Lee patched Request.read_multipart
104
+ to be cleaner.
105
+
106
+ NARF contains code from the following projects, and we are in their debt:
107
+
108
+ ruby-htmltools::
109
+ This is a Ruby library for building trees representing HTML structure.
110
+ http://bike-nomad.com/ruby
111
+ sgml-parser::
112
+ The html-parser package is a variant language implementation of the
113
+ Python's SGML parser (sgmllib.py), HTML parser (htmllib.py) and
114
+ Formatter (formatter.py).
115
+ http://www.jin.gr.jp/%7Enahi/Ruby/html-parser/README.html
116
+ webunit::
117
+ WebUnit is Ruby API for testing html/cgi without browser, and is
118
+ idealy suited for automated unit testing of web sites when combined
119
+ with a Ruby unit test framework such as RubyUnit. It was designed
120
+ and implemented by Masaki Suketa.
121
+ http://www.xpenguin.biz/download/webunit/index-en.html
122
+
123
+ Thanks also go to http://www.sourceforge.net for hosting the
124
+ project's CVS and website
data/build.rb CHANGED
@@ -169,13 +169,14 @@ Target.new( "test", "run narf unit tests" ) {
169
169
  require 'test/unit'
170
170
  require 'test/unit/ui/console/testrunner'
171
171
 
172
- $:.replace(['./lib/'].concat($:))
173
-
172
+ $:.replace( ['./lib/'].concat($:) )
173
+
174
174
  require 'web'
175
175
  require 'web/wiki'
176
176
 
177
177
  def setup_wiki
178
178
  File.rm_rf( Web::Wiki::store_dir )
179
+ Web::Wiki::wipe
179
180
  end
180
181
 
181
182
  alias :teardown_wiki :setup_wiki
data/build.rb~ CHANGED
@@ -109,7 +109,7 @@ end
109
109
 
110
110
  Target.new( "upload_doc", "upload doc" ) {
111
111
  Target.run( "rdoc" )
112
- `scp -r rdoc/* patsplat@ssh.narf-lib.org:~/narf-lib.org/doc`
112
+ `scp -r doc/rdoc/* patsplat@ssh.narf-lib.org:~/narf-lib.org/doc`
113
113
  }
114
114
 
115
115
  Target.new( "rdoc", "build rdoc" ) {
@@ -10,8 +10,4 @@ Copy this file where ever you like, make it executable, and tell apache to run i
10
10
 
11
11
  #!/usr/local/bin/narf
12
12
 
13
- This file may likely has a buffer overflow in it. Please be cautious with this until I can get verification that it is ok.
14
-
15
- Cheers,
16
-
17
- patrick@hexane.org
13
+ This file may have a buffer overflow in it. Please be cautious with this until I can get verification that it is ok.
@@ -0,0 +1,17 @@
1
+ The main advantage of this executable is that this runner can print syntax errors to the screen. To compile, run this from the project root (/narf):
2
+
3
+ ruby build.rb compile_narf_runner
4
+
5
+ The compiled binary will be in
6
+
7
+ /narf/apache_cgi/bin/narf
8
+
9
+ Copy this file where ever you like, make it executable, and tell apache to run it with a shebang:
10
+
11
+ #!/usr/local/bin/narf
12
+
13
+ This file may likely has a buffer overflow in it. Please be cautious with this until I can get verification that it is ok.
14
+
15
+ Cheers,
16
+
17
+ patrick@hexane.org
@@ -10,7 +10,7 @@ You can find a list of FastCGI servers here:
10
10
 
11
11
  After installing and configuring the appropriate libraries for your server, you will need to make sure that the cgi script executes in a Web::process block:
12
12
 
13
- #!/usr/local/bin/ruby
13
+ #!/usr/local/bin/ruby -rweb
14
14
 
15
15
  Web::process{
16
16
  Web << 'Hello World!'
@@ -0,0 +1,19 @@
1
+ == FastCGI
2
+
3
+ FastCGI support for narf requires the 'fcgi' libary:
4
+
5
+ http://raa.ruby-lang.org/list.rhtml?name=fcgi
6
+
7
+ You can find a list of FastCGI servers here:
8
+
9
+ http://www.fastcgi.com
10
+
11
+ After installing and configuring the appropriate libraries for your server, you will need to make sure that the cgi script executes in a Web::process block:
12
+
13
+ #!/usr/local/bin/ruby
14
+
15
+ Web::process{
16
+ Web << 'Hello World!'
17
+ }
18
+
19
+ There is a neat continuation trick that matz discussed in [ruby-talk:13428] that makes the Web::process block unnecessary. I've had some trouble getting it too work; when I do, I'll update these docs.
@@ -87,12 +87,15 @@ module delegates to a <a href="Web/CGI.html">Web::CGI</a> object, which
87
87
  does the actual work.
88
88
  </p>
89
89
  <pre>
90
- #!/usr/bin/narf
91
- Web[&quot;field&quot;] # access parameters
92
- Web.cookies[&quot;muppet&quot;] # access cookies
93
- Web.session[&quot;key&quot;] ||= &quot;value&quot; # get and set session values
94
- Web.set_cookie( &quot;muppet&quot;, &quot;cookie monster&quot; ) # set cookies
95
- Web.puts &quot;something&quot; # print 'something' out
90
+ #!/usr/bin/ruby
91
+ require 'web'
92
+ Web::process do
93
+ Web[&quot;field&quot;] # access parameters
94
+ Web.cookies[&quot;muppet&quot;] # access cookies
95
+ Web.session[&quot;key&quot;] ||= &quot;value&quot; # get and set session values
96
+ Web.set_cookie( &quot;muppet&quot;, &quot;cookie monster&quot; ) # set cookies
97
+ Web.puts &quot;something&quot; # print 'something' out
98
+ end
96
99
  </pre>
97
100
  <p>
98
101
  If the request contained multipart/form-data, uploaded files are returned
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 162</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 165</span>
11
11
  <span class="kw">def</span> method_missing(method, *args, &amp;block)
12
12
  CGI.get_cgi.send(method,*args, &amp;block)
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 166</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 169</span>
11
11
  <span class="kw">def</span> set_cgi( cgi )
12
12
  CGI.set_cgi( cgi )
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 170</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 173</span>
11
11
  <span class="kw">def</span> get_cgi
12
12
  CGI.get_cgi
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 174</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 177</span>
11
11
  <span class="kw">def</span> process(options={}, &amp;block)
12
12
  CGI.process(options, &amp;block)
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 180</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 183</span>
11
11
  <span class="kw">def</span> Web::html_encode(string)
12
12
  <span class="kw">return</span> <span class="kw">nil</span> <span class="kw">unless</span> string
13
13
  newstring = string.dup
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 191</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 194</span>
11
11
  <span class="kw">def</span> Web::escape(string)
12
12
  <span class="kw">return</span> <span class="kw">nil</span> <span class="kw">unless</span> string
13
13
  string.gsub(<span class="re">/([^ a-zA-Z0-9_.-]+)/n</span>) <span class="kw">do</span>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 200</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 203</span>
11
11
  <span class="kw">def</span> Web::unescape(string)
12
12
  <span class="kw">return</span> <span class="kw">nil</span> <span class="kw">unless</span> string
13
13
  string.tr(<span class="str">'+'</span>, <span class="str">' '</span>).gsub(<span class="re">/((?:%[0-9a-fA-F]{2})+)/n</span>) <span class="kw">do</span>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web.rb, line 211</span>
10
+ <pre><span class="cmt"># File lib/web.rb, line 214</span>
11
11
  <span class="kw">def</span> Web::rfc1123_date(time)
12
12
  t = time.clone.gmtime
13
13
  <span class="kw">return</span> format(<span class="str">&quot;%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT&quot;</span>,
@@ -14,8 +14,9 @@
14
14
  @input = options[:in] || $stdin
15
15
  @output = options[:out] || $stdout
16
16
  @env = downcase_env( options[:env] || ENV )
17
-
17
+
18
18
  @env[<span class="str">'document_root'</span>] = options[:document_root] || Web.get_docroot || @env[<span class="str">'document_root'</span>]
19
+ @env[<span class="str">'script_name'</span> ] = options[:script_name] || @env[<span class="str">'script_name'</span>]
19
20
 
20
21
  parse_request
21
22
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web/cgi.rb, line 541</span>
10
+ <pre><span class="cmt"># File lib/web/cgi.rb, line 542</span>
11
11
  <span class="kw">def</span> close
12
12
 
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web/cgi.rb, line 546</span>
10
+ <pre><span class="cmt"># File lib/web/cgi.rb, line 547</span>
11
11
  <span class="kw">def</span> nph?
12
12
  @options[:nph] || <span class="re">/IIS/</span>.match(env[<span class="str">&quot;server_software&quot;</span>])
13
13
  <span class="kw">end</span></pre>
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web/cgi.rb, line 550</span>
10
+ <pre><span class="cmt"># File lib/web/cgi.rb, line 551</span>
11
11
  <span class="kw">def</span> send_header( header )
12
12
  send_nph_header( header ) <span class="kw">if</span> (nph?)
13
13
 
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web/cgi.rb, line 577</span>
10
+ <pre><span class="cmt"># File lib/web/cgi.rb, line 578</span>
11
11
  <span class="kw">def</span> report_error( err )
12
12
  <span class="kw">self</span>.puts <span class="str">&quot;&lt;h3&gt;ruby error:&lt;/h3&gt;&quot;</span>
13
13
  <span class="kw">self</span>.puts Dir.pwd
@@ -7,7 +7,7 @@
7
7
  <link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
8
8
  </head>
9
9
  <body bgcolor="white">
10
- <pre><span class="cmt"># File lib/web/cgi.rb, line 592</span>
10
+ <pre><span class="cmt"># File lib/web/cgi.rb, line 593</span>
11
11
  <span class="kw">def</span> CGI::server_sniff
12
12
  <span class="kw">if</span>( Object.const_defined?( <span class="str">&quot;Apache&quot;</span> ) \
13
13
  &amp;&amp; Apache.const_defined?( <span class="str">&quot;Request&quot;</span> ) \