ruby-web 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. data/ChangeLog +474 -0
  2. data/INSTALL.txt +9 -0
  3. data/InstalledFiles +180 -0
  4. data/LICENSE.txt +74 -0
  5. data/Rakefile +529 -0
  6. data/TODO +65 -0
  7. data/doc/additional.xml +149 -0
  8. data/doc/core.xml +652 -0
  9. data/doc/credits/index.xml +52 -0
  10. data/doc/credits/php.contributors.xml +118 -0
  11. data/doc/credits/php.language-snippets.ent +622 -0
  12. data/doc/install/index.xml +136 -0
  13. data/doc/install/mac/index.xml +21 -0
  14. data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
  15. data/doc/install/unix/index.xml +46 -0
  16. data/doc/install/win/apache1.xml +166 -0
  17. data/doc/install/win/apache2.xml +141 -0
  18. data/doc/install/win/iis.xml +162 -0
  19. data/doc/install/win/index.xml +24 -0
  20. data/doc/install/win/installer.xml +31 -0
  21. data/doc/install/win/manual.xml +43 -0
  22. data/doc/manual.xml +69 -0
  23. data/doc/old/apache_cgi.txt +23 -0
  24. data/doc/old/fastcgi.txt +23 -0
  25. data/doc/old/mod_ruby.txt +21 -0
  26. data/doc/old/snippets.rdoc +183 -0
  27. data/doc/old/webrick.txt +23 -0
  28. data/doc/old/windows_cgi.txt +9 -0
  29. data/doc/tutorial.xml +14 -0
  30. data/doc/xsl/manual-multi.xsl +10 -0
  31. data/doc/xsl/manual-pdf.xsl +6 -0
  32. data/doc/xsl/manual-single.xsl +6 -0
  33. data/doc/xsl/manual.css +22 -0
  34. data/install.rb +1022 -0
  35. data/lib/formatter.rb +314 -0
  36. data/lib/html-parser.rb +429 -0
  37. data/lib/htmlrepair.rb +113 -0
  38. data/lib/htmlsplit.rb +842 -0
  39. data/lib/sgml-parser.rb +332 -0
  40. data/lib/web.rb +68 -0
  41. data/lib/web/assertinclude.rb +129 -0
  42. data/lib/web/config.rb +50 -0
  43. data/lib/web/connection.rb +1070 -0
  44. data/lib/web/convenience.rb +154 -0
  45. data/lib/web/formreader.rb +318 -0
  46. data/lib/web/htmlparser/html-parser.rb +429 -0
  47. data/lib/web/htmlparser/sgml-parser.rb +332 -0
  48. data/lib/web/htmltools/element.rb +296 -0
  49. data/lib/web/htmltools/stparser.rb +276 -0
  50. data/lib/web/htmltools/tags.rb +286 -0
  51. data/lib/web/htmltools/tree.rb +139 -0
  52. data/lib/web/htmltools/xmltree.rb +160 -0
  53. data/lib/web/htmltools/xpath.rb +71 -0
  54. data/lib/web/info.rb +63 -0
  55. data/lib/web/load.rb +210 -0
  56. data/lib/web/mime.rb +87 -0
  57. data/lib/web/phprb.rb +340 -0
  58. data/lib/web/resources/test/cookie.rb +33 -0
  59. data/lib/web/resources/test/counter.rb +20 -0
  60. data/lib/web/resources/test/multipart.rb +14 -0
  61. data/lib/web/resources/test/redirect.rb +8 -0
  62. data/lib/web/resources/test/stock.rb +33 -0
  63. data/lib/web/sapi/apache.rb +129 -0
  64. data/lib/web/sapi/fastcgi.rb +22 -0
  65. data/lib/web/sapi/install/apache.rb +180 -0
  66. data/lib/web/sapi/install/iis.rb +93 -0
  67. data/lib/web/sapi/install/macosx.rb +90 -0
  68. data/lib/web/sapi/webrick.rb +86 -0
  69. data/lib/web/session.rb +83 -0
  70. data/lib/web/shim/cgi.rb +129 -0
  71. data/lib/web/shim/rails.rb +175 -0
  72. data/lib/web/stringio.rb +78 -0
  73. data/lib/web/strscanparser.rb +24 -0
  74. data/lib/web/tagparser.rb +96 -0
  75. data/lib/web/testing.rb +666 -0
  76. data/lib/web/traceoutput.rb +75 -0
  77. data/lib/web/unit.rb +56 -0
  78. data/lib/web/upload.rb +59 -0
  79. data/lib/web/validate.rb +52 -0
  80. data/lib/web/wiki.rb +557 -0
  81. data/lib/web/wiki/linker.rb +72 -0
  82. data/lib/web/wiki/page.rb +201 -0
  83. data/lib/webunit.rb +27 -0
  84. data/lib/webunit/assert.rb +152 -0
  85. data/lib/webunit/converter.rb +154 -0
  86. data/lib/webunit/cookie.rb +118 -0
  87. data/lib/webunit/domwalker.rb +185 -0
  88. data/lib/webunit/exception.rb +14 -0
  89. data/lib/webunit/form.rb +116 -0
  90. data/lib/webunit/frame.rb +37 -0
  91. data/lib/webunit/htmlelem.rb +122 -0
  92. data/lib/webunit/image.rb +26 -0
  93. data/lib/webunit/jscript.rb +31 -0
  94. data/lib/webunit/link.rb +33 -0
  95. data/lib/webunit/params.rb +321 -0
  96. data/lib/webunit/parser.rb +229 -0
  97. data/lib/webunit/response.rb +464 -0
  98. data/lib/webunit/runtest.rb +41 -0
  99. data/lib/webunit/table.rb +148 -0
  100. data/lib/webunit/testcase.rb +45 -0
  101. data/lib/webunit/ui/cui/testrunner.rb +50 -0
  102. data/lib/webunit/utils.rb +68 -0
  103. data/lib/webunit/webunit.rb +28 -0
  104. data/test/dev/action.rb +83 -0
  105. data/test/dev/forms.rb +104 -0
  106. data/test/dev/forms2.rb +104 -0
  107. data/test/dev/parser.rb +17 -0
  108. data/test/dev/scripts/dump.rb +24 -0
  109. data/test/dev/scripts/makedist.rb +62 -0
  110. data/test/dev/scripts/uri.rb +41 -0
  111. data/test/dev/scripts/uri/common.rb +432 -0
  112. data/test/dev/scripts/uri/ftp.rb +149 -0
  113. data/test/dev/scripts/uri/generic.rb +1106 -0
  114. data/test/dev/scripts/uri/http.rb +76 -0
  115. data/test/dev/scripts/uri/https.rb +26 -0
  116. data/test/dev/scripts/uri/ldap.rb +238 -0
  117. data/test/dev/scripts/uri/mailto.rb +260 -0
  118. data/test/dev/scripts/urireg.rb +174 -0
  119. data/test/dev/simpledispatcher.rb +156 -0
  120. data/test/dev/test.action.rb +146 -0
  121. data/test/dev/test.formreader.rb +463 -0
  122. data/test/dev/test.simpledispatcher.rb +186 -0
  123. data/test/dev/webunit/conv/digit-0.rb +21 -0
  124. data/test/dev/webunit/conv/digit-1.rb +17 -0
  125. data/test/dev/webunit/conv/digit.rb +23 -0
  126. data/test/dev/webunit/conv/test_digit-0.rb +16 -0
  127. data/test/dev/webunit/conv/test_digit-1.rb +19 -0
  128. data/test/dev/webunit/conv/test_digit.rb +26 -0
  129. data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
  130. data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
  131. data/test/dev/webunit/conv/test_digit_view.rb +134 -0
  132. data/test/installation/htdocs/cgi_test.rb +296 -0
  133. data/test/installation/htdocs/test_install.rb +4 -0
  134. data/test/installation/runwebtest.rb +5 -0
  135. data/test/installation/test_cookie.rb +128 -0
  136. data/test/installation/test_form.rb +47 -0
  137. data/test/installation/test_multipart.rb +51 -0
  138. data/test/installation/test_request.rb +24 -0
  139. data/test/installation/test_response.rb +35 -0
  140. data/test/unit/htdocs/cookie.rb +32 -0
  141. data/test/unit/htdocs/multipart.rb +28 -0
  142. data/test/unit/htdocs/redirect.rb +12 -0
  143. data/test/unit/htdocs/simple.rb +13 -0
  144. data/test/unit/htdocs/stock.rb +33 -0
  145. data/test/unit/test_assert.rb +162 -0
  146. data/test/unit/test_cookie.rb +114 -0
  147. data/test/unit/test_domwalker.rb +77 -0
  148. data/test/unit/test_form.rb +42 -0
  149. data/test/unit/test_frame.rb +40 -0
  150. data/test/unit/test_htmlelem.rb +74 -0
  151. data/test/unit/test_image.rb +45 -0
  152. data/test/unit/test_jscript.rb +57 -0
  153. data/test/unit/test_link.rb +85 -0
  154. data/test/unit/test_multipart.rb +51 -0
  155. data/test/unit/test_params.rb +210 -0
  156. data/test/unit/test_parser.rb +53 -0
  157. data/test/unit/test_response.rb +150 -0
  158. data/test/unit/test_table.rb +70 -0
  159. data/test/unit/test_utils.rb +106 -0
  160. data/test/unit/test_webunit.rb +28 -0
  161. data/test/web/mod_ruby_stub.rb +39 -0
  162. data/test/web/test.assertinclude.rb +109 -0
  163. data/test/web/test.buffer.rb +182 -0
  164. data/test/web/test.code.loader.rb +78 -0
  165. data/test/web/test.config.rb +31 -0
  166. data/test/web/test.error.handling.rb +91 -0
  167. data/test/web/test.formreader-2.0.rb +352 -0
  168. data/test/web/test.load.rb +125 -0
  169. data/test/web/test.mime-type.rb +23 -0
  170. data/test/web/test.narf.cgi.rb +106 -0
  171. data/test/web/test.phprb.rb +239 -0
  172. data/test/web/test.request.rb +368 -0
  173. data/test/web/test.response.rb +637 -0
  174. data/test/web/test.ruby-web.rb +10 -0
  175. data/test/web/test.session.rb +50 -0
  176. data/test/web/test.shim.cgi.rb +96 -0
  177. data/test/web/test.tagparser.rb +65 -0
  178. data/test/web/test.template2.rb +297 -0
  179. data/test/web/test.testing2.rb +318 -0
  180. data/test/web/test.upload.rb +45 -0
  181. data/test/web/test.validate.rb +46 -0
  182. data/test/web/test.web.test.rb +495 -0
  183. data/test/wiki/test.history.rb +297 -0
  184. data/test/wiki/test.illustration_page.rb +287 -0
  185. data/test/wiki/test.linker.rb +197 -0
  186. data/test/wiki/test.tarpit.rb +56 -0
  187. data/test/wiki/test.wiki.rb +300 -0
  188. data/test/wikitestroot/admin.rb +7 -0
  189. data/test/wikitestroot/wiki.rb +6 -0
  190. metadata +234 -0
@@ -0,0 +1,41 @@
1
+ module WebUnit ; end
2
+
3
+ def WebUnit.dispatch(args)
4
+ f_type = args.shift
5
+ case f_type
6
+ when '-fr'
7
+ ['AVAILABLE_FRAMEWORKS', %w(RubyUnit runit/testcase)]
8
+ when '-ft'
9
+ ['AVAILABLE_FRAMEWORKS', %w(Test::Unit test/unit/testcase)]
10
+ when '-xr'
11
+ ['AVAILABLE_XMLPARSERS', %w(REXML rexml/document)]
12
+ when '-xn'
13
+ ['AVAILABLE_XMLPARSERS', %w(NQXML nqxml/treeparser)]
14
+ else
15
+ args.unshift(f_type)
16
+ nil
17
+ end
18
+ end
19
+
20
+ def WebUnit.runtest(args)
21
+ if args.size > 0
22
+ while res = dispatch(args)
23
+ next if WebUnit.const_defined?(res[0])
24
+ WebUnit.const_set(res[0], [res[1]])
25
+ end
26
+ require 'webunit/ui/cui/testrunner'
27
+ test_runner = WebUnit::UI::CUI::TestRunner.new
28
+ args.each {|f| require f}
29
+ test_runner.run
30
+ else
31
+ puts "#{File.basename($0)} [-fr|-ft|-xr|-xn] testfile1 [, testfile2, ...]"
32
+ puts "\t-fr : use RubyUnit as Testing Framework"
33
+ puts "\t-ft : use Test::Unit as Testing Framework(default)"
34
+ puts "\t-xr : use REXML as XML parser(default)"
35
+ puts "\t-xn : use NQXML as XML parser"
36
+ end
37
+ end
38
+
39
+ if $0 == __FILE__
40
+ WebUnit.runtest(ARGV)
41
+ end
@@ -0,0 +1,148 @@
1
+ =begin
2
+ = WebUnit::Table/TableRow/TableCell/NilTableCell
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: table.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
5
+ =end
6
+
7
+ module WebUnit
8
+
9
+ class Table < HtmlElem
10
+
11
+ attr_reader :rows
12
+
13
+ def initialize( ah )
14
+ super( 'table', ah )
15
+ @rows = []
16
+ end
17
+
18
+ def add_row( ah )
19
+ @rows.push( TableRow::new( ah ) )
20
+ end
21
+
22
+ def add_cell( cell )
23
+ p = @rows.last.size + 1
24
+ if @rows.size > 1 && @rows[-2].at(p) && @rows[-2].at(p).rs > 1 then
25
+ @rows.last.add( @rows[-2].at(p) )
26
+ @rows[-2].at(p).rs -= 1
27
+ end
28
+ @rows.last.add( cell )
29
+ while cell.cs > 1 do
30
+ @rows.last.add( cell )
31
+ cell.cs -= 1
32
+ end
33
+ end
34
+
35
+ =begin
36
+ --- Table#at(r,c=nil)
37
+ return a TableCell, when two arguments(row,col) specified.
38
+ return a TableRow, when a argument(row) specified.
39
+ r and c is both beginning from 1.
40
+ =end
41
+
42
+ def at( r, c=nil )
43
+ if r < 1
44
+ raise ArgumentError
45
+ end
46
+ if c == nil
47
+ if @rows == [] || @rows.size < r
48
+ raise
49
+ end
50
+ @rows[r-1]
51
+ else
52
+ if c < 1
53
+ raise ArgumentError
54
+ end
55
+ if @rows == [] || @rows.size < r || @rows[r-1].size < c
56
+ NilTableCell::new
57
+ else
58
+ @rows[r-1].at(c)
59
+ end
60
+ end
61
+ end
62
+
63
+ =begin
64
+ --- Table#row_index( data, col=1 )
65
+ =end
66
+
67
+ def row_index( data, col=1 )
68
+ row = nil
69
+ (1..@rows.size).each do |row|
70
+ break unless self.at(row,col).search( data ) == []
71
+ end
72
+ row
73
+ end
74
+
75
+ =begin
76
+ --- Table#col_index( data, row=1 )
77
+ =end
78
+ def col_index( data, row=1 )
79
+ col = nil
80
+ (1..(self.at(row).size)).each do |col|
81
+ break unless self.at(row,col).search( data ) == []
82
+ end
83
+ col
84
+ end
85
+
86
+ end
87
+
88
+ class TableRow < HtmlElem
89
+
90
+ def initialize( ah )
91
+ super( 'tr', ah )
92
+ @cols = []
93
+ end
94
+
95
+ =begin
96
+ --- TableRow#size
97
+ return column number.
98
+ =end
99
+
100
+ def size
101
+ @cols.size
102
+ end
103
+
104
+ def add( col )
105
+ @cols << col
106
+ end
107
+
108
+ =begin
109
+ --- TableRow#at( c )
110
+ return TableCell, pointed by ((|c|)).
111
+ c is beginning from 1.
112
+ =end
113
+
114
+ def at( c )
115
+ @cols[c-1]
116
+ end
117
+
118
+ end
119
+
120
+ class TableCell < HtmlElem
121
+
122
+ attr_reader :data, :colspan, :rowspan
123
+
124
+ attr_accessor :cs, :rs
125
+
126
+ def initialize( tag, ah )
127
+ super
128
+ @colspan = ah['colspan']
129
+ @rowspan = ah['rowspan']
130
+ @cs = @colspan.to_i || 1
131
+ @rs = @rowspan.to_i || 1
132
+ end
133
+
134
+ end
135
+
136
+ class NilTableCell < TableCell
137
+
138
+ def initialize
139
+ super( 'dummy', {} )
140
+ end
141
+
142
+ def data
143
+ nil
144
+ end
145
+
146
+ end
147
+
148
+ end
@@ -0,0 +1,45 @@
1
+ =begin
2
+ = WebUnit::TestCase
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: testcase.rb,v 1.2 2004/02/11 04:26:38 yuichi Exp $
5
+ =end
6
+
7
+ require 'webunit/converter'
8
+
9
+ module WebUnit
10
+
11
+ class TestCase
12
+
13
+ include WebUnit
14
+ include Utils
15
+
16
+ def initialize( method, name=self.class.name )
17
+ case USING_FRAMEWORK
18
+ when 'Test::Unit'
19
+ super(method)
20
+ when 'RubyUnit'
21
+ super
22
+ else
23
+ super
24
+ # raise??
25
+ end
26
+ @urlbase = ENV['URLBASE'] ? ENV['URLBASE'] : 'http://localhost/'
27
+ @urlbase = orthop_url( @urlbase )
28
+ @urlbase << '/' unless @urlbase =~ %r!/$!
29
+ $stderr.puts "URLBASE is #{@urlbase}" if $DEBUG
30
+ end
31
+
32
+ def setup
33
+ $URLBASE = @urlbase
34
+ Response::reset
35
+ @cookies_kept = Cookies::instance.cookies
36
+ end
37
+
38
+ def teardown
39
+ Response::reset
40
+ Cookies::instance.cookies = @cookies_kept
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,50 @@
1
+ require 'webunit/converter'
2
+
3
+ module WebUnit
4
+ module UI
5
+ module CUI
6
+ class TestRunner
7
+
8
+ def initialize(quiet_mode=true)
9
+ case USING_FRAMEWORK
10
+ when 'Test::Unit'
11
+ require 'test/unit/ui/console/testrunner'
12
+ @runner = Test::Unit::UI::Console::TestRunner
13
+ when 'RubyUnit'
14
+ require 'runit/cui/testrunner'
15
+ @runner = RUNIT::CUI::TestRunner.new
16
+ end
17
+ quiet_mode(quiet_mode)
18
+ end
19
+
20
+ def quiet_mode(boolean)
21
+ case USING_FRAMEWORK
22
+ when 'RubyUnit'
23
+ @runner.class.quiet_mode = boolean
24
+ end
25
+ end
26
+
27
+ def all_suite
28
+ case USING_FRAMEWORK
29
+ when 'Test::Unit'
30
+ suite_name = $0.sub(/\.rb$/, '')
31
+ suite = TestSuite.new(suite_name)
32
+ test_classes = []
33
+ ObjectSpace.each_object(Class) do |klass|
34
+ test_classes << klass if TestCase > klass
35
+ end
36
+ test_classes.each {|klass| suite << klass.suite}
37
+ suite
38
+ when 'RubyUnit'
39
+ TestCase.all_suite
40
+ end
41
+ end
42
+
43
+ def run(suite=all_suite)
44
+ @runner.run(suite)
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,68 @@
1
+ =begin
2
+ = WebUnit::Utils
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: utils.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
5
+
6
+ =end
7
+
8
+ module WebUnit
9
+
10
+ module Utils
11
+
12
+ =begin
13
+ --- Utils#parse_url(url)
14
+ return an Array of protocol, hostname, port, and path.
15
+
16
+ =end
17
+
18
+ def parse_url( url )
19
+ if url =~ %r!^([a-z]+)://([-0-9A-Aa-z_.]+):?([0-9]*)(/.*)?$!
20
+ [ $1, $2, $3 == "" ? 80 : $3.to_i, $4 ? $4 : '' ]
21
+ elsif url =~ %r!^file:(/.*)$!
22
+ [ 'file', nil, nil, $1 ]
23
+ else
24
+ [ nil, nil, nil, url ]
25
+ end
26
+ end
27
+
28
+ =begin
29
+ --- Utils#orthop_url(url)
30
+ return url, is orthopped by Utils#parse_url.
31
+
32
+ =end
33
+
34
+ def orthop_url( url )
35
+ prot, host, port, path = parse_url url
36
+ path.gsub!( %r![^/]*/\.\./!, '/' )
37
+ path.gsub!( %r!/\.*/!, '/' )
38
+ "#{prot}://#{host}:#{port}#{path}"
39
+ end
40
+
41
+ =begin
42
+ --- Utils#complete_url(url,base)
43
+ return url, is completed with ((|base||).
44
+ =end
45
+
46
+ def complete_url( url, base )
47
+ if base
48
+ prot,host,port,path = parse_url( base )
49
+ prefix = prot + "://" + host + ":" + port.to_s
50
+ case url
51
+ when nil then
52
+ url = base.sub( /\?.*/, '' )
53
+ when %r!^http://! then
54
+ url
55
+ when %r!^/! then
56
+ url = prefix + url
57
+ else
58
+ url = prefix + File::dirname( path ) + "/" + url
59
+ end
60
+ orthop_url( url )
61
+ else
62
+ url
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,28 @@
1
+ =begin
2
+ = WebUnit
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: webunit.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
5
+ =end
6
+
7
+ require 'webunit/converter'
8
+ require 'webunit/utils'
9
+ require 'webunit/exception'
10
+ require 'webunit/assert'
11
+ require 'webunit/htmlelem'
12
+ require 'webunit/link'
13
+ require 'webunit/frame'
14
+ require 'webunit/image'
15
+ require 'webunit/jscript'
16
+ require 'webunit/testcase'
17
+ require 'webunit/cookie'
18
+ require 'webunit/params'
19
+ require 'webunit/form'
20
+ require 'webunit/parser'
21
+ require 'webunit/response'
22
+ require 'webunit/table'
23
+ begin
24
+ require 'webunit/domwalker'
25
+ rescue LoadError
26
+ end
27
+
28
+ WebUnit::TestCase::new( 'nil?' ).setup
@@ -0,0 +1,83 @@
1
+ module Web
2
+ class Action #:nodoc:
3
+ attr_reader :patterns
4
+ def initialize patterns={}, &function
5
+ @patterns = patterns
6
+ @function = function || lambda{}
7
+ Thread.current[:actions] ||= [ ]
8
+ Thread.current[:actions].push self
9
+ end
10
+
11
+ def run cgi=Web::CGI.create
12
+ @function.call( cgi )
13
+ end
14
+
15
+ def old_applies? cgi
16
+ matches = false
17
+ patterns.each{ |key, pattern|
18
+ cgi.multiple_params[key].each{ |value|
19
+ if pattern.kind_of? Regexp
20
+ matches = true if value =~ pattern
21
+ else
22
+ matches = true if value == pattern
23
+ end
24
+ }
25
+ }
26
+ matches
27
+ end
28
+
29
+ def applies? cgi
30
+ relevance = 0;
31
+ unmatched_terms = patterns.size;
32
+ patterns.each{ |key, pattern|
33
+ if pattern.kind_of? Regexp
34
+ if cgi.multiple_params[key].find{ |value| value =~ pattern }
35
+ unmatched_terms = unmatched_terms - 1
36
+ relevance += 1
37
+ end
38
+ else
39
+ if cgi.multiple_params[key].find{ |value| value == pattern }
40
+ unmatched_terms = unmatched_terms - 1
41
+ relevance += 10
42
+ end
43
+ end
44
+ }
45
+ if unmatched_terms == 0
46
+ relevance
47
+ else
48
+ false
49
+ end
50
+ end
51
+
52
+ def Action.pick( cgi )
53
+ Thread.current[:actions] ||= [ ]
54
+ Thread.current[:actions].find_all do |action|
55
+ action.applies? cgi
56
+ end.sort do |a, b|
57
+ a.applies?(cgi) <=> b.applies?(cgi)
58
+ end.last || Thread.current[:actions].find do |action|
59
+ action.patterns == {}
60
+ end || blank_action
61
+
62
+ # (raise Web::Exception.new( "Could not locate action for #{ cgi.multiple_params.inspect }" ))
63
+ end
64
+
65
+ def Action.blank_action
66
+ blank = Action.new
67
+ Thread::current[:actions].delete blank
68
+ blank
69
+ end
70
+
71
+ def Action.run options={}
72
+ if options.kind_of? Hash
73
+ Web.process(options) do |cgi|
74
+ pick(cgi).run(cgi)
75
+ end
76
+ elsif options.kind_of? Web::CGI
77
+ pick(options).run(options)
78
+ options.close
79
+ options
80
+ end
81
+ end
82
+ end
83
+ end