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,76 @@
1
+ #
2
+ # $Id: http.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ require 'uri/generic'
9
+
10
+ module URI
11
+
12
+ =begin
13
+
14
+ == URI::HTTP
15
+
16
+ === Super Class
17
+
18
+ ((<URI::Generic>))
19
+
20
+ =end
21
+
22
+ # RFC1738 section 3.3.
23
+ class HTTP < Generic
24
+ DEFAULT_PORT = 80
25
+
26
+ COMPONENT = [
27
+ :scheme,
28
+ :userinfo, :host, :port,
29
+ :path,
30
+ :query,
31
+ :fragment
32
+ ].freeze
33
+
34
+ =begin
35
+
36
+ === Class Methods
37
+
38
+ --- URI::HTTP::build
39
+ Create a new URI::HTTP object from components of URI::HTTP with
40
+ check. It is scheme, userinfo, host, port, path, query and
41
+ fragment. It provided by an Array of a Hash.
42
+
43
+ --- URI::HTTP::new
44
+ Create a new URI::HTTP object from ``generic'' components with no
45
+ check.
46
+
47
+ =end
48
+
49
+ def self.build(args)
50
+ tmp = Util::make_components_hash(self, args)
51
+ return super(tmp)
52
+ end
53
+
54
+ def initialize(*arg)
55
+ super(*arg)
56
+ end
57
+
58
+ =begin
59
+
60
+ === Instance Methods
61
+
62
+ --- URI::HTTP#request_uri
63
+
64
+ =end
65
+ def request_uri
66
+ r = path_query
67
+ if r[0] != ?/
68
+ r = '/' + r
69
+ end
70
+
71
+ r
72
+ end
73
+ end # HTTP
74
+
75
+ @@schemes['HTTP'] = HTTP
76
+ end # URI
@@ -0,0 +1,26 @@
1
+ #
2
+ # $Id: https.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ require 'uri/http'
9
+
10
+ module URI
11
+
12
+ =begin
13
+
14
+ == URI::HTTPS
15
+
16
+ === Super Class
17
+
18
+ ((<URI::HTTP>))
19
+
20
+ =end
21
+
22
+ class HTTPS < HTTP
23
+ DEFAULT_PORT = 443
24
+ end
25
+ @@schemes['HTTPS'] = HTTPS
26
+ end # URI
@@ -0,0 +1,238 @@
1
+ #
2
+ # $Id: ldap.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+
5
+ require 'uri/generic'
6
+
7
+ module URI
8
+
9
+ =begin
10
+
11
+ == URI::LDAP
12
+
13
+ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada.
14
+
15
+ Copyright (c) 2001 Takaaki Tateishi <ttate@jaist.ac.jp> and
16
+ akira yamada <akira@ruby-lang.org>.
17
+ You can redistribute it and/or modify it under the same term as Ruby.
18
+
19
+ === Super Class
20
+
21
+ ((<URI::Generic>))
22
+
23
+ =end
24
+
25
+ # LDAP URI SCHEMA (described in RFC2255)
26
+ # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
27
+ class LDAP < Generic
28
+
29
+ DEFAULT_PORT = 389
30
+
31
+ COMPONENT = [
32
+ :scheme,
33
+ :host, :port,
34
+ :dn,
35
+ :attributes,
36
+ :scope,
37
+ :filter,
38
+ :extensions,
39
+ ].freeze
40
+
41
+ SCOPE = [
42
+ SCOPE_ONE = 'one',
43
+ SCOPE_SUB = 'sub',
44
+ SCOPE_BASE = 'base',
45
+ ].freeze
46
+
47
+ =begin
48
+
49
+ === Class Methods
50
+
51
+ --- URI::LDAP::build
52
+
53
+ --- URI::LDAP::new
54
+
55
+ =end
56
+
57
+ def self.build(args)
58
+ tmp = Util::make_components_hash(self, args)
59
+
60
+ if tmp[:dn]
61
+ tmp[:path] = tmp[:dn]
62
+ end
63
+
64
+ query = []
65
+ [:extensions, :filter, :scope, :attributes].collect do |x|
66
+ next if !tmp[x] && query.size == 0
67
+ query.unshift(tmp[x])
68
+ end
69
+
70
+ tmp[:query] = query.join('?')
71
+
72
+ return super(tmp)
73
+ end
74
+
75
+ def initialize(*arg)
76
+ super(*arg)
77
+
78
+ if @fragment
79
+ raise InvalidURIError, 'bad LDAP URL'
80
+ end
81
+
82
+ parse_dn
83
+ parse_query
84
+ end
85
+
86
+ def parse_dn
87
+ @dn = @path[1..-1]
88
+ end
89
+ private :parse_dn
90
+
91
+ def parse_query
92
+ @attributes = nil
93
+ @scope = nil
94
+ @filter = nil
95
+ @extensions = nil
96
+
97
+ if @query
98
+ attrs, scope, filter, extensions = @query.split('?')
99
+
100
+ @attributes = attrs if attrs && attrs.size > 0
101
+ @scope = scope if scope && scope.size > 0
102
+ @filter = filter if filter && filter.size > 0
103
+ @extensions = extensions if extensions && extensions.size > 0
104
+ end
105
+ end
106
+ private :parse_query
107
+
108
+ def build_path_query
109
+ @path = '/' + @dn
110
+
111
+ query = []
112
+ [@extensions, @filter, @scope, @attributes].each do |x|
113
+ next if !x && query.size == 0
114
+ query.unshift(x)
115
+ end
116
+ @query = query.join('?')
117
+ end
118
+ private :build_path_query
119
+
120
+ =begin
121
+
122
+ === Instance Methods
123
+
124
+ --- URI::LDAP#dn
125
+
126
+ --- URI::LDAP#dn=(v)
127
+
128
+ =end
129
+
130
+ def dn
131
+ @dn
132
+ end
133
+
134
+ def set_dn(val)
135
+ @dn = val
136
+ build_path_query
137
+ end
138
+ protected :set_dn
139
+
140
+ def dn=(val)
141
+ set_dn(val)
142
+ end
143
+
144
+ =begin
145
+
146
+ --- URI::LDAP#attributes
147
+
148
+ --- URI::LDAP#attributes=(v)
149
+
150
+ =end
151
+
152
+ def attributes
153
+ @attributes
154
+ end
155
+
156
+ def set_attributes(val)
157
+ @attributes = val
158
+ build_path_query
159
+ end
160
+ protected :set_attributes
161
+
162
+ def attributes=(val)
163
+ set_attributes(val)
164
+ end
165
+
166
+ =begin
167
+
168
+ --- URI::LDAP#scope
169
+
170
+ --- URI::LDAP#scope=(v)
171
+
172
+ =end
173
+
174
+ def scope
175
+ @scope
176
+ end
177
+
178
+ def set_scope(val)
179
+ @scope = val
180
+ build_path_query
181
+ end
182
+ protected :set_scope
183
+
184
+ def scope=(val)
185
+ set_scope(val)
186
+ end
187
+
188
+ =begin
189
+
190
+ --- URI::LDAP#filter
191
+
192
+ --- URI::LDAP#filter=(v)
193
+
194
+ =end
195
+
196
+ def filter
197
+ @filter
198
+ end
199
+
200
+ def set_filter(val)
201
+ @filter = val
202
+ build_path_query
203
+ end
204
+ protected :set_filter
205
+
206
+ def filter=(val)
207
+ set_filter(val)
208
+ end
209
+
210
+ =begin
211
+
212
+ --- URI::LDAP#extensions
213
+
214
+ --- URI::LDAP#extensions=(v)
215
+
216
+ =end
217
+
218
+ def extensions
219
+ @extensions
220
+ end
221
+
222
+ def set_extensions(val)
223
+ @extensions = val
224
+ build_path_query
225
+ end
226
+ protected :set_extensions
227
+
228
+ def extensions=(val)
229
+ set_extensions(val)
230
+ end
231
+ end
232
+
233
+ def hierarchical?
234
+ false
235
+ end
236
+
237
+ @@schemes['LDAP'] = LDAP
238
+ end
@@ -0,0 +1,260 @@
1
+ #
2
+ # $Id: mailto.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ require 'uri/generic'
9
+
10
+ module URI
11
+
12
+ =begin
13
+
14
+ == URI::MailTo
15
+
16
+ === Super Class
17
+
18
+ ((<URI::Generic>))
19
+
20
+ =end
21
+
22
+ # RFC2368, The mailto URL scheme
23
+ class MailTo < Generic
24
+ include REGEXP
25
+
26
+ DEFAULT_PORT = nil
27
+
28
+ COMPONENT = [
29
+ :scheme,
30
+ :to, :headers
31
+ ].freeze
32
+
33
+ # "hname" and "hvalue" are encodings of an RFC 822 header name and
34
+ # value, respectively. As with "to", all URL reserved characters must
35
+ # be encoded.
36
+ #
37
+ # "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
38
+ # consists of zero or more comma-separated mail addresses, possibly
39
+ # including "phrase" and "comment" components. Note that all URL
40
+ # reserved characters in "to" must be encoded: in particular,
41
+ # parentheses, commas, and the percent sign ("%"), which commonly occur
42
+ # in the "mailbox" syntax.
43
+ #
44
+ # Within mailto URLs, the characters "?", "=", "&" are reserved.
45
+
46
+ # hname = *urlc
47
+ # hvalue = *urlc
48
+ # header = hname "=" hvalue
49
+ HEADER_REGEXP = "(?:[^?=&]*=[^?=&]*)".freeze
50
+ # headers = "?" header *( "&" header )
51
+ # to = #mailbox
52
+ # mailtoURL = "mailto:" [ to ] [ headers ]
53
+ MAILBOX_REGEXP = "(?:[^(),%?=&]|#{PATTERN::ESCAPED})".freeze
54
+ MAILTO_REGEXP = Regexp.new("
55
+ \\A
56
+ (#{MAILBOX_REGEXP}*?) (?# 1: to)
57
+ (?:
58
+ \\?
59
+ (#{HEADER_REGEXP}(?:\\&#{HEADER_REGEXP})*) (?# 2: headers)
60
+ )?
61
+ \\z
62
+ ", Regexp::EXTENDED, 'N').freeze
63
+
64
+ =begin
65
+
66
+ === Class Methods
67
+
68
+ --- URI::MailTo::build
69
+ Create a new URI::MailTo object from components of URI::MailTo
70
+ with check. It is to and headers. It provided by an Array of a
71
+ Hash. You can provide headers as an String like
72
+ "subject=subscribe&cc=addr" or an Array like [["subject",
73
+ "subscribe"], ["cc", "addr"]]
74
+
75
+ --- URI::MailTo::new
76
+ Create a new URI::MailTo object from ``generic'' components with
77
+ no check. Because, this method is usually called from URI::parse
78
+ and the method checks validity of each components.
79
+
80
+ =end
81
+
82
+ def self.build(args)
83
+ tmp = Util::make_components_hash(self, args)
84
+
85
+ if tmp[:to]
86
+ tmp[:opaque] = tmp[:to]
87
+ else
88
+ tmp[:opaque] = ''
89
+ end
90
+
91
+ if tmp[:headers]
92
+ tmp[:opaque] << '?'
93
+
94
+ if tmp[:headers].kind_of?(Array)
95
+ tmp[:opaque] << tmp[:headers].collect { |x|
96
+ if x.kind_of?(Array)
97
+ x[0] + '=' + x[1..-1].to_s
98
+ else
99
+ x.to_s
100
+ end
101
+ }.join('&')
102
+
103
+ elsif tmp[:headers].kind_of?(Hash)
104
+ tmp[:opaque] << tmp[:headers].collect { |h,v|
105
+ h + '=' + v
106
+ }.join('&')
107
+
108
+ else
109
+ tmp[:opaque] << tmp[:headers].to_s
110
+ end
111
+ end
112
+
113
+ return super(tmp)
114
+ end
115
+
116
+ def initialize(*arg)
117
+ super(*arg)
118
+
119
+ @to = nil
120
+ @headers = []
121
+
122
+ if MAILTO_REGEXP =~ @opaque
123
+ if arg[-1]
124
+ self.to = $1
125
+ self.headers = $2
126
+ else
127
+ set_to($1)
128
+ set_headers($2)
129
+ end
130
+ elsif arg[-1]
131
+ raise InvalidComponentError,
132
+ "unrecognised opaque part for mailtoURL: #{@opaque}"
133
+ end
134
+ end
135
+ attr_reader :to
136
+ attr_reader :headers
137
+
138
+ =begin
139
+
140
+ === Instance Methods
141
+
142
+ --- URI::MailTo#to
143
+
144
+ --- URI::MailTo#to=(v)
145
+
146
+ =end
147
+
148
+ #
149
+ # methods for to
150
+ #
151
+
152
+ def check_to(v)
153
+ return true unless v
154
+ return true if v.size == 0
155
+
156
+ if OPAQUE !~ v || /\A#{MAILBOX_REGEXP}*\z/o !~ v
157
+ raise InvalidComponentError,
158
+ "bad component(expected opaque component): #{v}"
159
+ end
160
+
161
+ return true
162
+ end
163
+ private :check_to
164
+
165
+ def set_to(v)
166
+ @to = v
167
+ end
168
+ protected :set_to
169
+
170
+ def to=(v)
171
+ check_to(v)
172
+ set_to(v)
173
+ end
174
+
175
+ =begin
176
+
177
+ --- URI::MailTo#headers
178
+
179
+ --- URI::MailTo#headers=(v)
180
+
181
+ =end
182
+
183
+ #
184
+ # methods for headers
185
+ #
186
+
187
+ def check_headers(v)
188
+ return true unless v
189
+ return true if v.size == 0
190
+
191
+ if OPAQUE !~ v ||
192
+ /\A(#{HEADER_REGEXP}(?:\&#{HEADER_REGEXP})*)\z/o !~ v
193
+ raise InvalidComponentError,
194
+ "bad component(expected opaque component): #{v}"
195
+ end
196
+
197
+ return true
198
+ end
199
+ private :check_headers
200
+
201
+ def set_headers(v)
202
+ @headers = []
203
+ if v
204
+ v.scan(HEADER_REGEXP) do |x|
205
+ @headers << x.split(/=/o, 2)
206
+ end
207
+ end
208
+ end
209
+ protected :set_headers
210
+
211
+ def headers=(v)
212
+ check_headers(v)
213
+ set_headers(v)
214
+ end
215
+
216
+ def to_str
217
+ @scheme + ':' +
218
+ if @to
219
+ @to
220
+ else
221
+ ''
222
+ end +
223
+ if @headers.size > 0
224
+ '?' + @headers.collect{|x| x.join('=')}.join('&')
225
+ else
226
+ ''
227
+ end
228
+ end
229
+
230
+ =begin
231
+
232
+ --- URI::MailTo#to_mailtext
233
+
234
+ =end
235
+ def to_mailtext
236
+ to = URI::unescape(@to)
237
+ head = ''
238
+ body = ''
239
+ @headers.each do |x|
240
+ case x[0]
241
+ when 'body'
242
+ body = URI::unescape(x[1])
243
+ when 'to'
244
+ to << ', ' + URI::unescape(x[1])
245
+ else
246
+ head << URI::unescape(x[0]).capitalize + ': ' +
247
+ URI::unescape(x[1]) + "\n"
248
+ end
249
+ end
250
+
251
+ return "To: #{to}
252
+ #{head}
253
+ #{body}
254
+ "
255
+ end
256
+ alias to_rfc822text to_mailtext
257
+ end # MailTo
258
+
259
+ @@schemes['MAILTO'] = MailTo
260
+ end # URI