ruby-web 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +474 -0
- data/INSTALL.txt +9 -0
- data/InstalledFiles +180 -0
- data/LICENSE.txt +74 -0
- data/Rakefile +529 -0
- data/TODO +65 -0
- data/doc/additional.xml +149 -0
- data/doc/core.xml +652 -0
- data/doc/credits/index.xml +52 -0
- data/doc/credits/php.contributors.xml +118 -0
- data/doc/credits/php.language-snippets.ent +622 -0
- data/doc/install/index.xml +136 -0
- data/doc/install/mac/index.xml +21 -0
- data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
- data/doc/install/unix/index.xml +46 -0
- data/doc/install/win/apache1.xml +166 -0
- data/doc/install/win/apache2.xml +141 -0
- data/doc/install/win/iis.xml +162 -0
- data/doc/install/win/index.xml +24 -0
- data/doc/install/win/installer.xml +31 -0
- data/doc/install/win/manual.xml +43 -0
- data/doc/manual.xml +69 -0
- data/doc/old/apache_cgi.txt +23 -0
- data/doc/old/fastcgi.txt +23 -0
- data/doc/old/mod_ruby.txt +21 -0
- data/doc/old/snippets.rdoc +183 -0
- data/doc/old/webrick.txt +23 -0
- data/doc/old/windows_cgi.txt +9 -0
- data/doc/tutorial.xml +14 -0
- data/doc/xsl/manual-multi.xsl +10 -0
- data/doc/xsl/manual-pdf.xsl +6 -0
- data/doc/xsl/manual-single.xsl +6 -0
- data/doc/xsl/manual.css +22 -0
- data/install.rb +1022 -0
- data/lib/formatter.rb +314 -0
- data/lib/html-parser.rb +429 -0
- data/lib/htmlrepair.rb +113 -0
- data/lib/htmlsplit.rb +842 -0
- data/lib/sgml-parser.rb +332 -0
- data/lib/web.rb +68 -0
- data/lib/web/assertinclude.rb +129 -0
- data/lib/web/config.rb +50 -0
- data/lib/web/connection.rb +1070 -0
- data/lib/web/convenience.rb +154 -0
- data/lib/web/formreader.rb +318 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/info.rb +63 -0
- data/lib/web/load.rb +210 -0
- data/lib/web/mime.rb +87 -0
- data/lib/web/phprb.rb +340 -0
- data/lib/web/resources/test/cookie.rb +33 -0
- data/lib/web/resources/test/counter.rb +20 -0
- data/lib/web/resources/test/multipart.rb +14 -0
- data/lib/web/resources/test/redirect.rb +8 -0
- data/lib/web/resources/test/stock.rb +33 -0
- data/lib/web/sapi/apache.rb +129 -0
- data/lib/web/sapi/fastcgi.rb +22 -0
- data/lib/web/sapi/install/apache.rb +180 -0
- data/lib/web/sapi/install/iis.rb +93 -0
- data/lib/web/sapi/install/macosx.rb +90 -0
- data/lib/web/sapi/webrick.rb +86 -0
- data/lib/web/session.rb +83 -0
- data/lib/web/shim/cgi.rb +129 -0
- data/lib/web/shim/rails.rb +175 -0
- data/lib/web/stringio.rb +78 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/testing.rb +666 -0
- data/lib/web/traceoutput.rb +75 -0
- data/lib/web/unit.rb +56 -0
- data/lib/web/upload.rb +59 -0
- data/lib/web/validate.rb +52 -0
- data/lib/web/wiki.rb +557 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/page.rb +201 -0
- data/lib/webunit.rb +27 -0
- data/lib/webunit/assert.rb +152 -0
- data/lib/webunit/converter.rb +154 -0
- data/lib/webunit/cookie.rb +118 -0
- data/lib/webunit/domwalker.rb +185 -0
- data/lib/webunit/exception.rb +14 -0
- data/lib/webunit/form.rb +116 -0
- data/lib/webunit/frame.rb +37 -0
- data/lib/webunit/htmlelem.rb +122 -0
- data/lib/webunit/image.rb +26 -0
- data/lib/webunit/jscript.rb +31 -0
- data/lib/webunit/link.rb +33 -0
- data/lib/webunit/params.rb +321 -0
- data/lib/webunit/parser.rb +229 -0
- data/lib/webunit/response.rb +464 -0
- data/lib/webunit/runtest.rb +41 -0
- data/lib/webunit/table.rb +148 -0
- data/lib/webunit/testcase.rb +45 -0
- data/lib/webunit/ui/cui/testrunner.rb +50 -0
- data/lib/webunit/utils.rb +68 -0
- data/lib/webunit/webunit.rb +28 -0
- data/test/dev/action.rb +83 -0
- data/test/dev/forms.rb +104 -0
- data/test/dev/forms2.rb +104 -0
- data/test/dev/parser.rb +17 -0
- data/test/dev/scripts/dump.rb +24 -0
- data/test/dev/scripts/makedist.rb +62 -0
- data/test/dev/scripts/uri.rb +41 -0
- data/test/dev/scripts/uri/common.rb +432 -0
- data/test/dev/scripts/uri/ftp.rb +149 -0
- data/test/dev/scripts/uri/generic.rb +1106 -0
- data/test/dev/scripts/uri/http.rb +76 -0
- data/test/dev/scripts/uri/https.rb +26 -0
- data/test/dev/scripts/uri/ldap.rb +238 -0
- data/test/dev/scripts/uri/mailto.rb +260 -0
- data/test/dev/scripts/urireg.rb +174 -0
- data/test/dev/simpledispatcher.rb +156 -0
- data/test/dev/test.action.rb +146 -0
- data/test/dev/test.formreader.rb +463 -0
- data/test/dev/test.simpledispatcher.rb +186 -0
- data/test/dev/webunit/conv/digit-0.rb +21 -0
- data/test/dev/webunit/conv/digit-1.rb +17 -0
- data/test/dev/webunit/conv/digit.rb +23 -0
- data/test/dev/webunit/conv/test_digit-0.rb +16 -0
- data/test/dev/webunit/conv/test_digit-1.rb +19 -0
- data/test/dev/webunit/conv/test_digit.rb +26 -0
- data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
- data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
- data/test/dev/webunit/conv/test_digit_view.rb +134 -0
- data/test/installation/htdocs/cgi_test.rb +296 -0
- data/test/installation/htdocs/test_install.rb +4 -0
- data/test/installation/runwebtest.rb +5 -0
- data/test/installation/test_cookie.rb +128 -0
- data/test/installation/test_form.rb +47 -0
- data/test/installation/test_multipart.rb +51 -0
- data/test/installation/test_request.rb +24 -0
- data/test/installation/test_response.rb +35 -0
- data/test/unit/htdocs/cookie.rb +32 -0
- data/test/unit/htdocs/multipart.rb +28 -0
- data/test/unit/htdocs/redirect.rb +12 -0
- data/test/unit/htdocs/simple.rb +13 -0
- data/test/unit/htdocs/stock.rb +33 -0
- data/test/unit/test_assert.rb +162 -0
- data/test/unit/test_cookie.rb +114 -0
- data/test/unit/test_domwalker.rb +77 -0
- data/test/unit/test_form.rb +42 -0
- data/test/unit/test_frame.rb +40 -0
- data/test/unit/test_htmlelem.rb +74 -0
- data/test/unit/test_image.rb +45 -0
- data/test/unit/test_jscript.rb +57 -0
- data/test/unit/test_link.rb +85 -0
- data/test/unit/test_multipart.rb +51 -0
- data/test/unit/test_params.rb +210 -0
- data/test/unit/test_parser.rb +53 -0
- data/test/unit/test_response.rb +150 -0
- data/test/unit/test_table.rb +70 -0
- data/test/unit/test_utils.rb +106 -0
- data/test/unit/test_webunit.rb +28 -0
- data/test/web/mod_ruby_stub.rb +39 -0
- data/test/web/test.assertinclude.rb +109 -0
- data/test/web/test.buffer.rb +182 -0
- data/test/web/test.code.loader.rb +78 -0
- data/test/web/test.config.rb +31 -0
- data/test/web/test.error.handling.rb +91 -0
- data/test/web/test.formreader-2.0.rb +352 -0
- data/test/web/test.load.rb +125 -0
- data/test/web/test.mime-type.rb +23 -0
- data/test/web/test.narf.cgi.rb +106 -0
- data/test/web/test.phprb.rb +239 -0
- data/test/web/test.request.rb +368 -0
- data/test/web/test.response.rb +637 -0
- data/test/web/test.ruby-web.rb +10 -0
- data/test/web/test.session.rb +50 -0
- data/test/web/test.shim.cgi.rb +96 -0
- data/test/web/test.tagparser.rb +65 -0
- data/test/web/test.template2.rb +297 -0
- data/test/web/test.testing2.rb +318 -0
- data/test/web/test.upload.rb +45 -0
- data/test/web/test.validate.rb +46 -0
- data/test/web/test.web.test.rb +495 -0
- data/test/wiki/test.history.rb +297 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +56 -0
- data/test/wiki/test.wiki.rb +300 -0
- data/test/wikitestroot/admin.rb +7 -0
- data/test/wikitestroot/wiki.rb +6 -0
- metadata +234 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
module Web
|
4
|
+
module Install
|
5
|
+
class IIS
|
6
|
+
|
7
|
+
def IIS::install( install_dir )
|
8
|
+
self.new(install_dir).install
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_accessor :install_dir
|
12
|
+
def initialize( install_dir )
|
13
|
+
@install_dir = install_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
def backup
|
17
|
+
"#{httpd_conf}.ruby-web.backup.#{Time::now::strftime('%Y.%m.%d') }"
|
18
|
+
end
|
19
|
+
|
20
|
+
def install
|
21
|
+
puts "******************************************",
|
22
|
+
"* Installing .rhtml and .rb mappings *",
|
23
|
+
"* for Microsoft IIS *",
|
24
|
+
"******************************************"
|
25
|
+
|
26
|
+
done = Hash.new
|
27
|
+
require 'win32ole'
|
28
|
+
# http://www.west-wind.com/presentations/WebServerConfig/WebServerConfig.htm
|
29
|
+
iis = WIN32OLE.connect 'IIS://LOCALHOST/W3SVC'
|
30
|
+
|
31
|
+
iis.each do |site|
|
32
|
+
unless site.name =~ /info|filters/i
|
33
|
+
site.each do |d|
|
34
|
+
if d.name =~ /^root$/i
|
35
|
+
scriptmaps = d.scriptmaps
|
36
|
+
|
37
|
+
scriptmaps.each_with_index do |mapping, i|
|
38
|
+
m = mapping.split(/,/)
|
39
|
+
if m.first =~ /^\.(rb|rhtml)$/
|
40
|
+
done[m.first] = true
|
41
|
+
m[1] = install_dir + "\\bin\\ruby-web.exe"
|
42
|
+
m = m.join(',')
|
43
|
+
scriptmaps[i] = m
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
['.rb', '.rhtml'].each do |ext|
|
48
|
+
unless done[ext]
|
49
|
+
scriptmaps[scriptmaps.length] = "#{ext},#{install_dir}\\bin\\ruby-web.exe,1"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# http://www.microsoft.com/technet/scriptcenter/guide/sas_ads_kbwl.mspx
|
54
|
+
d.PutEx( ADS_PROPERTY_UPDATE, "ScriptMaps", scriptmaps )
|
55
|
+
|
56
|
+
index_files = d.DefaultDoc
|
57
|
+
index_files += ",index.rhtml" unless index_files =~ /index\.rhtml/
|
58
|
+
index_files += ",index.rb" unless index_files =~ /index\.rb/
|
59
|
+
d.DefaultDoc = index_files
|
60
|
+
|
61
|
+
d.SetInfo()
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#require 'pp'
|
68
|
+
#pp iis.scriptmaps
|
69
|
+
|
70
|
+
puts "Restarting IIS..."
|
71
|
+
unless system('iisreset')
|
72
|
+
raise "Error restarting IIS"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
ADS_PROPERTY_CLEAR = 1
|
77
|
+
ADS_PROPERTY_UPDATE = 2
|
78
|
+
ADS_PROPERTY_APPEND = 3
|
79
|
+
ADS_PROPERTY_DELETE = 4
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
if __FILE__ == $0
|
86
|
+
begin
|
87
|
+
Web::Install::IIS::install( *ARGV )
|
88
|
+
rescue Exception
|
89
|
+
puts $!
|
90
|
+
puts $!.backtrace
|
91
|
+
sleep
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
configtest = "/usr/sbin/apachectl configtest"
|
4
|
+
conffile = "/etc/httpd/httpd.conf"
|
5
|
+
backupfile = "#{conffile}.ruby-web.backup.#{Time::now}"
|
6
|
+
tempfile = "#{conffile}.ruby-web.temp"
|
7
|
+
|
8
|
+
cgi_conf = <<-CONF
|
9
|
+
# begin ruby-web activation
|
10
|
+
AddHandler cgi-script .rb .rhtml
|
11
|
+
# end ruby-web activation
|
12
|
+
CONF
|
13
|
+
|
14
|
+
mod_ruby_conf = <<-CONF
|
15
|
+
# begin ruby-web activation
|
16
|
+
LoadModule ruby_module libexec/httpd/mod_ruby.so
|
17
|
+
AddModule mod_ruby.c
|
18
|
+
|
19
|
+
<IfModule mod_ruby.c>
|
20
|
+
RubySafeLevel 0
|
21
|
+
RubyRequire web/sapi/apache
|
22
|
+
|
23
|
+
AddHandler ruby-object rb rhtml
|
24
|
+
RubyHandler Web::RubyRun.instance
|
25
|
+
</IfModule>
|
26
|
+
# end ruby-web activation
|
27
|
+
CONF
|
28
|
+
|
29
|
+
if (ARGV[0] == "mod_ruby")
|
30
|
+
conf = mod_ruby_conf
|
31
|
+
elsif (ARGV[0] == "cgi")
|
32
|
+
conf = cgi_conf
|
33
|
+
else
|
34
|
+
puts <<-EOF
|
35
|
+
Usage:
|
36
|
+
ruby #{__FILE__} [mod_ruby|cgi]
|
37
|
+
|
38
|
+
Options:
|
39
|
+
mod_ruby install mod_ruby config
|
40
|
+
cgi install cgi config
|
41
|
+
|
42
|
+
Description:
|
43
|
+
Configures default Apache installation
|
44
|
+
on Mac OS X to use ruby-web. Assumes
|
45
|
+
ruby-web files have already been installed
|
46
|
+
by the ruby-web_x.x.x.pkg.
|
47
|
+
|
48
|
+
EOF
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
|
52
|
+
require 'fileutils'
|
53
|
+
include FileUtils
|
54
|
+
|
55
|
+
|
56
|
+
# ----------- Modify config file ------------
|
57
|
+
|
58
|
+
# backup config
|
59
|
+
cp( conffile, backupfile )
|
60
|
+
|
61
|
+
contents = File::open(conffile) do |f|
|
62
|
+
f.read
|
63
|
+
end
|
64
|
+
|
65
|
+
config_file_changed = false
|
66
|
+
|
67
|
+
# delete any existing ruby-web config
|
68
|
+
contents.gsub!( /# begin ruby-web activation.*# end ruby-web activation\s*/m, '' )
|
69
|
+
|
70
|
+
contents << "\n\n" << conf
|
71
|
+
|
72
|
+
File.open(tempfile, "w") do |f|
|
73
|
+
f.write contents
|
74
|
+
end
|
75
|
+
|
76
|
+
cp( tempfile, conffile )
|
77
|
+
|
78
|
+
config_file_changed = true
|
79
|
+
|
80
|
+
# ----------- Restart Apache ------------
|
81
|
+
unless system(configtest)
|
82
|
+
if config_file_changed
|
83
|
+
puts("[ruby-web #{$0}]: Unable that the Apache webserver is running correcly with the new module and the configuration fiel changes using the '#{configtest}' command. Ruby-Web itself has been installed sucessfully, but it has not been activated. Your old #{conffile} file is untouched...")
|
84
|
+
puts "[ruby-web #{$0}]: The modified config file is available in '#{tempfile}' so you can examine it and try to activate Ruby-Web"
|
85
|
+
|
86
|
+
cp( backupfile, conffile )
|
87
|
+
else
|
88
|
+
puts "[ruby-web #{$0}]: Unable that the Apache webserver is running correcly with the new module and the configuration fiel changes using the '#{configtest}' command. Ruby-Web itself has been installed sucessfully, but you need to figure out why Apache is not running. Your conf file has not been modified."
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Based on:
|
2
|
+
# cgihandler.rb -- CGIHandler Class
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: cgihandler.rb,v 1.27 2003/03/21 19:56:01 gotoyuzo Exp $
|
10
|
+
|
11
|
+
require 'tempfile'
|
12
|
+
require 'webrick/httpservlet/abstract'
|
13
|
+
|
14
|
+
require 'web'
|
15
|
+
|
16
|
+
module Web
|
17
|
+
|
18
|
+
class WebrickConnection < Connection
|
19
|
+
def send_header_implementation
|
20
|
+
res = options[:webrick_response]
|
21
|
+
res.status = Web::status.to_i
|
22
|
+
Web::header.each do |key, val|
|
23
|
+
unless key =~ /status/i
|
24
|
+
res[key] = val.join(", ")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class RubyWebHandler < WEBrick::HTTPServlet::AbstractServlet
|
31
|
+
|
32
|
+
def initialize(server, name)
|
33
|
+
super
|
34
|
+
@script_filename = name
|
35
|
+
@tempdir = server[:TempDir]
|
36
|
+
end
|
37
|
+
|
38
|
+
def do_GET(req, res)
|
39
|
+
#cgi_out = Tempfile.new("webrick.cgiout.", @tempdir)
|
40
|
+
#cgi_err = Tempfile.new("webrick.cgierr.", @tempdir)
|
41
|
+
cgi_out = StringIO.new ''
|
42
|
+
cgi_err = StringIO.new ''
|
43
|
+
|
44
|
+
old_stderr = $stderr
|
45
|
+
|
46
|
+
begin
|
47
|
+
$stderr = cgi_err
|
48
|
+
|
49
|
+
meta = req.meta_vars
|
50
|
+
meta["SCRIPT_FILENAME"] = @script_filename
|
51
|
+
meta["PATH"] = @config[:CGIPathEnv]
|
52
|
+
|
53
|
+
Web::open( :connection =>
|
54
|
+
WebrickConnection.new(:webrick_response => res,
|
55
|
+
:out => cgi_out,
|
56
|
+
:raw_post_data =>
|
57
|
+
StringIO.new( req.body || '' ),
|
58
|
+
:env => meta ) ) do
|
59
|
+
Web::load( @script_filename )
|
60
|
+
end
|
61
|
+
|
62
|
+
cgi_out.rewind
|
63
|
+
res.body = cgi_out.read
|
64
|
+
|
65
|
+
cgi_err.rewind
|
66
|
+
if errmsg = cgi_err.read
|
67
|
+
if errmsg.size > 0
|
68
|
+
@logger.error("RubyWebHandler: #{@script_filename}:\n" + errmsg)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
rescue Exception => ex
|
73
|
+
#Web::report_error( ex )
|
74
|
+
old_stderr.puts ex.backtrace
|
75
|
+
raise HTTPStatus::InternalServerError, ex.message
|
76
|
+
|
77
|
+
ensure
|
78
|
+
cgi_out.close
|
79
|
+
cgi_err.close
|
80
|
+
$stderr = old_stderr
|
81
|
+
end
|
82
|
+
end
|
83
|
+
alias do_POST do_GET
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/lib/web/session.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
module Web
|
3
|
+
# == Purpose
|
4
|
+
# Provides a file based implemetation of a session.
|
5
|
+
# This is hacked up from matz's CGI::Session
|
6
|
+
class Session
|
7
|
+
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def create_id
|
11
|
+
md5 = Digest::MD5.new
|
12
|
+
md5.update( String(Time.now.to_f) )
|
13
|
+
md5.update( String(rand(0)) )
|
14
|
+
#md5.update( String($$) )
|
15
|
+
#md5.update( 'thanks matz' )
|
16
|
+
md5.hexdigest[0,16]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize( cgi, options={} )
|
21
|
+
@session_id = load_id( cgi, options )
|
22
|
+
|
23
|
+
send_cookie( cgi, options[:session_key] || "_session_id" )
|
24
|
+
|
25
|
+
@session = get_session_from_disk
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_session_from_disk
|
29
|
+
if File.exists? file
|
30
|
+
File.open( file, "r" ) { |store|
|
31
|
+
Marshal.load store
|
32
|
+
}
|
33
|
+
else
|
34
|
+
{}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_id( cgi, options )
|
39
|
+
if (options.has_key? :session_id)
|
40
|
+
options[:session_id]
|
41
|
+
elsif(cgi.cookie["_session_id"] && !cgi.cookie["_session_id"].empty?)
|
42
|
+
cgi.cookie["_session_id"][0]
|
43
|
+
else
|
44
|
+
Session.create_id
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def send_cookie( cgi, session_key )
|
50
|
+
cgi.set_cookie( session_key, @session_id )
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# saves session to disk
|
55
|
+
def save
|
56
|
+
File.open( file, "w+" ) { |store|
|
57
|
+
Marshal.dump( @session, store )
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def temp_dir
|
62
|
+
temp = ENV['TMP'] || ENV['TEMP'] || '/tmp'
|
63
|
+
unless( File.exists? temp )
|
64
|
+
temp = "c:/windows/temp"
|
65
|
+
end
|
66
|
+
temp
|
67
|
+
end
|
68
|
+
|
69
|
+
def file
|
70
|
+
File.expand_path(File.join(self.temp_dir, File.basename(@session_id.to_s).untaint))
|
71
|
+
end
|
72
|
+
|
73
|
+
# resets session to empty hash, for use in testing
|
74
|
+
def reset
|
75
|
+
@session = {}
|
76
|
+
end
|
77
|
+
|
78
|
+
def method_missing(method, *args, &block)
|
79
|
+
# much faster than simple delegator
|
80
|
+
@session.send(method,*args,&block)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/web/shim/cgi.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# shim for old style CGI functionality
|
2
|
+
|
3
|
+
require 'cgi'
|
4
|
+
|
5
|
+
class CGI
|
6
|
+
class << self
|
7
|
+
[:escape,
|
8
|
+
:unescape,
|
9
|
+
:escapeHTML,
|
10
|
+
:unescapeHTML,
|
11
|
+
:escapeElement,
|
12
|
+
:unescapeElement, ].each do |sym|
|
13
|
+
define_method(sym) do |*args|
|
14
|
+
Web::send( sym, *args )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
remove_method :initialize
|
20
|
+
def initialize(type = "query")
|
21
|
+
case type
|
22
|
+
when "html3"
|
23
|
+
extend Html3
|
24
|
+
element_init()
|
25
|
+
extend HtmlExtension
|
26
|
+
when "html4"
|
27
|
+
extend Html4
|
28
|
+
element_init()
|
29
|
+
extend HtmlExtension
|
30
|
+
when "html4Tr"
|
31
|
+
extend Html4Tr
|
32
|
+
element_init()
|
33
|
+
extend HtmlExtension
|
34
|
+
when "html4Fr"
|
35
|
+
extend Html4Tr
|
36
|
+
element_init()
|
37
|
+
extend Html4Fr
|
38
|
+
element_init()
|
39
|
+
extend HtmlExtension
|
40
|
+
end
|
41
|
+
|
42
|
+
Web::filter do |content|
|
43
|
+
while content.gsub!( /^(.+): (.+)/, '' )
|
44
|
+
if ($1.downcase == "location")
|
45
|
+
Web::set_redirect($2)
|
46
|
+
else
|
47
|
+
Web::add_header( $1, $2 )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
content
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def [] key
|
55
|
+
Web[key]
|
56
|
+
end
|
57
|
+
|
58
|
+
# params has slightly different logic than Web::request
|
59
|
+
def params
|
60
|
+
@params ||= nil
|
61
|
+
unless @params
|
62
|
+
@params = Hash.new
|
63
|
+
Web::request.each do |k,v|
|
64
|
+
@params[k] ||= Array.new
|
65
|
+
v.each do |v1|
|
66
|
+
if (Web::multipart?)
|
67
|
+
@params[k].push( if v1.kind_of? Web::Upload
|
68
|
+
v1
|
69
|
+
else
|
70
|
+
t = Tempfile.new("Web")
|
71
|
+
t.write(v1)
|
72
|
+
Web::Upload.new(t, nil, nil)
|
73
|
+
end )
|
74
|
+
else
|
75
|
+
@params[k].push v1
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
@params
|
81
|
+
end
|
82
|
+
|
83
|
+
remove_method :env_table
|
84
|
+
def env_table
|
85
|
+
Web::env
|
86
|
+
end
|
87
|
+
|
88
|
+
def cookies
|
89
|
+
unless @cookies
|
90
|
+
@cookies = Web::cookie
|
91
|
+
@cookies.each do |k,v|
|
92
|
+
@cookies[k] = CGI::Cookie::new( k, v )
|
93
|
+
end
|
94
|
+
end
|
95
|
+
@cookies
|
96
|
+
end
|
97
|
+
|
98
|
+
def script_name
|
99
|
+
Web::script_name
|
100
|
+
end
|
101
|
+
|
102
|
+
def query_string
|
103
|
+
Web::env[:query_string]
|
104
|
+
end
|
105
|
+
|
106
|
+
def has_key?(key)
|
107
|
+
self.params.has_key?(key)
|
108
|
+
end
|
109
|
+
|
110
|
+
def key?(key)
|
111
|
+
self.params.has_key?(key)
|
112
|
+
end
|
113
|
+
|
114
|
+
def keys
|
115
|
+
self.params.keys
|
116
|
+
end
|
117
|
+
|
118
|
+
remove_method :out
|
119
|
+
def out(headers=Array.new)
|
120
|
+
headers.each do |k,v|
|
121
|
+
k = "Set-Cookie" if (k.downcase == "cookie")
|
122
|
+
v.each do |v1|
|
123
|
+
Web::add_header(k,v1)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
Web << yield
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|