uri 0.12.2 → 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.
- checksums.yaml +4 -4
- data/.document +5 -0
- data/.rdoc_options +5 -0
- data/{LICENSE.txt → BSDL} +3 -3
- data/COPYING +56 -0
- data/README.md +2 -1
- data/docs/kernel.rb +2 -0
- data/lib/uri/common.rb +351 -158
- data/lib/uri/file.rb +4 -4
- data/lib/uri/ftp.rb +1 -1
- data/lib/uri/generic.rb +60 -55
- data/lib/uri/http.rb +14 -2
- data/lib/uri/rfc2396_parser.rb +25 -17
- data/lib/uri/rfc3986_parser.rb +121 -34
- data/lib/uri/version.rb +2 -2
- data/lib/uri.rb +9 -9
- metadata +12 -16
- data/.github/dependabot.yml +0 -6
- data/.github/workflows/test.yml +0 -21
- data/.gitignore +0 -9
- data/Gemfile +0 -10
- data/Rakefile +0 -17
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/uri.gemspec +0 -31
data/lib/uri/file.rb
CHANGED
|
@@ -47,7 +47,7 @@ module URI
|
|
|
47
47
|
# :path => '/ruby/src'})
|
|
48
48
|
# uri2.to_s # => "file://host.example.com/ruby/src"
|
|
49
49
|
#
|
|
50
|
-
# uri3 = URI::File.build({:path => URI::escape('/path/my file.txt')})
|
|
50
|
+
# uri3 = URI::File.build({:path => URI::RFC2396_PARSER.escape('/path/my file.txt')})
|
|
51
51
|
# uri3.to_s # => "file:///path/my%20file.txt"
|
|
52
52
|
#
|
|
53
53
|
def self.build(args)
|
|
@@ -70,17 +70,17 @@ module URI
|
|
|
70
70
|
|
|
71
71
|
# raise InvalidURIError
|
|
72
72
|
def check_userinfo(user)
|
|
73
|
-
raise URI::InvalidURIError, "
|
|
73
|
+
raise URI::InvalidURIError, "cannot set userinfo for file URI"
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
# raise InvalidURIError
|
|
77
77
|
def check_user(user)
|
|
78
|
-
raise URI::InvalidURIError, "
|
|
78
|
+
raise URI::InvalidURIError, "cannot set user for file URI"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
# raise InvalidURIError
|
|
82
82
|
def check_password(user)
|
|
83
|
-
raise URI::InvalidURIError, "
|
|
83
|
+
raise URI::InvalidURIError, "cannot set password for file URI"
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
# do nothing
|
data/lib/uri/ftp.rb
CHANGED
|
@@ -17,7 +17,7 @@ module URI
|
|
|
17
17
|
# This class will be redesigned because of difference of implementations;
|
|
18
18
|
# the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
|
|
19
19
|
# is a good summary about the de facto spec.
|
|
20
|
-
#
|
|
20
|
+
# https://datatracker.ietf.org/doc/html/draft-hoffman-ftp-uri-04
|
|
21
21
|
#
|
|
22
22
|
class FTP < Generic
|
|
23
23
|
# A Default port of 21 for URI::FTP.
|
data/lib/uri/generic.rb
CHANGED
|
@@ -73,7 +73,7 @@ module URI
|
|
|
73
73
|
#
|
|
74
74
|
# At first, tries to create a new URI::Generic instance using
|
|
75
75
|
# URI::Generic::build. But, if exception URI::InvalidComponentError is raised,
|
|
76
|
-
# then it does URI::
|
|
76
|
+
# then it does URI::RFC2396_PARSER.escape all URI components and tries again.
|
|
77
77
|
#
|
|
78
78
|
def self.build2(args)
|
|
79
79
|
begin
|
|
@@ -82,7 +82,7 @@ module URI
|
|
|
82
82
|
if args.kind_of?(Array)
|
|
83
83
|
return self.build(args.collect{|x|
|
|
84
84
|
if x.is_a?(String)
|
|
85
|
-
|
|
85
|
+
URI::RFC2396_PARSER.escape(x)
|
|
86
86
|
else
|
|
87
87
|
x
|
|
88
88
|
end
|
|
@@ -91,7 +91,7 @@ module URI
|
|
|
91
91
|
tmp = {}
|
|
92
92
|
args.each do |key, value|
|
|
93
93
|
tmp[key] = if value
|
|
94
|
-
|
|
94
|
+
URI::RFC2396_PARSER.escape(value)
|
|
95
95
|
else
|
|
96
96
|
value
|
|
97
97
|
end
|
|
@@ -126,9 +126,9 @@ module URI
|
|
|
126
126
|
end
|
|
127
127
|
end
|
|
128
128
|
else
|
|
129
|
-
component = self.
|
|
129
|
+
component = self.component rescue ::URI::Generic::COMPONENT
|
|
130
130
|
raise ArgumentError,
|
|
131
|
-
|
|
131
|
+
"expected Array of or Hash of components of #{self} (#{component.join(', ')})"
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
tmp << nil
|
|
@@ -186,18 +186,18 @@ module URI
|
|
|
186
186
|
|
|
187
187
|
if arg_check
|
|
188
188
|
self.scheme = scheme
|
|
189
|
-
self.userinfo = userinfo
|
|
190
189
|
self.hostname = host
|
|
191
190
|
self.port = port
|
|
191
|
+
self.userinfo = userinfo
|
|
192
192
|
self.path = path
|
|
193
193
|
self.query = query
|
|
194
194
|
self.opaque = opaque
|
|
195
195
|
self.fragment = fragment
|
|
196
196
|
else
|
|
197
197
|
self.set_scheme(scheme)
|
|
198
|
-
self.set_userinfo(userinfo)
|
|
199
198
|
self.set_host(host)
|
|
200
199
|
self.set_port(port)
|
|
200
|
+
self.set_userinfo(userinfo)
|
|
201
201
|
self.set_path(path)
|
|
202
202
|
self.query = query
|
|
203
203
|
self.set_opaque(opaque)
|
|
@@ -284,7 +284,7 @@ module URI
|
|
|
284
284
|
|
|
285
285
|
# Returns the parser to be used.
|
|
286
286
|
#
|
|
287
|
-
# Unless
|
|
287
|
+
# Unless the +parser+ is defined, DEFAULT_PARSER is used.
|
|
288
288
|
#
|
|
289
289
|
def parser
|
|
290
290
|
if !defined?(@parser) || !@parser
|
|
@@ -315,7 +315,7 @@ module URI
|
|
|
315
315
|
end
|
|
316
316
|
|
|
317
317
|
#
|
|
318
|
-
# Checks the scheme +v+ component against the
|
|
318
|
+
# Checks the scheme +v+ component against the +parser+ Regexp for :SCHEME.
|
|
319
319
|
#
|
|
320
320
|
def check_scheme(v)
|
|
321
321
|
if v && parser.regexp[:SCHEME] !~ v
|
|
@@ -385,7 +385,7 @@ module URI
|
|
|
385
385
|
|
|
386
386
|
#
|
|
387
387
|
# Checks the user +v+ component for RFC2396 compliance
|
|
388
|
-
# and against the
|
|
388
|
+
# and against the +parser+ Regexp for :USERINFO.
|
|
389
389
|
#
|
|
390
390
|
# Can not have a registry or opaque component defined,
|
|
391
391
|
# with a user component defined.
|
|
@@ -393,7 +393,7 @@ module URI
|
|
|
393
393
|
def check_user(v)
|
|
394
394
|
if @opaque
|
|
395
395
|
raise InvalidURIError,
|
|
396
|
-
"
|
|
396
|
+
"cannot set user with opaque"
|
|
397
397
|
end
|
|
398
398
|
|
|
399
399
|
return v unless v
|
|
@@ -409,7 +409,7 @@ module URI
|
|
|
409
409
|
|
|
410
410
|
#
|
|
411
411
|
# Checks the password +v+ component for RFC2396 compliance
|
|
412
|
-
# and against the
|
|
412
|
+
# and against the +parser+ Regexp for :USERINFO.
|
|
413
413
|
#
|
|
414
414
|
# Can not have a registry or opaque component defined,
|
|
415
415
|
# with a user component defined.
|
|
@@ -417,7 +417,7 @@ module URI
|
|
|
417
417
|
def check_password(v, user = @user)
|
|
418
418
|
if @opaque
|
|
419
419
|
raise InvalidURIError,
|
|
420
|
-
"
|
|
420
|
+
"cannot set password with opaque"
|
|
421
421
|
end
|
|
422
422
|
return v unless v
|
|
423
423
|
|
|
@@ -511,7 +511,7 @@ module URI
|
|
|
511
511
|
user, password = split_userinfo(user)
|
|
512
512
|
end
|
|
513
513
|
@user = user
|
|
514
|
-
@password = password
|
|
514
|
+
@password = password
|
|
515
515
|
|
|
516
516
|
[@user, @password]
|
|
517
517
|
end
|
|
@@ -522,7 +522,7 @@ module URI
|
|
|
522
522
|
# See also URI::Generic.user=.
|
|
523
523
|
#
|
|
524
524
|
def set_user(v)
|
|
525
|
-
set_userinfo(v,
|
|
525
|
+
set_userinfo(v, nil)
|
|
526
526
|
v
|
|
527
527
|
end
|
|
528
528
|
protected :set_user
|
|
@@ -574,6 +574,12 @@ module URI
|
|
|
574
574
|
@password
|
|
575
575
|
end
|
|
576
576
|
|
|
577
|
+
# Returns the authority info (array of user, password, host and
|
|
578
|
+
# port), if any is set. Or returns +nil+.
|
|
579
|
+
def authority
|
|
580
|
+
return @user, @password, @host, @port if @user || @password || @host || @port
|
|
581
|
+
end
|
|
582
|
+
|
|
577
583
|
# Returns the user component after URI decoding.
|
|
578
584
|
def decoded_user
|
|
579
585
|
URI.decode_uri_component(@user) if @user
|
|
@@ -586,7 +592,7 @@ module URI
|
|
|
586
592
|
|
|
587
593
|
#
|
|
588
594
|
# Checks the host +v+ component for RFC2396 compliance
|
|
589
|
-
# and against the
|
|
595
|
+
# and against the +parser+ Regexp for :HOST.
|
|
590
596
|
#
|
|
591
597
|
# Can not have a registry or opaque component defined,
|
|
592
598
|
# with a host component defined.
|
|
@@ -596,7 +602,7 @@ module URI
|
|
|
596
602
|
|
|
597
603
|
if @opaque
|
|
598
604
|
raise InvalidURIError,
|
|
599
|
-
"
|
|
605
|
+
"cannot set host with registry or opaque"
|
|
600
606
|
elsif parser.regexp[:HOST] !~ v
|
|
601
607
|
raise InvalidComponentError,
|
|
602
608
|
"bad component(expected host component): #{v}"
|
|
@@ -615,6 +621,13 @@ module URI
|
|
|
615
621
|
end
|
|
616
622
|
protected :set_host
|
|
617
623
|
|
|
624
|
+
# Protected setter for the authority info (+user+, +password+, +host+
|
|
625
|
+
# and +port+). If +port+ is +nil+, +default_port+ will be set.
|
|
626
|
+
#
|
|
627
|
+
protected def set_authority(user, password, host, port = nil)
|
|
628
|
+
@user, @password, @host, @port = user, password, host, port || self.default_port
|
|
629
|
+
end
|
|
630
|
+
|
|
618
631
|
#
|
|
619
632
|
# == Args
|
|
620
633
|
#
|
|
@@ -639,6 +652,7 @@ module URI
|
|
|
639
652
|
def host=(v)
|
|
640
653
|
check_host(v)
|
|
641
654
|
set_host(v)
|
|
655
|
+
set_userinfo(nil)
|
|
642
656
|
v
|
|
643
657
|
end
|
|
644
658
|
|
|
@@ -675,7 +689,7 @@ module URI
|
|
|
675
689
|
|
|
676
690
|
#
|
|
677
691
|
# Checks the port +v+ component for RFC2396 compliance
|
|
678
|
-
# and against the
|
|
692
|
+
# and against the +parser+ Regexp for :PORT.
|
|
679
693
|
#
|
|
680
694
|
# Can not have a registry or opaque component defined,
|
|
681
695
|
# with a port component defined.
|
|
@@ -685,7 +699,7 @@ module URI
|
|
|
685
699
|
|
|
686
700
|
if @opaque
|
|
687
701
|
raise InvalidURIError,
|
|
688
|
-
"
|
|
702
|
+
"cannot set port with registry or opaque"
|
|
689
703
|
elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v
|
|
690
704
|
raise InvalidComponentError,
|
|
691
705
|
"bad component(expected port component): #{v.inspect}"
|
|
@@ -729,26 +743,27 @@ module URI
|
|
|
729
743
|
def port=(v)
|
|
730
744
|
check_port(v)
|
|
731
745
|
set_port(v)
|
|
746
|
+
set_userinfo(nil)
|
|
732
747
|
port
|
|
733
748
|
end
|
|
734
749
|
|
|
735
750
|
def check_registry(v) # :nodoc:
|
|
736
|
-
raise InvalidURIError, "
|
|
751
|
+
raise InvalidURIError, "cannot set registry"
|
|
737
752
|
end
|
|
738
753
|
private :check_registry
|
|
739
754
|
|
|
740
|
-
def set_registry(v)
|
|
741
|
-
raise InvalidURIError, "
|
|
755
|
+
def set_registry(v) # :nodoc:
|
|
756
|
+
raise InvalidURIError, "cannot set registry"
|
|
742
757
|
end
|
|
743
758
|
protected :set_registry
|
|
744
759
|
|
|
745
|
-
def registry=(v)
|
|
746
|
-
raise InvalidURIError, "
|
|
760
|
+
def registry=(v) # :nodoc:
|
|
761
|
+
raise InvalidURIError, "cannot set registry"
|
|
747
762
|
end
|
|
748
763
|
|
|
749
764
|
#
|
|
750
765
|
# Checks the path +v+ component for RFC2396 compliance
|
|
751
|
-
# and against the
|
|
766
|
+
# and against the +parser+ Regexp
|
|
752
767
|
# for :ABS_PATH and :REL_PATH.
|
|
753
768
|
#
|
|
754
769
|
# Can not have a opaque component defined,
|
|
@@ -853,7 +868,7 @@ module URI
|
|
|
853
868
|
|
|
854
869
|
#
|
|
855
870
|
# Checks the opaque +v+ component for RFC2396 compliance and
|
|
856
|
-
# against the
|
|
871
|
+
# against the +parser+ Regexp for :OPAQUE.
|
|
857
872
|
#
|
|
858
873
|
# Can not have a host, port, user, or path component defined,
|
|
859
874
|
# with an opaque component defined.
|
|
@@ -866,7 +881,7 @@ module URI
|
|
|
866
881
|
# hier_part = ( net_path | abs_path ) [ "?" query ]
|
|
867
882
|
if @host || @port || @user || @path # userinfo = @user + ':' + @password
|
|
868
883
|
raise InvalidURIError,
|
|
869
|
-
"
|
|
884
|
+
"cannot set opaque with host, port, userinfo or path"
|
|
870
885
|
elsif v && parser.regexp[:OPAQUE] !~ v
|
|
871
886
|
raise InvalidComponentError,
|
|
872
887
|
"bad component(expected opaque component): #{v}"
|
|
@@ -905,7 +920,7 @@ module URI
|
|
|
905
920
|
end
|
|
906
921
|
|
|
907
922
|
#
|
|
908
|
-
# Checks the fragment +v+ component against the
|
|
923
|
+
# Checks the fragment +v+ component against the +parser+ Regexp for :FRAGMENT.
|
|
909
924
|
#
|
|
910
925
|
#
|
|
911
926
|
# == Args
|
|
@@ -945,7 +960,7 @@ module URI
|
|
|
945
960
|
# == Description
|
|
946
961
|
#
|
|
947
962
|
# URI has components listed in order of decreasing significance from left to right,
|
|
948
|
-
# see RFC3986 https://
|
|
963
|
+
# see RFC3986 https://www.rfc-editor.org/rfc/rfc3986 1.2.3.
|
|
949
964
|
#
|
|
950
965
|
# == Usage
|
|
951
966
|
#
|
|
@@ -1121,7 +1136,7 @@ module URI
|
|
|
1121
1136
|
|
|
1122
1137
|
base = self.dup
|
|
1123
1138
|
|
|
1124
|
-
authority = rel.
|
|
1139
|
+
authority = rel.authority
|
|
1125
1140
|
|
|
1126
1141
|
# RFC2396, Section 5.2, 2)
|
|
1127
1142
|
if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
|
|
@@ -1133,17 +1148,14 @@ module URI
|
|
|
1133
1148
|
base.fragment=(nil)
|
|
1134
1149
|
|
|
1135
1150
|
# RFC2396, Section 5.2, 4)
|
|
1136
|
-
if
|
|
1137
|
-
base.
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
base.set_path(
|
|
1151
|
+
if authority
|
|
1152
|
+
base.set_authority(*authority)
|
|
1153
|
+
base.set_path(rel.path)
|
|
1154
|
+
elsif base.path && rel.path
|
|
1155
|
+
base.set_path(merge_path(base.path, rel.path))
|
|
1141
1156
|
end
|
|
1142
1157
|
|
|
1143
1158
|
# RFC2396, Section 5.2, 7)
|
|
1144
|
-
base.set_userinfo(rel.userinfo) if rel.userinfo
|
|
1145
|
-
base.set_host(rel.host) if rel.host
|
|
1146
|
-
base.set_port(rel.port) if rel.port
|
|
1147
1159
|
base.query = rel.query if rel.query
|
|
1148
1160
|
base.fragment=(rel.fragment) if rel.fragment
|
|
1149
1161
|
|
|
@@ -1235,7 +1247,7 @@ module URI
|
|
|
1235
1247
|
return rel, rel
|
|
1236
1248
|
end
|
|
1237
1249
|
|
|
1238
|
-
# you can modify `rel', but
|
|
1250
|
+
# you can modify `rel', but cannot `oth'.
|
|
1239
1251
|
return oth, rel
|
|
1240
1252
|
end
|
|
1241
1253
|
private :route_from0
|
|
@@ -1260,7 +1272,7 @@ module URI
|
|
|
1260
1272
|
# #=> #<URI::Generic /main.rbx?page=1>
|
|
1261
1273
|
#
|
|
1262
1274
|
def route_from(oth)
|
|
1263
|
-
# you can modify `rel', but
|
|
1275
|
+
# you can modify `rel', but cannot `oth'.
|
|
1264
1276
|
begin
|
|
1265
1277
|
oth, rel = route_from0(oth)
|
|
1266
1278
|
rescue
|
|
@@ -1364,6 +1376,9 @@ module URI
|
|
|
1364
1376
|
str << ':'
|
|
1365
1377
|
str << @port.to_s
|
|
1366
1378
|
end
|
|
1379
|
+
if (@host || @port) && !@path.empty? && !@path.start_with?('/')
|
|
1380
|
+
str << '/'
|
|
1381
|
+
end
|
|
1367
1382
|
str << @path
|
|
1368
1383
|
if @query
|
|
1369
1384
|
str << '?'
|
|
@@ -1376,6 +1391,7 @@ module URI
|
|
|
1376
1391
|
end
|
|
1377
1392
|
str
|
|
1378
1393
|
end
|
|
1394
|
+
alias to_str to_s
|
|
1379
1395
|
|
|
1380
1396
|
#
|
|
1381
1397
|
# Compares two URIs.
|
|
@@ -1388,29 +1404,18 @@ module URI
|
|
|
1388
1404
|
end
|
|
1389
1405
|
end
|
|
1390
1406
|
|
|
1407
|
+
# Returns the hash value.
|
|
1391
1408
|
def hash
|
|
1392
1409
|
self.component_ary.hash
|
|
1393
1410
|
end
|
|
1394
1411
|
|
|
1412
|
+
# Compares with _oth_ for Hash.
|
|
1395
1413
|
def eql?(oth)
|
|
1396
1414
|
self.class == oth.class &&
|
|
1397
1415
|
parser == oth.parser &&
|
|
1398
1416
|
self.component_ary.eql?(oth.component_ary)
|
|
1399
1417
|
end
|
|
1400
1418
|
|
|
1401
|
-
=begin
|
|
1402
|
-
|
|
1403
|
-
--- URI::Generic#===(oth)
|
|
1404
|
-
|
|
1405
|
-
=end
|
|
1406
|
-
# def ===(oth)
|
|
1407
|
-
# raise NotImplementedError
|
|
1408
|
-
# end
|
|
1409
|
-
|
|
1410
|
-
=begin
|
|
1411
|
-
=end
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
1419
|
# Returns an Array of the components defined from the COMPONENT Array.
|
|
1415
1420
|
def component_ary
|
|
1416
1421
|
component.collect do |x|
|
|
@@ -1447,7 +1452,7 @@ module URI
|
|
|
1447
1452
|
end
|
|
1448
1453
|
end
|
|
1449
1454
|
|
|
1450
|
-
def inspect
|
|
1455
|
+
def inspect # :nodoc:
|
|
1451
1456
|
"#<#{self.class} #{self}>"
|
|
1452
1457
|
end
|
|
1453
1458
|
|
|
@@ -1535,7 +1540,7 @@ module URI
|
|
|
1535
1540
|
else
|
|
1536
1541
|
unless proxy_uri = env[name]
|
|
1537
1542
|
if proxy_uri = env[name.upcase]
|
|
1538
|
-
warn 'The environment variable HTTP_PROXY is discouraged.
|
|
1543
|
+
warn 'The environment variable HTTP_PROXY is discouraged. Please use http_proxy instead.', uplevel: 1
|
|
1539
1544
|
end
|
|
1540
1545
|
end
|
|
1541
1546
|
end
|
data/lib/uri/http.rb
CHANGED
|
@@ -61,6 +61,18 @@ module URI
|
|
|
61
61
|
super(tmp)
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
+
# Do not allow empty host names, as they are not allowed by RFC 3986.
|
|
65
|
+
def check_host(v)
|
|
66
|
+
ret = super
|
|
67
|
+
|
|
68
|
+
if ret && v.empty?
|
|
69
|
+
raise InvalidComponentError,
|
|
70
|
+
"bad component(expected host component): #{v}"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
ret
|
|
74
|
+
end
|
|
75
|
+
|
|
64
76
|
#
|
|
65
77
|
# == Description
|
|
66
78
|
#
|
|
@@ -85,7 +97,7 @@ module URI
|
|
|
85
97
|
# == Description
|
|
86
98
|
#
|
|
87
99
|
# Returns the authority for an HTTP uri, as defined in
|
|
88
|
-
# https://
|
|
100
|
+
# https://www.rfc-editor.org/rfc/rfc3986#section-3.2.
|
|
89
101
|
#
|
|
90
102
|
#
|
|
91
103
|
# Example:
|
|
@@ -106,7 +118,7 @@ module URI
|
|
|
106
118
|
# == Description
|
|
107
119
|
#
|
|
108
120
|
# Returns the origin for an HTTP uri, as defined in
|
|
109
|
-
# https://
|
|
121
|
+
# https://www.rfc-editor.org/rfc/rfc6454.
|
|
110
122
|
#
|
|
111
123
|
#
|
|
112
124
|
# Example:
|
data/lib/uri/rfc2396_parser.rb
CHANGED
|
@@ -67,7 +67,7 @@ module URI
|
|
|
67
67
|
#
|
|
68
68
|
# == Synopsis
|
|
69
69
|
#
|
|
70
|
-
# URI::
|
|
70
|
+
# URI::RFC2396_Parser.new([opts])
|
|
71
71
|
#
|
|
72
72
|
# == Args
|
|
73
73
|
#
|
|
@@ -86,7 +86,7 @@ module URI
|
|
|
86
86
|
#
|
|
87
87
|
# == Examples
|
|
88
88
|
#
|
|
89
|
-
# p = URI::
|
|
89
|
+
# p = URI::RFC2396_Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
|
|
90
90
|
# u = p.parse("http://example.jp/%uABCD") #=> #<URI::HTTP http://example.jp/%uABCD>
|
|
91
91
|
# URI.parse(u.to_s) #=> raises URI::InvalidURIError
|
|
92
92
|
#
|
|
@@ -108,12 +108,12 @@ module URI
|
|
|
108
108
|
|
|
109
109
|
# The Hash of patterns.
|
|
110
110
|
#
|
|
111
|
-
# See also
|
|
111
|
+
# See also #initialize_pattern.
|
|
112
112
|
attr_reader :pattern
|
|
113
113
|
|
|
114
114
|
# The Hash of Regexp.
|
|
115
115
|
#
|
|
116
|
-
# See also
|
|
116
|
+
# See also #initialize_regexp.
|
|
117
117
|
attr_reader :regexp
|
|
118
118
|
|
|
119
119
|
# Returns a split URI against +regexp[:ABS_URI]+.
|
|
@@ -140,11 +140,11 @@ module URI
|
|
|
140
140
|
|
|
141
141
|
if !scheme
|
|
142
142
|
raise InvalidURIError,
|
|
143
|
-
"bad URI(absolute but no scheme): #{uri}"
|
|
143
|
+
"bad URI (absolute but no scheme): #{uri}"
|
|
144
144
|
end
|
|
145
145
|
if !opaque && (!path && (!host && !registry))
|
|
146
146
|
raise InvalidURIError,
|
|
147
|
-
"bad URI(absolute but no path): #{uri}"
|
|
147
|
+
"bad URI (absolute but no path): #{uri}"
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
when @regexp[:REL_URI]
|
|
@@ -173,7 +173,7 @@ module URI
|
|
|
173
173
|
# server = [ [ userinfo "@" ] hostport ]
|
|
174
174
|
|
|
175
175
|
else
|
|
176
|
-
raise InvalidURIError, "bad URI(is not URI?): #{uri}"
|
|
176
|
+
raise InvalidURIError, "bad URI (is not URI?): #{uri}"
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
path = '' if !path && !opaque # (see RFC2396 Section 5.2)
|
|
@@ -202,8 +202,7 @@ module URI
|
|
|
202
202
|
#
|
|
203
203
|
# == Usage
|
|
204
204
|
#
|
|
205
|
-
#
|
|
206
|
-
# p.parse("ldap://ldap.example.com/dc=example?user=john")
|
|
205
|
+
# URI::RFC2396_PARSER.parse("ldap://ldap.example.com/dc=example?user=john")
|
|
207
206
|
# #=> #<URI::LDAP ldap://ldap.example.com/dc=example?user=john>
|
|
208
207
|
#
|
|
209
208
|
def parse(uri)
|
|
@@ -244,7 +243,7 @@ module URI
|
|
|
244
243
|
# If no +block+ given, then returns the result,
|
|
245
244
|
# else it calls +block+ for each element in result.
|
|
246
245
|
#
|
|
247
|
-
# See also
|
|
246
|
+
# See also #make_regexp.
|
|
248
247
|
#
|
|
249
248
|
def extract(str, schemes = nil)
|
|
250
249
|
if block_given?
|
|
@@ -263,7 +262,7 @@ module URI
|
|
|
263
262
|
unless schemes
|
|
264
263
|
@regexp[:ABS_URI_REF]
|
|
265
264
|
else
|
|
266
|
-
/(
|
|
265
|
+
/(?=(?i:#{Regexp.union(*schemes).source}):)#{@pattern[:X_ABS_URI]}/x
|
|
267
266
|
end
|
|
268
267
|
end
|
|
269
268
|
|
|
@@ -321,14 +320,14 @@ module URI
|
|
|
321
320
|
str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
|
|
322
321
|
end
|
|
323
322
|
|
|
324
|
-
|
|
325
|
-
if
|
|
326
|
-
def inspect
|
|
327
|
-
|
|
323
|
+
TO_S = Kernel.instance_method(:to_s) # :nodoc:
|
|
324
|
+
if TO_S.respond_to?(:bind_call)
|
|
325
|
+
def inspect # :nodoc:
|
|
326
|
+
TO_S.bind_call(self)
|
|
328
327
|
end
|
|
329
328
|
else
|
|
330
|
-
def inspect
|
|
331
|
-
|
|
329
|
+
def inspect # :nodoc:
|
|
330
|
+
TO_S.bind(self).call
|
|
332
331
|
end
|
|
333
332
|
end
|
|
334
333
|
|
|
@@ -524,6 +523,8 @@ module URI
|
|
|
524
523
|
ret
|
|
525
524
|
end
|
|
526
525
|
|
|
526
|
+
# Returns +uri+ as-is if it is URI, or convert it to URI if it is
|
|
527
|
+
# a String.
|
|
527
528
|
def convert_to_uri(uri)
|
|
528
529
|
if uri.is_a?(URI::Generic)
|
|
529
530
|
uri
|
|
@@ -536,4 +537,11 @@ module URI
|
|
|
536
537
|
end
|
|
537
538
|
|
|
538
539
|
end # class Parser
|
|
540
|
+
|
|
541
|
+
# Backward compatibility for URI::REGEXP::PATTERN::*
|
|
542
|
+
RFC2396_Parser.new.pattern.each_pair do |sym, str|
|
|
543
|
+
unless RFC2396_REGEXP::PATTERN.const_defined?(sym, false)
|
|
544
|
+
RFC2396_REGEXP::PATTERN.const_set(sym, str)
|
|
545
|
+
end
|
|
546
|
+
end
|
|
539
547
|
end # module URI
|