rubysl-uri 1.0.0 → 2.0.0

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.
@@ -1,9 +1,10 @@
1
- #
2
1
  # = uri/http.rb
3
2
  #
4
3
  # Author:: Akira Yamada <akira@ruby-lang.org>
5
4
  # License:: You can redistribute it and/or modify it under the same term as Ruby.
6
- # Revision:: $Id: http.rb 11747 2007-02-15 02:41:45Z knu $
5
+ # Revision:: $Id$
6
+ #
7
+ # See URI for general documentation
7
8
  #
8
9
 
9
10
  require 'uri/generic'
@@ -14,18 +15,20 @@ module URI
14
15
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
15
16
  #
16
17
  # Note that the Ruby URI library allows HTTP URLs containing usernames and
17
- # passwords. This is not legal as per the RFC, but used to be
18
- # supported in Internet Explorer 5 and 6, before the MS04-004 security
18
+ # passwords. This is not legal as per the RFC, but used to be
19
+ # supported in Internet Explorer 5 and 6, before the MS04-004 security
19
20
  # update. See <URL:http://support.microsoft.com/kb/834489>.
20
21
  #
21
22
  class HTTP < Generic
23
+ # A Default port of 80 for URI::HTTP
22
24
  DEFAULT_PORT = 80
23
25
 
26
+ # An Array of the available components for URI::HTTP
24
27
  COMPONENT = [
25
- :scheme,
26
- :userinfo, :host, :port,
27
- :path,
28
- :query,
28
+ :scheme,
29
+ :userinfo, :host, :port,
30
+ :path,
31
+ :query,
29
32
  :fragment
30
33
  ].freeze
31
34
 
@@ -37,21 +40,21 @@ module URI
37
40
  # The components accepted are userinfo, host, port, path, query and
38
41
  # fragment.
39
42
  #
40
- # The components should be provided either as an Array, or as a Hash
41
- # with keys formed by preceding the component names with a colon.
43
+ # The components should be provided either as an Array, or as a Hash
44
+ # with keys formed by preceding the component names with a colon.
42
45
  #
43
46
  # If an Array is used, the components must be passed in the order
44
47
  # [userinfo, host, port, path, query, fragment].
45
48
  #
46
49
  # Example:
47
50
  #
48
- # newuri = URI::HTTP.build({:host => 'www.example.com',
49
- # :path> => '/foo/bar'})
51
+ # newuri = URI::HTTP.build({:host => 'www.example.com',
52
+ # :path => '/foo/bar'})
50
53
  #
51
- # newuri = URI::HTTP.build([nil, "www.example.com", nil, "/path",
54
+ # newuri = URI::HTTP.build([nil, "www.example.com", nil, "/path",
52
55
  # "query", 'fragment'])
53
56
  #
54
- # Currently, if passed userinfo components this method generates
57
+ # Currently, if passed userinfo components this method generates
55
58
  # invalid HTTP URIs as per RFC 1738.
56
59
  #
57
60
  def self.build(args)
@@ -63,16 +66,19 @@ module URI
63
66
  # == Description
64
67
  #
65
68
  # Create a new URI::HTTP object from generic URI components as per
66
- # RFC 2396. No HTTP-specific syntax checking (as per RFC 1738) is
69
+ # RFC 2396. No HTTP-specific syntax checking (as per RFC 1738) is
67
70
  # performed.
68
71
  #
69
- # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
72
+ # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
70
73
  # +opaque+, +query+ and +fragment+, in that order.
71
74
  #
72
75
  # Example:
73
76
  #
74
- # uri = URI::HTTP.new(['http', nil, "www.example.com", nil, "/path",
75
- # "query", 'fragment'])
77
+ # uri = URI::HTTP.new('http', nil, "www.example.com", nil, "/path",
78
+ # "query", 'fragment')
79
+ #
80
+ #
81
+ # See also URI::Generic.new
76
82
  #
77
83
  def initialize(*arg)
78
84
  super(*arg)
@@ -88,7 +94,7 @@ module URI
88
94
  #
89
95
  def request_uri
90
96
  r = path_query
91
- if r[0] != ?/
97
+ if r && r[0] != ?/
92
98
  r = '/' + r
93
99
  end
94
100
 
@@ -1,9 +1,10 @@
1
- #
2
1
  # = uri/https.rb
3
2
  #
4
3
  # Author:: Akira Yamada <akira@ruby-lang.org>
5
4
  # License:: You can redistribute it and/or modify it under the same term as Ruby.
6
- # Revision:: $Id: https.rb 11747 2007-02-15 02:41:45Z knu $
5
+ # Revision:: $Id$
6
+ #
7
+ # See URI for general documentation
7
8
  #
8
9
 
9
10
  require 'uri/http'
@@ -14,6 +15,7 @@ module URI
14
15
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
15
16
  # see URI::HTTP.
16
17
  class HTTPS < HTTP
18
+ # A Default port of 443 for URI::HTTPS
17
19
  DEFAULT_PORT = 443
18
20
  end
19
21
  @@schemes['HTTPS'] = HTTPS
@@ -1,13 +1,14 @@
1
- #
2
1
  # = uri/ldap.rb
3
2
  #
4
- # Author::
3
+ # Author::
5
4
  # Takaaki Tateishi <ttate@jaist.ac.jp>
6
5
  # Akira Yamada <akira@ruby-lang.org>
7
- # License::
6
+ # License::
8
7
  # URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
9
8
  # You can redistribute it and/or modify it under the same term as Ruby.
10
- # Revision:: $Id: ldap.rb 11708 2007-02-12 23:01:19Z shyouhei $
9
+ # Revision:: $Id$
10
+ #
11
+ # See URI for general documentation
11
12
  #
12
13
 
13
14
  require 'uri/generic'
@@ -20,8 +21,10 @@ module URI
20
21
  #
21
22
  class LDAP < Generic
22
23
 
24
+ # A Default port of 389 for URI::LDAP
23
25
  DEFAULT_PORT = 389
24
-
26
+
27
+ # An Array of the available components for URI::LDAP
25
28
  COMPONENT = [
26
29
  :scheme,
27
30
  :host, :port,
@@ -32,12 +35,41 @@ module URI
32
35
  :extensions,
33
36
  ].freeze
34
37
 
38
+ # Scopes available for the starting point.
39
+ #
40
+ # * SCOPE_BASE - the Base DN
41
+ # * SCOPE_ONE - one level under the Base DN, not including the base DN and
42
+ # not including any entries under this.
43
+ # * SCOPE_SUB - subtress, all entries at all levels
44
+ #
35
45
  SCOPE = [
36
46
  SCOPE_ONE = 'one',
37
47
  SCOPE_SUB = 'sub',
38
48
  SCOPE_BASE = 'base',
39
49
  ].freeze
40
50
 
51
+ #
52
+ # == Description
53
+ #
54
+ # Create a new URI::LDAP object from components, with syntax checking.
55
+ #
56
+ # The components accepted are host, port, dn, attributes,
57
+ # scope, filter, and extensions.
58
+ #
59
+ # The components should be provided either as an Array, or as a Hash
60
+ # with keys formed by preceding the component names with a colon.
61
+ #
62
+ # If an Array is used, the components must be passed in the order
63
+ # [host, port, dn, attributes, scope, filter, extensions].
64
+ #
65
+ # Example:
66
+ #
67
+ # newuri = URI::LDAP.build({:host => 'ldap.example.com',
68
+ # :dn> => '/dc=example'})
69
+ #
70
+ # newuri = URI::LDAP.build(["ldap.example.com", nil,
71
+ # "/dc=example;dc=com", "query", nil, nil, nil])
72
+ #
41
73
  def self.build(args)
42
74
  tmp = Util::make_components_hash(self, args)
43
75
 
@@ -56,6 +88,23 @@ module URI
56
88
  return super(tmp)
57
89
  end
58
90
 
91
+ #
92
+ # == Description
93
+ #
94
+ # Create a new URI::LDAP object from generic URI components as per
95
+ # RFC 2396. No LDAP-specific syntax checking is performed.
96
+ #
97
+ # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
98
+ # +opaque+, +query+ and +fragment+, in that order.
99
+ #
100
+ # Example:
101
+ #
102
+ # uri = URI::LDAP.new("ldap", nil, "ldap.example.com", nil,
103
+ # "/dc=example;dc=com", "query", nil, nil, nil, nil)
104
+ #
105
+ #
106
+ # See also URI::Generic.new
107
+ #
59
108
  def initialize(*arg)
60
109
  super(*arg)
61
110
 
@@ -67,11 +116,14 @@ module URI
67
116
  parse_query
68
117
  end
69
118
 
119
+ # private method to cleanup +dn+ from using the +path+ component attribute
70
120
  def parse_dn
71
121
  @dn = @path[1..-1]
72
122
  end
73
123
  private :parse_dn
74
124
 
125
+ # private method to cleanup +attributes+, +scope+, +filter+ and +extensions+,
126
+ # from using the +query+ component attribute
75
127
  def parse_query
76
128
  @attributes = nil
77
129
  @scope = nil
@@ -89,6 +141,7 @@ module URI
89
141
  end
90
142
  private :parse_query
91
143
 
144
+ # private method to assemble +query+ from +attributes+, +scope+, +filter+ and +extensions+.
92
145
  def build_path_query
93
146
  @path = '/' + @dn
94
147
 
@@ -101,10 +154,12 @@ module URI
101
154
  end
102
155
  private :build_path_query
103
156
 
157
+ # returns dn.
104
158
  def dn
105
159
  @dn
106
160
  end
107
161
 
162
+ # private setter for dn +val+
108
163
  def set_dn(val)
109
164
  @dn = val
110
165
  build_path_query
@@ -112,15 +167,18 @@ module URI
112
167
  end
113
168
  protected :set_dn
114
169
 
170
+ # setter for dn +val+
115
171
  def dn=(val)
116
172
  set_dn(val)
117
173
  val
118
174
  end
119
175
 
176
+ # returns attributes.
120
177
  def attributes
121
178
  @attributes
122
179
  end
123
180
 
181
+ # private setter for attributes +val+
124
182
  def set_attributes(val)
125
183
  @attributes = val
126
184
  build_path_query
@@ -128,15 +186,18 @@ module URI
128
186
  end
129
187
  protected :set_attributes
130
188
 
189
+ # setter for attributes +val+
131
190
  def attributes=(val)
132
191
  set_attributes(val)
133
192
  val
134
193
  end
135
194
 
195
+ # returns scope.
136
196
  def scope
137
197
  @scope
138
198
  end
139
199
 
200
+ # private setter for scope +val+
140
201
  def set_scope(val)
141
202
  @scope = val
142
203
  build_path_query
@@ -144,15 +205,18 @@ module URI
144
205
  end
145
206
  protected :set_scope
146
207
 
208
+ # setter for scope +val+
147
209
  def scope=(val)
148
210
  set_scope(val)
149
211
  val
150
212
  end
151
213
 
214
+ # returns filter.
152
215
  def filter
153
216
  @filter
154
217
  end
155
218
 
219
+ # private setter for filter +val+
156
220
  def set_filter(val)
157
221
  @filter = val
158
222
  build_path_query
@@ -160,15 +224,18 @@ module URI
160
224
  end
161
225
  protected :set_filter
162
226
 
227
+ # setter for filter +val+
163
228
  def filter=(val)
164
229
  set_filter(val)
165
230
  val
166
231
  end
167
232
 
233
+ # returns extensions.
168
234
  def extensions
169
235
  @extensions
170
236
  end
171
237
 
238
+ # private setter for extensions +val+
172
239
  def set_extensions(val)
173
240
  @extensions = val
174
241
  build_path_query
@@ -176,11 +243,14 @@ module URI
176
243
  end
177
244
  protected :set_extensions
178
245
 
246
+ # setter for extensions +val+
179
247
  def extensions=(val)
180
248
  set_extensions(val)
181
249
  val
182
250
  end
183
251
 
252
+ # Checks if URI has a path
253
+ # For URI::LDAP this will return +false+
184
254
  def hierarchical?
185
255
  false
186
256
  end
@@ -1,3 +1,10 @@
1
+ # = uri/ldap.rb
2
+ #
3
+ # License:: You can redistribute it and/or modify it under the same term as Ruby.
4
+ #
5
+ # See URI for general documentation
6
+ #
7
+
1
8
  require 'uri/ldap'
2
9
 
3
10
  module URI
@@ -6,6 +13,7 @@ module URI
6
13
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
7
14
  # see URI::LDAP.
8
15
  class LDAPS < LDAP
16
+ # A Default port of 636 for URI::LDAPS
9
17
  DEFAULT_PORT = 636
10
18
  end
11
19
  @@schemes['LDAPS'] = LDAPS
@@ -1,9 +1,10 @@
1
- #
2
1
  # = uri/mailto.rb
3
2
  #
4
3
  # Author:: Akira Yamada <akira@ruby-lang.org>
5
4
  # License:: You can redistribute it and/or modify it under the same term as Ruby.
6
- # Revision:: $Id: mailto.rb 11747 2007-02-15 02:41:45Z knu $
5
+ # Revision:: $Id$
6
+ #
7
+ # See URI for general documentation
7
8
  #
8
9
 
9
10
  require 'uri/generic'
@@ -16,8 +17,10 @@ module URI
16
17
  class MailTo < Generic
17
18
  include REGEXP
18
19
 
20
+ # A Default port of nil for URI::MailTo
19
21
  DEFAULT_PORT = nil
20
22
 
23
+ # An Array of the available components for URI::MailTo
21
24
  COMPONENT = [ :scheme, :to, :headers ].freeze
22
25
 
23
26
  # :stopdoc:
@@ -38,7 +41,7 @@ module URI
38
41
  # hvalue = *urlc
39
42
  # header = hname "=" hvalue
40
43
  HEADER_PATTERN = "(?:[^?=&]*=[^?=&]*)".freeze
41
- HEADER_REGEXP = Regexp.new(HEADER_PATTERN, 'N').freeze
44
+ HEADER_REGEXP = Regexp.new(HEADER_PATTERN).freeze
42
45
  # headers = "?" header *( "&" header )
43
46
  # to = #mailbox
44
47
  # mailtoURL = "mailto:" [ to ] [ headers ]
@@ -55,7 +58,7 @@ module URI
55
58
  (#{PATTERN::FRAGMENT}) (?# 3: fragment)
56
59
  )?
57
60
  \\z
58
- ", Regexp::EXTENDED, 'N').freeze
61
+ ", Regexp::EXTENDED).freeze
59
62
  # :startdoc:
60
63
 
61
64
  #
@@ -68,20 +71,20 @@ module URI
68
71
  #
69
72
  # If a Hash is used, the keys are the component names preceded by colons.
70
73
  #
71
- # The headers can be supplied as a pre-encoded string, such as
74
+ # The headers can be supplied as a pre-encoded string, such as
72
75
  # "subject=subscribe&cc=address", or as an Array of Arrays like
73
76
  # [['subject', 'subscribe'], ['cc', 'address']]
74
77
  #
75
78
  # Examples:
76
- #
79
+ #
77
80
  # require 'uri'
78
- #
81
+ #
79
82
  # m1 = URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
80
83
  # puts m1.to_s -> mailto:joe@example.com?subject=Ruby
81
- #
84
+ #
82
85
  # m2 = URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
83
86
  # puts m2.to_s -> mailto:john@example.com?Subject=Ruby&Cc=jack@example.com
84
- #
87
+ #
85
88
  # m3 = URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
86
89
  # puts m3.to_s -> mailto:listman@example.com?subject=subscribe
87
90
  #
@@ -100,7 +103,7 @@ module URI
100
103
  if tmp[:headers].kind_of?(Array)
101
104
  tmp[:opaque] << tmp[:headers].collect { |x|
102
105
  if x.kind_of?(Array)
103
- x[0] + '=' + x[1..-1].to_s
106
+ x[0] + '=' + x[1..-1].join
104
107
  else
105
108
  x.to_s
106
109
  end
@@ -135,7 +138,7 @@ module URI
135
138
  @headers = []
136
139
 
137
140
  if MAILTO_REGEXP =~ @opaque
138
- if arg[-1]
141
+ if arg[-1]
139
142
  self.to = $1
140
143
  self.headers = $2
141
144
  else
@@ -155,11 +158,14 @@ module URI
155
158
  # E-mail headers set by the URL, as an Array of Arrays
156
159
  attr_reader :headers
157
160
 
161
+ # check the to +v+ component against either
162
+ # * URI::Parser Regexp for :OPAQUE
163
+ # * MAILBOX_PATTERN
158
164
  def check_to(v)
159
165
  return true unless v
160
166
  return true if v.size == 0
161
167
 
162
- if OPAQUE !~ v || /\A#{MAILBOX_PATTERN}*\z/o !~ v
168
+ if parser.regexp[:OPAQUE] !~ v || /\A#{MAILBOX_PATTERN}*\z/o !~ v
163
169
  raise InvalidComponentError,
164
170
  "bad component(expected opaque component): #{v}"
165
171
  end
@@ -168,22 +174,27 @@ module URI
168
174
  end
169
175
  private :check_to
170
176
 
177
+ # private setter for to +v+
171
178
  def set_to(v)
172
179
  @to = v
173
180
  end
174
181
  protected :set_to
175
182
 
183
+ # setter for to +v+
176
184
  def to=(v)
177
185
  check_to(v)
178
186
  set_to(v)
179
187
  v
180
188
  end
181
189
 
190
+ # check the headers +v+ component against either
191
+ # * URI::Parser Regexp for :OPAQUE
192
+ # * HEADER_PATTERN
182
193
  def check_headers(v)
183
194
  return true unless v
184
195
  return true if v.size == 0
185
196
 
186
- if OPAQUE !~ v ||
197
+ if parser.regexp[:OPAQUE] !~ v ||
187
198
  /\A(#{HEADER_PATTERN}(?:\&#{HEADER_PATTERN})*)\z/o !~ v
188
199
  raise InvalidComponentError,
189
200
  "bad component(expected opaque component): #{v}"
@@ -193,6 +204,7 @@ module URI
193
204
  end
194
205
  private :check_headers
195
206
 
207
+ # private setter for headers +v+
196
208
  def set_headers(v)
197
209
  @headers = []
198
210
  if v
@@ -203,19 +215,21 @@ module URI
203
215
  end
204
216
  protected :set_headers
205
217
 
218
+ # setter for headers +v+
206
219
  def headers=(v)
207
220
  check_headers(v)
208
221
  set_headers(v)
209
222
  v
210
223
  end
211
224
 
225
+ # Constructs String from URI
212
226
  def to_s
213
- @scheme + ':' +
214
- if @to
227
+ @scheme + ':' +
228
+ if @to
215
229
  @to
216
230
  else
217
231
  ''
218
- end +
232
+ end +
219
233
  if @headers.size > 0
220
234
  '?' + @headers.collect{|x| x.join('=')}.join('&')
221
235
  else
@@ -227,7 +241,7 @@ module URI
227
241
  ''
228
242
  end
229
243
  end
230
-
244
+
231
245
  # Returns the RFC822 e-mail text equivalent of the URL, as a String.
232
246
  #
233
247
  # Example:
@@ -239,18 +253,18 @@ module URI
239
253
  # # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
240
254
  #
241
255
  def to_mailtext
242
- to = URI::unescape(@to)
256
+ to = parser.unescape(@to)
243
257
  head = ''
244
258
  body = ''
245
259
  @headers.each do |x|
246
260
  case x[0]
247
261
  when 'body'
248
- body = URI::unescape(x[1])
262
+ body = parser.unescape(x[1])
249
263
  when 'to'
250
- to << ', ' + URI::unescape(x[1])
264
+ to << ', ' + parser.unescape(x[1])
251
265
  else
252
- head << URI::unescape(x[0]).capitalize + ': ' +
253
- URI::unescape(x[1]) + "\n"
266
+ head << parser.unescape(x[0]).capitalize + ': ' +
267
+ parser.unescape(x[1]) + "\n"
254
268
  end
255
269
  end
256
270