addressable 0.1.1 → 0.1.2
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.
- data/CHANGELOG +5 -0
- data/coverage/index.html +5 -5
- data/coverage/lib-addressable-uri_rb.html +927 -896
- data/coverage/lib-addressable-version_rb.html +33 -33
- data/doc/classes/Addressable.html +2 -2
- data/doc/classes/Addressable/URI.html +829 -772
- data/doc/classes/Addressable/URI/CharacterClasses.html +2 -2
- data/doc/classes/Addressable/URI/IDNA.html +36 -36
- data/doc/classes/Addressable/URI/InvalidOptionError.html +2 -2
- data/doc/classes/Addressable/URI/InvalidTemplateValue.html +2 -2
- data/doc/classes/Addressable/URI/InvalidURIError.html +2 -2
- data/doc/created.rid +1 -1
- data/doc/files/CHANGELOG.html +10 -4
- data/doc/files/LICENSE.html +2 -2
- data/doc/files/README.html +2 -2
- data/doc/files/lib/addressable/uri_rb.html +3 -3
- data/doc/files/lib/addressable/version_rb.html +3 -3
- data/doc/fr_class_index.html +2 -2
- data/doc/fr_file_index.html +2 -2
- data/doc/fr_method_index.html +19 -17
- data/doc/index.html +2 -2
- data/lib/addressable/uri.rb +35 -4
- data/lib/addressable/version.rb +1 -1
- data/rakefile +6 -6
- data/spec/addressable/uri_spec.rb +841 -664
- data/specdoc/index.html +703 -576
- metadata +5 -5
data/CHANGELOG
CHANGED
data/coverage/index.html
CHANGED
@@ -151,7 +151,7 @@ table.report tr.dark {
|
|
151
151
|
</head>
|
152
152
|
<body>
|
153
153
|
<h3>C0 code coverage information</h3>
|
154
|
-
<p>Generated on
|
154
|
+
<p>Generated on Sun Oct 28 17:27:26 -0400 2007 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.8.0</a>
|
155
155
|
</p>
|
156
156
|
<hr /> <table class='report'>
|
157
157
|
<thead>
|
@@ -167,10 +167,10 @@ table.report tr.dark {
|
|
167
167
|
<tr class='light'>
|
168
168
|
<td>TOTAL</td>
|
169
169
|
<td class='lines_total'>
|
170
|
-
<tt>
|
170
|
+
<tt>1238</tt>
|
171
171
|
</td>
|
172
172
|
<td class='lines_code'>
|
173
|
-
<tt>
|
173
|
+
<tt>870</tt>
|
174
174
|
</td>
|
175
175
|
<td>
|
176
176
|
<table cellspacing='0' cellpadding='0' align='right'>
|
@@ -210,10 +210,10 @@ table.report tr.dark {
|
|
210
210
|
<a href='lib-addressable-uri_rb.html'>lib/addressable/uri.rb</a>
|
211
211
|
</td>
|
212
212
|
<td class='lines_total'>
|
213
|
-
<tt>
|
213
|
+
<tt>1206</tt>
|
214
214
|
</td>
|
215
215
|
<td class='lines_code'>
|
216
|
-
<tt>
|
216
|
+
<tt>862</tt>
|
217
217
|
</td>
|
218
218
|
<td>
|
219
219
|
<table cellspacing='0' cellpadding='0' align='right'>
|
@@ -556,7 +556,7 @@ span.run100 {
|
|
556
556
|
</head>
|
557
557
|
<body>
|
558
558
|
<h3>C0 code coverage information</h3>
|
559
|
-
<p>Generated on
|
559
|
+
<p>Generated on Sun Oct 28 17:27:34 -0400 2007 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.8.0</a>
|
560
560
|
</p>
|
561
561
|
<hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
562
562
|
</span><span class='marked1'>and this: this line is also marked as covered.
|
@@ -580,10 +580,10 @@ span.run100 {
|
|
580
580
|
<a href='lib-addressable-uri_rb.html'>lib/addressable/uri.rb</a>
|
581
581
|
</td>
|
582
582
|
<td class='lines_total'>
|
583
|
-
<tt>
|
583
|
+
<tt>1206</tt>
|
584
584
|
</td>
|
585
585
|
<td class='lines_code'>
|
586
|
-
<tt>
|
586
|
+
<tt>862</tt>
|
587
587
|
</td>
|
588
588
|
<td>
|
589
589
|
<table cellspacing='0' cellpadding='0' align='right'>
|
@@ -648,7 +648,7 @@ span.run100 {
|
|
648
648
|
</span><span class="marked1"><a name="line27" /> 27 require 'addressable/version'
|
649
649
|
</span><span class="inferred0"><a name="line28" /> 28
|
650
650
|
</span><span class="marked1"><a name="line29" /> 29 module Addressable
|
651
|
-
</span><span class="inferred0"><a name="line30" /> 30 # This is an implementation of a URI parser based on RFC 3986.
|
651
|
+
</span><span class="inferred0"><a name="line30" /> 30 # This is an implementation of a URI parser based on RFC 3986, 3987.
|
652
652
|
</span><span class="marked1"><a name="line31" /> 31 class URI
|
653
653
|
</span><span class="inferred0"><a name="line32" /> 32 # Raised if something other than a uri is supplied.
|
654
654
|
</span><span class="marked1"><a name="line33" /> 33 class InvalidURIError < StandardError
|
@@ -901,899 +901,930 @@ span.run100 {
|
|
901
901
|
</span><span class="inferred0"><a name="line280" /> 280 end
|
902
902
|
</span><span class="marked1"><a name="line281" /> 281 return mapping
|
903
903
|
</span><span class="inferred0"><a name="line282" /> 282 else
|
904
|
-
</span><span class="
|
905
|
-
</span><span class="
|
906
|
-
</span><span class="inferred1"><a name="line285" /> 285
|
907
|
-
</span><span class="inferred0"><a name="line286" /> 286
|
908
|
-
</span><span class="inferred1"><a name="line287" /> 287
|
909
|
-
</span><span class="
|
910
|
-
</span><span class="marked1"><a name="line289" /> 289
|
911
|
-
</span><span class="marked0"><a name="line290" /> 290
|
912
|
-
</span><span class="
|
913
|
-
</span><span class="
|
914
|
-
</span><span class="marked1"><a name="line293" /> 293
|
915
|
-
</span><span class="marked0"><a name="line294" /> 294
|
916
|
-
</span><span class="
|
917
|
-
</span><span class="
|
918
|
-
</span><span class="
|
919
|
-
</span><span class="inferred0"><a name="line298" /> 298
|
920
|
-
</span><span class="inferred1"><a name="line299" /> 299
|
921
|
-
</span><span class="inferred0"><a name="line300" /> 300 #
|
922
|
-
</span><span class="inferred1"><a name="line301" /> 301 #
|
923
|
-
</span><span class="inferred0"><a name="line302" /> 302 #
|
924
|
-
</span><span class="inferred1"><a name="line303" /> 303 #
|
925
|
-
</span><span class="inferred0"><a name="line304" /> 304 #
|
926
|
-
</span><span class="inferred1"><a name="line305" /> 305 #
|
927
|
-
</span><span class="inferred0"><a name="line306" /> 306 #
|
928
|
-
</span><span class="inferred1"><a name="line307" /> 307 #
|
929
|
-
</span><span class="inferred0"><a name="line308" /> 308 #
|
930
|
-
</span><span class="inferred1"><a name="line309" /> 309 #
|
931
|
-
</span><span class="inferred0"><a name="line310" /> 310 #
|
932
|
-
</span><span class="
|
933
|
-
</span><span class="
|
934
|
-
</span><span class="
|
935
|
-
</span><span class="marked0"><a name="line314" /> 314
|
936
|
-
</span><span class="
|
937
|
-
</span><span class="inferred0"><a name="line316" /> 316
|
938
|
-
</span><span class="inferred1"><a name="line317" /> 317
|
939
|
-
</span><span class="
|
940
|
-
</span><span class="marked1"><a name="line319" /> 319
|
941
|
-
</span><span class="
|
942
|
-
</span><span class="inferred1"><a name="line321" /> 321
|
943
|
-
</span><span class="inferred0"><a name="line322" /> 322
|
944
|
-
</span><span class="inferred1"><a name="line323" /> 323 #
|
945
|
-
</span><span class="
|
946
|
-
</span><span class="marked1"><a name="line325" /> 325
|
947
|
-
</span><span class="
|
948
|
-
</span><span class="
|
949
|
-
</span><span class="marked0"><a name="line328" /> 328
|
950
|
-
</span><span class="
|
951
|
-
</span><span class="inferred0"><a name="line330" /> 330
|
952
|
-
</span><span class="inferred1"><a name="line331" /> 331
|
953
|
-
</span><span class="inferred0"><a name="line332" /> 332 #
|
954
|
-
</span><span class="
|
955
|
-
</span><span class="marked0"><a name="line334" /> 334
|
956
|
-
</span><span class="marked1"><a name="line335" /> 335
|
957
|
-
</span><span class="marked0"><a name="line336" /> 336
|
958
|
-
</span><span class="
|
959
|
-
</span><span class="
|
960
|
-
</span><span class="
|
961
|
-
</span><span class="
|
962
|
-
</span><span class="
|
963
|
-
</span><span class="
|
964
|
-
</span><span class="
|
965
|
-
</span><span class="
|
966
|
-
</span><span class="
|
967
|
-
</span><span class="
|
968
|
-
</span><span class="
|
969
|
-
</span><span class="
|
970
|
-
</span><span class="
|
971
|
-
</span><span class="
|
972
|
-
</span><span class="
|
973
|
-
</span><span class="
|
974
|
-
</span><span class="
|
975
|
-
</span><span class="inferred0"><a name="line354" /> 354
|
976
|
-
</span><span class="
|
977
|
-
</span><span class="marked0"><a name="line356" /> 356
|
978
|
-
</span><span class="
|
979
|
-
</span><span class="inferred0"><a name="line358" /> 358
|
980
|
-
</span><span class="inferred1"><a name="line359" /> 359
|
981
|
-
</span><span class="inferred0"><a name="line360" /> 360 #
|
982
|
-
</span><span class="
|
983
|
-
</span><span class="marked0"><a name="line362" /> 362
|
984
|
-
</span><span class="marked1"><a name="line363" /> 363
|
985
|
-
</span><span class="marked0"><a name="line364" /> 364
|
986
|
-
</span><span class="marked1"><a name="line365" /> 365 :
|
987
|
-
</span><span class="marked0"><a name="line366" /> 366 :
|
988
|
-
</span><span class="marked1"><a name="line367" /> 367 :
|
989
|
-
</span><span class="marked0"><a name="line368" /> 368 :
|
990
|
-
</span><span class="marked1"><a name="line369" /> 369 :
|
991
|
-
</span><span class="marked0"><a name="line370" /> 370 :
|
992
|
-
</span><span class="marked1"><a name="line371" /> 371 :
|
993
|
-
</span><span class="
|
994
|
-
</span><span class="
|
995
|
-
</span><span class="marked0"><a name="line374" /> 374
|
996
|
-
</span><span class="marked1"><a name="line375" /> 375
|
997
|
-
</span><span class="marked0"><a name="line376" /> 376
|
998
|
-
</span><span class="
|
999
|
-
</span><span class="inferred0"><a name="line378" /> 378
|
1000
|
-
</span><span class="inferred1"><a name="line379" /> 379
|
1001
|
-
</span><span class="
|
1002
|
-
</span><span class="marked1"><a name="line381" /> 381
|
1003
|
-
</span><span class="
|
1004
|
-
</span><span class="
|
1005
|
-
</span><span class="
|
1006
|
-
</span><span class="
|
1007
|
-
</span><span class="
|
1008
|
-
</span><span class="inferred1"><a name="line387" /> 387
|
1009
|
-
</span><span class="inferred0"><a name="line388" /> 388 segments[:
|
1010
|
-
</span><span class="
|
1011
|
-
</span><span class="
|
1012
|
-
</span><span class="
|
1013
|
-
</span><span class="
|
1014
|
-
</span><span class="
|
1015
|
-
</span><span class="
|
1016
|
-
</span><span class="
|
1017
|
-
</span><span class="
|
1018
|
-
</span><span class="inferred1"><a name="line397" /> 397
|
1019
|
-
</span><span class="inferred0"><a name="line398" /> 398
|
1020
|
-
</span><span class="
|
1021
|
-
</span><span class="marked0"><a name="line400" /> 400
|
1022
|
-
</span><span class="marked1"><a name="line401" /> 401
|
1023
|
-
</span><span class="marked0"><a name="line402" /> 402
|
1024
|
-
</span><span class="
|
1025
|
-
</span><span class="inferred0"><a name="line404" /> 404 #
|
1026
|
-
</span><span class="
|
1027
|
-
</span><span class="marked0"><a name="line406" /> 406
|
1028
|
-
</span><span class="marked1"><a name="line407" /> 407
|
1029
|
-
</span><span class="marked0"><a name="line408" /> 408
|
1030
|
-
</span><span class="marked1"><a name="line409" /> 409
|
1031
|
-
</span><span class="
|
1032
|
-
</span><span class="
|
1033
|
-
</span><span class="marked0"><a name="line412" /> 412
|
1034
|
-
</span><span class="marked1"><a name="line413" /> 413
|
1035
|
-
</span><span class="
|
1036
|
-
</span><span class="
|
1037
|
-
</span><span class="marked0"><a name="line416" /> 416
|
1038
|
-
</span><span class="marked1"><a name="line417" /> 417
|
1039
|
-
</span><span class="marked0"><a name="line418" /> 418
|
1040
|
-
</span><span class="marked1"><a name="line419" /> 419
|
1041
|
-
</span><span class="marked0"><a name="line420" /> 420 base_uri =
|
1042
|
-
</span><span class="
|
1043
|
-
</span><span class="
|
1044
|
-
</span><span class="marked1"><a name="line423" /> 423
|
1045
|
-
</span><span class="marked0"><a name="line424" /> 424
|
1046
|
-
</span><span class="marked1"><a name="line425" /> 425
|
1047
|
-
</span><span class="
|
1048
|
-
</span><span class="
|
1049
|
-
</span><span class="
|
1050
|
-
</span><span class="inferred1"><a name="line429" /> 429
|
1051
|
-
</span><span class="
|
1052
|
-
</span><span class="
|
1053
|
-
</span><span class="inferred0"><a name="line432" /> 432
|
1054
|
-
</span><span class="
|
1055
|
-
</span><span class="marked0"><a name="line434" /> 434
|
1056
|
-
</span><span class="marked1"><a name="line435" /> 435
|
1057
|
-
</span><span class="marked0"><a name="line436" /> 436 uri.scheme == "
|
1058
|
-
</span><span class="marked1"><a name="line437" /> 437 uri.scheme == "
|
1059
|
-
</span><span class="marked0"><a name="line438" /> 438 uri.scheme == "
|
1060
|
-
</span><span class="marked1"><a name="line439" /> 439 uri.scheme == "
|
1061
|
-
</span><span class="marked0"><a name="line440" /> 440 uri.scheme == "
|
1062
|
-
</span><span class="marked1"><a name="line441" /> 441 uri.scheme == "
|
1063
|
-
</span><span class="marked0"><a name="line442" /> 442 uri.scheme == "
|
1064
|
-
</span><span class="
|
1065
|
-
</span><span class="
|
1066
|
-
</span><span class="marked1"><a name="line445" /> 445
|
1067
|
-
</span><span class="
|
1068
|
-
</span><span class="
|
1069
|
-
</span><span class="
|
1070
|
-
</span><span class="inferred1"><a name="line449" /> 449
|
1071
|
-
</span><span class="inferred0"><a name="line450" /> 450
|
1072
|
-
</span><span class="inferred1"><a name="line451" /> 451
|
1073
|
-
</span><span class="inferred0"><a name="line452" /> 452 #
|
1074
|
-
</span><span class="
|
1075
|
-
</span><span class="marked0"><a name="line454" /> 454
|
1076
|
-
</span><span class="marked1"><a name="line455" /> 455 @scheme =
|
1077
|
-
</span><span class="marked0"><a name="line456" /> 456 @
|
1078
|
-
</span><span class="marked1"><a name="line457" /> 457 @
|
1079
|
-
</span><span class="marked0"><a name="line458" /> 458 @
|
1080
|
-
</span><span class="marked1"><a name="line459" /> 459 @
|
1081
|
-
</span><span class="marked0"><a name="line460" /> 460 @
|
1082
|
-
</span><span class="marked1"><a name="line461" /> 461 @port =
|
1083
|
-
</span><span class="marked0"><a name="line462" /> 462
|
1084
|
-
</span><span class="marked1"><a name="line463" /> 463
|
1085
|
-
</span><span class="
|
1086
|
-
</span><span class="inferred1"><a name="line465" /> 465
|
1087
|
-
</span><span class="
|
1088
|
-
</span><span class="marked1"><a name="line467" /> 467 @port =
|
1089
|
-
</span><span class="marked0"><a name="line468" /> 468 @
|
1090
|
-
</span><span class="marked1"><a name="line469" /> 469 @
|
1091
|
-
</span><span class="marked0"><a name="line470" /> 470 @
|
1092
|
-
</span><span class="
|
1093
|
-
</span><span class="
|
1094
|
-
</span><span class="
|
1095
|
-
</span><span class="inferred0"><a name="line474" /> 474
|
1096
|
-
</span><span class="inferred1"><a name="line475" /> 475
|
1097
|
-
</span><span class="
|
1098
|
-
</span><span class="marked1"><a name="line477" /> 477
|
1099
|
-
</span><span class="marked0"><a name="line478" /> 478
|
1100
|
-
</span><span class="
|
1101
|
-
</span><span class="inferred0"><a name="line480" /> 480
|
1102
|
-
</span><span class="
|
1103
|
-
</span><span class="marked0"><a name="line482" /> 482
|
1104
|
-
</span><span class="marked1"><a name="line483" /> 483
|
1105
|
-
</span><span class="
|
1106
|
-
</span><span class="inferred1"><a name="line485" /> 485
|
1107
|
-
</span><span class="
|
1108
|
-
</span><span class="marked1"><a name="line487" /> 487
|
1109
|
-
</span><span class="marked0"><a name="line488" /> 488
|
1110
|
-
</span><span class="
|
1111
|
-
</span><span class="inferred0"><a name="line490" /> 490
|
1112
|
-
</span><span class="
|
1113
|
-
</span><span class="marked0"><a name="line492" /> 492
|
1114
|
-
</span><span class="
|
1115
|
-
</span><span class="inferred0"><a name="line494" /> 494
|
1116
|
-
</span><span class="
|
1117
|
-
</span><span class="marked0"><a name="line496" /> 496
|
1118
|
-
</span><span class="
|
1119
|
-
</span><span class="inferred0"><a name="line498" /> 498
|
1120
|
-
</span><span class="inferred1"><a name="line499" /> 499
|
1121
|
-
</span><span class="
|
1122
|
-
</span><span class="marked1"><a name="line501" /> 501 @
|
1123
|
-
</span><span class="
|
1124
|
-
</span><span class="inferred1"><a name="line503" /> 503
|
1125
|
-
</span><span class="
|
1126
|
-
</span><span class="
|
1127
|
-
</span><span class="inferred0"><a name="line506" /> 506
|
1128
|
-
</span><span class="inferred1"><a name="line507" /> 507
|
1129
|
-
</span><span class="
|
1130
|
-
</span><span class="marked1"><a name="line509" /> 509
|
1131
|
-
</span><span class="marked0"><a name="line510" /> 510
|
1132
|
-
</span><span class="
|
1133
|
-
</span><span class="inferred0"><a name="line512" /> 512
|
1134
|
-
</span><span class="
|
1135
|
-
</span><span class="marked0"><a name="line514" /> 514
|
1136
|
-
</span><span class="
|
1137
|
-
</span><span class="inferred0"><a name="line516" /> 516
|
1138
|
-
</span><span class="
|
1139
|
-
</span><span class="marked0"><a name="line518" /> 518
|
1140
|
-
</span><span class="
|
1141
|
-
</span><span class="inferred0"><a name="line520" /> 520
|
1142
|
-
</span><span class="inferred1"><a name="line521" /> 521
|
1143
|
-
</span><span class="
|
1144
|
-
</span><span class="marked1"><a name="line523" /> 523 @
|
1145
|
-
</span><span class="
|
1146
|
-
</span><span class="inferred1"><a name="line525" /> 525
|
1147
|
-
</span><span class="
|
1148
|
-
</span><span class="
|
1149
|
-
</span><span class="inferred0"><a name="line528" /> 528
|
1150
|
-
</span><span class="inferred1"><a name="line529" /> 529
|
1151
|
-
</span><span class="
|
1152
|
-
</span><span class="marked1"><a name="line531" /> 531
|
1153
|
-
</span><span class="marked0"><a name="line532" /> 532
|
1154
|
-
</span><span class="marked1"><a name="line533" /> 533
|
1155
|
-
</span><span class="marked0"><a name="line534" /> 534
|
1156
|
-
</span><span class="marked1"><a name="line535" /> 535
|
1157
|
-
</span><span class="marked0"><a name="line536" /> 536
|
1158
|
-
</span><span class="marked1"><a name="line537" /> 537
|
1159
|
-
</span><span class="marked0"><a name="line538" /> 538
|
1160
|
-
</span><span class="marked1"><a name="line539" /> 539
|
1161
|
-
</span><span class="
|
1162
|
-
</span><span class="inferred1"><a name="line541" /> 541
|
1163
|
-
</span><span class="
|
1164
|
-
</span><span class="
|
1165
|
-
</span><span class="inferred0"><a name="line544" /> 544
|
1166
|
-
</span><span class="inferred1"><a name="line545" /> 545
|
1167
|
-
</span><span class="
|
1168
|
-
</span><span class="marked1"><a name="line547" /> 547
|
1169
|
-
</span><span class="marked0"><a name="line548" /> 548
|
1170
|
-
</span><span class="
|
1171
|
-
</span><span class="inferred0"><a name="line550" /> 550
|
1172
|
-
</span><span class="
|
1173
|
-
</span><span class="marked0"><a name="line552" /> 552 self.
|
1174
|
-
</span><span class="
|
1175
|
-
</span><span class="inferred0"><a name="line554" /> 554
|
1176
|
-
</span><span class="
|
1177
|
-
</span><span class="
|
1178
|
-
</span><span class="inferred1"><a name="line557" /> 557
|
1179
|
-
</span><span class="
|
1180
|
-
</span><span class="
|
1181
|
-
</span><span class="inferred0"><a name="line560" /> 560
|
1182
|
-
</span><span class="inferred1"><a name="line561" /> 561
|
1183
|
-
</span><span class="
|
1184
|
-
</span><span class="marked1"><a name="line563" /> 563
|
1185
|
-
</span><span class="marked0"><a name="line564" /> 564
|
1186
|
-
</span><span class="
|
1187
|
-
</span><span class="inferred0"><a name="line566" /> 566
|
1188
|
-
</span><span class="
|
1189
|
-
</span><span class="marked0"><a name="line568" /> 568
|
1190
|
-
</span><span class="
|
1191
|
-
</span><span class="inferred0"><a name="line570" /> 570
|
1192
|
-
</span><span class="
|
1193
|
-
</span><span class="
|
1194
|
-
</span><span class="inferred1"><a name="line573" /> 573
|
1195
|
-
</span><span class="
|
1196
|
-
</span><span class="
|
1197
|
-
</span><span class="inferred0"><a name="line576" /> 576
|
1198
|
-
</span><span class="inferred1"><a name="line577" /> 577
|
1199
|
-
</span><span class="
|
1200
|
-
</span><span class="marked1"><a name="line579" /> 579
|
1201
|
-
</span><span class="marked0"><a name="line580" /> 580
|
1202
|
-
</span><span class="marked1"><a name="line581" /> 581
|
1203
|
-
</span><span class="marked0"><a name="line582" /> 582
|
1204
|
-
</span><span class="marked1"><a name="line583" /> 583
|
1205
|
-
</span><span class="
|
1206
|
-
</span><span class="
|
1207
|
-
</span><span class="marked0"><a name="line586" /> 586
|
1208
|
-
</span><span class="marked1"><a name="line587" /> 587
|
1209
|
-
</span><span class="
|
1210
|
-
</span><span class="inferred1"><a name="line589" /> 589
|
1211
|
-
</span><span class="
|
1212
|
-
</span><span class="
|
1213
|
-
</span><span class="inferred0"><a name="line592" /> 592
|
1214
|
-
</span><span class="inferred1"><a name="line593" /> 593
|
1215
|
-
</span><span class="
|
1216
|
-
</span><span class="marked1"><a name="line595" /> 595
|
1217
|
-
</span><span class="marked0"><a name="line596" /> 596
|
1218
|
-
</span><span class="marked1"><a name="line597" /> 597
|
1219
|
-
</span><span class="marked0"><a name="line598" /> 598
|
1220
|
-
</span><span class="marked1"><a name="line599" /> 599
|
1221
|
-
</span><span class="
|
1222
|
-
</span><span class="
|
1223
|
-
</span><span class="
|
1224
|
-
</span><span class="
|
1225
|
-
</span><span class="
|
1226
|
-
</span><span class="inferred1"><a name="line605" /> 605
|
1227
|
-
</span><span class="
|
1228
|
-
</span><span class="
|
1229
|
-
</span><span class="inferred0"><a name="line608" /> 608
|
1230
|
-
</span><span class="
|
1231
|
-
</span><span class="marked0"><a name="line610" /> 610 self.
|
1232
|
-
</span><span class="marked1"><a name="line611" /> 611 self.
|
1233
|
-
</span><span class="
|
1234
|
-
</span><span class="inferred1"><a name="line613" /> 613
|
1235
|
-
</span><span class="
|
1236
|
-
</span><span class="marked1"><a name="line615" /> 615 @
|
1237
|
-
</span><span class="
|
1238
|
-
</span><span class="inferred1"><a name="line617" /> 617
|
1239
|
-
</span><span class="
|
1240
|
-
</span><span class="
|
1241
|
-
</span><span class="inferred0"><a name="line620" /> 620
|
1242
|
-
</span><span class="inferred1"><a name="line621" /> 621
|
1243
|
-
</span><span class="inferred0"><a name="line622" /> 622 #
|
1244
|
-
</span><span class="inferred1"><a name="line623" /> 623 #
|
1245
|
-
</span><span class="
|
1246
|
-
</span><span class="marked1"><a name="line625" /> 625
|
1247
|
-
</span><span class="marked0"><a name="line626" /> 626
|
1248
|
-
</span><span class="
|
1249
|
-
</span><span class="inferred0"><a name="line628" /> 628
|
1250
|
-
</span><span class="inferred1"><a name="line629" /> 629 #
|
1251
|
-
</span><span class="inferred0"><a name="line630" /> 630 #
|
1252
|
-
</span><span class="
|
1253
|
-
</span><span class="marked0"><a name="line632" /> 632
|
1254
|
-
</span><span class="marked1"><a name="line633" /> 633
|
1255
|
-
</span><span class="
|
1256
|
-
</span><span class="inferred1"><a name="line635" /> 635 "
|
1257
|
-
</span><span class="inferred0"><a name="line636" /> 636 "
|
1258
|
-
</span><span class="inferred1"><a name="line637" /> 637 "
|
1259
|
-
</span><span class="inferred0"><a name="line638" /> 638 "
|
1260
|
-
</span><span class="inferred1"><a name="line639" /> 639 "
|
1261
|
-
</span><span class="inferred0"><a name="line640" /> 640 "
|
1262
|
-
</span><span class="inferred1"><a name="line641" /> 641 "
|
1263
|
-
</span><span class="inferred0"><a name="line642" /> 642 "
|
1264
|
-
</span><span class="inferred1"><a name="line643" /> 643 "
|
1265
|
-
</span><span class="inferred0"><a name="line644" /> 644 "
|
1266
|
-
</span><span class="inferred1"><a name="line645" /> 645 "
|
1267
|
-
</span><span class="inferred0"><a name="line646" /> 646
|
1268
|
-
</span><span class="inferred1"><a name="line647" /> 647
|
1269
|
-
</span><span class="
|
1270
|
-
</span><span class="
|
1271
|
-
</span><span class="inferred0"><a name="line650" /> 650
|
1272
|
-
</span><span class="inferred1"><a name="line651" /> 651
|
1273
|
-
</span><span class="inferred0"><a name="line652" /> 652 #
|
1274
|
-
</span><span class="inferred1"><a name="line653" /> 653 #
|
1275
|
-
</span><span class="
|
1276
|
-
</span><span class="marked1"><a name="line655" /> 655
|
1277
|
-
</span><span class="marked0"><a name="line656" /> 656
|
1278
|
-
</span><span class="marked1"><a name="line657" /> 657
|
1279
|
-
</span><span class="
|
1280
|
-
</span><span class="
|
1281
|
-
</span><span class="
|
1282
|
-
</span><span class="
|
1283
|
-
</span><span class="
|
1284
|
-
</span><span class="
|
1285
|
-
</span><span class="marked0"><a name="line664" /> 664
|
1286
|
-
</span><span class="
|
1287
|
-
</span><span class="
|
1288
|
-
</span><span class="
|
1289
|
-
</span><span class="inferred0"><a name="line668" /> 668
|
1290
|
-
</span><span class="
|
1291
|
-
</span><span class="marked0"><a name="line670" /> 670
|
1292
|
-
</span><span class="marked1"><a name="line671" /> 671 @
|
1293
|
-
</span><span class="marked0"><a name="line672" /> 672 @
|
1294
|
-
</span><span class="
|
1295
|
-
</span><span class="inferred0"><a name="line674" /> 674
|
1296
|
-
</span><span class="inferred1"><a name="line675" /> 675
|
1297
|
-
</span><span class="
|
1298
|
-
</span><span class="marked1"><a name="line677" /> 677
|
1299
|
-
</span><span class="marked0"><a name="line678" /> 678
|
1300
|
-
</span><span class="marked1"><a name="line679" /> 679
|
1301
|
-
</span><span class="
|
1302
|
-
</span><span class="
|
1303
|
-
</span><span class="
|
1304
|
-
</span><span class="inferred1"><a name="line683" /> 683
|
1305
|
-
</span><span class="inferred0"><a name="line684" /> 684
|
1306
|
-
</span><span class="inferred1"><a name="line685" /> 685
|
1307
|
-
</span><span class="
|
1308
|
-
</span><span class="marked1"><a name="line687" /> 687
|
1309
|
-
</span><span class="marked0"><a name="line688" /> 688
|
1310
|
-
</span><span class="
|
1311
|
-
</span><span class="inferred0"><a name="line690" /> 690
|
1312
|
-
</span><span class="
|
1313
|
-
</span><span class="marked0"><a name="line692" /> 692
|
1314
|
-
</span><span class="marked1"><a name="line693" /> 693
|
1315
|
-
</span><span class="
|
1316
|
-
</span><span class="inferred1"><a name="line695" /> 695
|
1317
|
-
</span><span class="inferred0"><a name="line696" /> 696 # Returns
|
1318
|
-
</span><span class="
|
1319
|
-
</span><span class="marked0"><a name="line698" /> 698
|
1320
|
-
</span><span class="marked1"><a name="line699" /> 699 return
|
1321
|
-
</span><span class="
|
1322
|
-
</span><span class="inferred1"><a name="line701" /> 701
|
1323
|
-
</span><span class="inferred0"><a name="line702" /> 702
|
1324
|
-
</span><span class="inferred1"><a name="line703" /> 703 # Returns
|
1325
|
-
</span><span class="inferred0"><a name="line704" /> 704 #
|
1326
|
-
</span><span class="
|
1327
|
-
</span><span class="marked0"><a name="line706" /> 706
|
1328
|
-
</span><span class="marked1"><a name="line707" /> 707 return
|
1329
|
-
</span><span class="
|
1330
|
-
</span><span class="inferred1"><a name="line709" /> 709
|
1331
|
-
</span><span class="inferred0"><a name="line710" /> 710
|
1332
|
-
</span><span class="
|
1333
|
-
</span><span class="marked0"><a name="line712" /> 712
|
1334
|
-
</span><span class="marked1"><a name="line713" /> 713
|
1335
|
-
</span><span class="
|
1336
|
-
</span><span class="inferred1"><a name="line715" /> 715
|
1337
|
-
</span><span class="
|
1338
|
-
</span><span class="marked1"><a name="line717" /> 717
|
1339
|
-
</span><span class="marked0"><a name="line718" /> 718
|
1340
|
-
</span><span class="
|
1341
|
-
</span><span class="inferred0"><a name="line720" /> 720
|
1342
|
-
</span><span class="
|
1343
|
-
</span><span class="marked0"><a name="line722" /> 722
|
1344
|
-
</span><span class="marked1"><a name="line723" /> 723
|
1345
|
-
</span><span class="
|
1346
|
-
</span><span class="inferred1"><a name="line725" /> 725
|
1347
|
-
</span><span class="
|
1348
|
-
</span><span class="marked1"><a name="line727" /> 727
|
1349
|
-
</span><span class="marked0"><a name="line728" /> 728
|
1350
|
-
</span><span class="
|
1351
|
-
</span><span class="inferred0"><a name="line730" /> 730
|
1352
|
-
</span><span class="
|
1353
|
-
</span><span class="marked0"><a name="line732" /> 732
|
1354
|
-
</span><span class="marked1"><a name="line733" /> 733 return self.
|
1355
|
-
</span><span class="
|
1356
|
-
</span><span class="inferred1"><a name="line735" /> 735
|
1357
|
-
</span><span class="inferred0"><a name="line736" /> 736
|
1358
|
-
</span><span class="
|
1359
|
-
</span><span class="marked0"><a name="line738" /> 738
|
1360
|
-
</span><span class="marked1"><a name="line739" /> 739
|
1361
|
-
</span><span class="
|
1362
|
-
</span><span class="inferred1"><a name="line741" /> 741
|
1363
|
-
</span><span class="
|
1364
|
-
</span><span class="marked1"><a name="line743" /> 743
|
1365
|
-
</span><span class="marked0"><a name="line744" /> 744
|
1366
|
-
</span><span class="
|
1367
|
-
</span><span class="inferred0"><a name="line746" /> 746
|
1368
|
-
</span><span class="
|
1369
|
-
</span><span class="marked0"><a name="line748" /> 748
|
1370
|
-
</span><span class="marked1"><a name="line749" /> 749
|
1371
|
-
</span><span class="
|
1372
|
-
</span><span class="
|
1373
|
-
</span><span class="marked0"><a name="line752" /> 752
|
1374
|
-
</span><span class="
|
1375
|
-
</span><span class="inferred0"><a name="line754" /> 754
|
1376
|
-
</span><span class="
|
1377
|
-
</span><span class="marked0"><a name="line756" /> 756
|
1378
|
-
</span><span class="marked1"><a name="line757" /> 757
|
1379
|
-
</span><span class="marked0"><a name="line758" /> 758
|
1380
|
-
</span><span class="marked1"><a name="line759" /> 759
|
1381
|
-
</span><span class="marked0"><a name="line760" /> 760
|
1382
|
-
</span><span class="marked1"><a name="line761" /> 761
|
1383
|
-
</span><span class="marked0"><a name="line762" /> 762
|
1384
|
-
</span><span class="
|
1385
|
-
</span><span class="inferred0"><a name="line764" /> 764
|
1386
|
-
</span><span class="
|
1387
|
-
</span><span class="marked0"><a name="line766" /> 766
|
1388
|
-
</span><span class="marked1"><a name="line767" /> 767
|
1389
|
-
</span><span class="marked0"><a name="line768" /> 768
|
1390
|
-
</span><span class="marked1"><a name="line769" /> 769
|
1391
|
-
</span><span class="marked0"><a name="line770" /> 770
|
1392
|
-
</span><span class="marked1"><a name="line771" /> 771
|
1393
|
-
</span><span class="marked0"><a name="line772" /> 772
|
1394
|
-
</span><span class="
|
1395
|
-
</span><span class="
|
1396
|
-
</span><span class="marked1"><a name="line775" /> 775
|
1397
|
-
</span><span class="marked0"><a name="line776" /> 776
|
1398
|
-
</span><span class="marked1"><a name="line777" /> 777
|
1399
|
-
</span><span class="marked0"><a name="line778" /> 778
|
1400
|
-
</span><span class="marked1"><a name="line779" /> 779
|
1401
|
-
</span><span class="marked0"><a name="line780" /> 780
|
1402
|
-
</span><span class="
|
1403
|
-
</span><span class="
|
1404
|
-
</span><span class="marked1"><a name="line783" /> 783
|
1405
|
-
</span><span class="marked0"><a name="line784" /> 784
|
1406
|
-
</span><span class="marked1"><a name="line785" /> 785
|
1407
|
-
</span><span class="
|
1408
|
-
</span><span class="
|
1409
|
-
</span><span class="
|
1410
|
-
</span><span class="inferred1"><a name="line789" /> 789
|
1411
|
-
</span><span class="
|
1412
|
-
</span><span class="marked1"><a name="line791" /> 791
|
1413
|
-
</span><span class="
|
1414
|
-
</span><span class="
|
1415
|
-
</span><span class="marked0"><a name="line794" /> 794 base_path = self.
|
1416
|
-
</span><span class="marked1"><a name="line795" /> 795 base_path
|
1417
|
-
</span><span class="marked0"><a name="line796" /> 796
|
1418
|
-
</span><span class="inferred1"><a name="line797" /> 797
|
1419
|
-
</span><span class="
|
1420
|
-
</span><span class="inferred1"><a name="line799" /> 799
|
1421
|
-
</span><span class="
|
1422
|
-
</span><span class="marked1"><a name="line801" /> 801
|
1423
|
-
</span><span class="marked0"><a name="line802" /> 802
|
1424
|
-
</span><span class="
|
1425
|
-
</span><span class="
|
1426
|
-
</span><span class="
|
1427
|
-
</span><span class="inferred0"><a name="line806" /> 806
|
1428
|
-
</span><span class="
|
1429
|
-
</span><span class="inferred0"><a name="line808" /> 808
|
1430
|
-
</span><span class="marked1"><a name="line809" /> 809
|
1431
|
-
</span><span class="
|
1432
|
-
</span><span class="inferred1"><a name="line811" /> 811
|
1433
|
-
</span><span class="inferred0"><a name="line812" /> 812
|
1434
|
-
</span><span class="
|
1435
|
-
</span><span class="inferred0"><a name="line814" /> 814
|
1436
|
-
</span><span class="
|
1437
|
-
</span><span class="inferred0"><a name="line816" /> 816
|
1438
|
-
</span><span class="
|
1439
|
-
</span><span class="marked0"><a name="line818" /> 818
|
1440
|
-
</span><span class="
|
1441
|
-
</span><span class="
|
1442
|
-
</span><span class="inferred1"><a name="line821" /> 821
|
1443
|
-
</span><span class="marked0"><a name="line822" /> 822
|
1444
|
-
</span><span class="
|
1445
|
-
</span><span class="marked0"><a name="line824" /> 824
|
1446
|
-
</span><span class="inferred1"><a name="line825" /> 825
|
1447
|
-
</span><span class="
|
1448
|
-
</span><span class="
|
1449
|
-
</span><span class="
|
1450
|
-
</span><span class="
|
1451
|
-
</span><span class="inferred0"><a name="line830" /> 830
|
1452
|
-
</span><span class="inferred1"><a name="line831" /> 831
|
1453
|
-
</span><span class="inferred0"><a name="line832" /> 832
|
1454
|
-
</span><span class="inferred1"><a name="line833" /> 833
|
1455
|
-
</span><span class="
|
1456
|
-
</span><span class="marked1"><a name="line835" /> 835
|
1457
|
-
</span><span class="
|
1458
|
-
</span><span class="
|
1459
|
-
</span><span class="
|
1460
|
-
</span><span class="marked1"><a name="line839" /> 839
|
1461
|
-
</span><span class="
|
1462
|
-
</span><span class="marked1"><a name="line841" /> 841
|
1463
|
-
</span><span class="marked0"><a name="line842" /> 842
|
1464
|
-
</span><span class="inferred1"><a name="line843" /> 843
|
1465
|
-
</span><span class="
|
1466
|
-
</span><span class="marked1"><a name="line845" /> 845
|
1467
|
-
</span><span class="
|
1468
|
-
</span><span class="marked1"><a name="line847" /> 847
|
1469
|
-
</span><span class="marked0"><a name="line848" /> 848
|
1470
|
-
</span><span class="
|
1471
|
-
</span><span class="
|
1472
|
-
</span><span class="
|
1473
|
-
</span><span class="
|
1474
|
-
</span><span class="marked1"><a name="line853" /> 853
|
1475
|
-
</span><span class="marked0"><a name="line854" /> 854
|
1476
|
-
</span><span class="marked1"><a name="line855" /> 855
|
1477
|
-
</span><span class="marked0"><a name="line856" /> 856
|
1478
|
-
</span><span class="marked1"><a name="line857" /> 857
|
1479
|
-
</span><span class="marked0"><a name="line858" /> 858
|
1480
|
-
</span><span class="inferred1"><a name="line859" /> 859
|
1481
|
-
</span><span class="
|
1482
|
-
</span><span class="
|
904
|
+
</span><span class="inferred1"><a name="line283" /> 283 # Pattern failed to match URI.
|
905
|
+
</span><span class="marked0"><a name="line284" /> 284 return nil
|
906
|
+
</span><span class="inferred1"><a name="line285" /> 285 end
|
907
|
+
</span><span class="inferred0"><a name="line286" /> 286 end
|
908
|
+
</span><span class="inferred1"><a name="line287" /> 287
|
909
|
+
</span><span class="inferred0"><a name="line288" /> 288 # Joins several uris together.
|
910
|
+
</span><span class="marked1"><a name="line289" /> 289 def self.join(*uris)
|
911
|
+
</span><span class="marked0"><a name="line290" /> 290 uri_objects = uris.collect do |uri|
|
912
|
+
</span><span class="marked1"><a name="line291" /> 291 uri.kind_of?(self) ? uri : self.parse(uri.to_s)
|
913
|
+
</span><span class="inferred0"><a name="line292" /> 292 end
|
914
|
+
</span><span class="marked1"><a name="line293" /> 293 result = uri_objects.shift.dup
|
915
|
+
</span><span class="marked0"><a name="line294" /> 294 for uri in uri_objects
|
916
|
+
</span><span class="marked1"><a name="line295" /> 295 result.merge!(uri)
|
917
|
+
</span><span class="inferred0"><a name="line296" /> 296 end
|
918
|
+
</span><span class="marked1"><a name="line297" /> 297 return result
|
919
|
+
</span><span class="inferred0"><a name="line298" /> 298 end
|
920
|
+
</span><span class="inferred1"><a name="line299" /> 299
|
921
|
+
</span><span class="inferred0"><a name="line300" /> 300 # Percent encodes a URI segment. Returns a string. Takes an optional
|
922
|
+
</span><span class="inferred1"><a name="line301" /> 301 # character class parameter, which should be specified as a string
|
923
|
+
</span><span class="inferred0"><a name="line302" /> 302 # containing a regular expression character class (not including the
|
924
|
+
</span><span class="inferred1"><a name="line303" /> 303 # surrounding square brackets). The character class parameter defaults
|
925
|
+
</span><span class="inferred0"><a name="line304" /> 304 # to the reserved plus unreserved character classes specified in
|
926
|
+
</span><span class="inferred1"><a name="line305" /> 305 # RFC 3986. Usage of the constants within the CharacterClasses module is
|
927
|
+
</span><span class="inferred0"><a name="line306" /> 306 # highly recommended when using this method.
|
928
|
+
</span><span class="inferred1"><a name="line307" /> 307 #
|
929
|
+
</span><span class="inferred0"><a name="line308" /> 308 # An example:
|
930
|
+
</span><span class="inferred1"><a name="line309" /> 309 #
|
931
|
+
</span><span class="inferred0"><a name="line310" /> 310 # Addressable::URI.escape_segment("simple-example", "b-zB-Z0-9")
|
932
|
+
</span><span class="inferred1"><a name="line311" /> 311 # => "simple%2Dex%61mple"
|
933
|
+
</span><span class="marked0"><a name="line312" /> 312 def self.encode_segment(segment, character_class=
|
934
|
+
</span><span class="inferred1"><a name="line313" /> 313 Addressable::URI::CharacterClasses::RESERVED +
|
935
|
+
</span><span class="marked0"><a name="line314" /> 314 Addressable::URI::CharacterClasses::UNRESERVED)
|
936
|
+
</span><span class="marked1"><a name="line315" /> 315 return nil if segment.nil?
|
937
|
+
</span><span class="inferred0"><a name="line316" /> 316 return segment.gsub(
|
938
|
+
</span><span class="inferred1"><a name="line317" /> 317 /[^#{character_class}]/
|
939
|
+
</span><span class="inferred0"><a name="line318" /> 318 ) do |sequence|
|
940
|
+
</span><span class="marked1"><a name="line319" /> 319 ("%" + sequence.unpack('C')[0].to_s(16).upcase)
|
941
|
+
</span><span class="marked0"><a name="line320" /> 320 end
|
942
|
+
</span><span class="inferred1"><a name="line321" /> 321 end
|
943
|
+
</span><span class="inferred0"><a name="line322" /> 322
|
944
|
+
</span><span class="inferred1"><a name="line323" /> 323 # Unencodes any percent encoded characters within a URI segment.
|
945
|
+
</span><span class="inferred0"><a name="line324" /> 324 # Returns a string.
|
946
|
+
</span><span class="marked1"><a name="line325" /> 325 def self.unencode_segment(segment)
|
947
|
+
</span><span class="marked0"><a name="line326" /> 326 return nil if segment.nil?
|
948
|
+
</span><span class="inferred1"><a name="line327" /> 327 return segment.to_s.gsub(/%[0-9a-f]{2}/i) do |sequence|
|
949
|
+
</span><span class="marked0"><a name="line328" /> 328 sequence[1..3].to_i(16).chr
|
950
|
+
</span><span class="marked1"><a name="line329" /> 329 end
|
951
|
+
</span><span class="inferred0"><a name="line330" /> 330 end
|
952
|
+
</span><span class="inferred1"><a name="line331" /> 331
|
953
|
+
</span><span class="inferred0"><a name="line332" /> 332 # Percent encodes any special characters in the URI. This method does
|
954
|
+
</span><span class="inferred1"><a name="line333" /> 333 # not take IRIs or IDNs into account.
|
955
|
+
</span><span class="marked0"><a name="line334" /> 334 def self.encode(uri)
|
956
|
+
</span><span class="marked1"><a name="line335" /> 335 uri_object = uri.kind_of?(self) ? uri : self.parse(uri.to_s)
|
957
|
+
</span><span class="marked0"><a name="line336" /> 336 return Addressable::URI.new(
|
958
|
+
</span><span class="marked1"><a name="line337" /> 337 self.encode_segment(uri_object.scheme,
|
959
|
+
</span><span class="inferred0"><a name="line338" /> 338 Addressable::URI::CharacterClasses::SCHEME),
|
960
|
+
</span><span class="marked1"><a name="line339" /> 339 self.encode_segment(uri_object.user,
|
961
|
+
</span><span class="inferred0"><a name="line340" /> 340 Addressable::URI::CharacterClasses::AUTHORITY),
|
962
|
+
</span><span class="marked1"><a name="line341" /> 341 self.encode_segment(uri_object.password,
|
963
|
+
</span><span class="inferred0"><a name="line342" /> 342 Addressable::URI::CharacterClasses::AUTHORITY),
|
964
|
+
</span><span class="marked1"><a name="line343" /> 343 self.encode_segment(uri_object.host,
|
965
|
+
</span><span class="inferred0"><a name="line344" /> 344 Addressable::URI::CharacterClasses::AUTHORITY),
|
966
|
+
</span><span class="marked1"><a name="line345" /> 345 self.encode_segment(uri_object.specified_port,
|
967
|
+
</span><span class="inferred0"><a name="line346" /> 346 Addressable::URI::CharacterClasses::AUTHORITY),
|
968
|
+
</span><span class="marked1"><a name="line347" /> 347 self.encode_segment(uri_object.path,
|
969
|
+
</span><span class="inferred0"><a name="line348" /> 348 Addressable::URI::CharacterClasses::PATH),
|
970
|
+
</span><span class="marked1"><a name="line349" /> 349 self.encode_segment(uri_object.query,
|
971
|
+
</span><span class="inferred0"><a name="line350" /> 350 Addressable::URI::CharacterClasses::QUERY),
|
972
|
+
</span><span class="marked1"><a name="line351" /> 351 self.encode_segment(uri_object.fragment,
|
973
|
+
</span><span class="inferred0"><a name="line352" /> 352 Addressable::URI::CharacterClasses::FRAGMENT)
|
974
|
+
</span><span class="marked1"><a name="line353" /> 353 ).to_s
|
975
|
+
</span><span class="inferred0"><a name="line354" /> 354 end
|
976
|
+
</span><span class="inferred1"><a name="line355" /> 355
|
977
|
+
</span><span class="marked0"><a name="line356" /> 356 class << self
|
978
|
+
</span><span class="marked1"><a name="line357" /> 357 alias_method :escape, :encode
|
979
|
+
</span><span class="inferred0"><a name="line358" /> 358 end
|
980
|
+
</span><span class="inferred1"><a name="line359" /> 359
|
981
|
+
</span><span class="inferred0"><a name="line360" /> 360 # Normalizes the encoding of a URI. Characters within a hostname are
|
982
|
+
</span><span class="inferred1"><a name="line361" /> 361 # not percent encoded to allow for internationalized domain names.
|
983
|
+
</span><span class="marked0"><a name="line362" /> 362 def self.normalized_encode(uri)
|
984
|
+
</span><span class="marked1"><a name="line363" /> 363 uri_object = uri.kind_of?(self) ? uri : self.parse(uri.to_s)
|
985
|
+
</span><span class="marked0"><a name="line364" /> 364 segments = {
|
986
|
+
</span><span class="marked1"><a name="line365" /> 365 :scheme => self.unencode_segment(uri_object.scheme),
|
987
|
+
</span><span class="marked0"><a name="line366" /> 366 :user => self.unencode_segment(uri_object.user),
|
988
|
+
</span><span class="marked1"><a name="line367" /> 367 :password => self.unencode_segment(uri_object.password),
|
989
|
+
</span><span class="marked0"><a name="line368" /> 368 :host => self.unencode_segment(uri_object.host),
|
990
|
+
</span><span class="marked1"><a name="line369" /> 369 :port => self.unencode_segment(uri_object.specified_port),
|
991
|
+
</span><span class="marked0"><a name="line370" /> 370 :path => self.unencode_segment(uri_object.path),
|
992
|
+
</span><span class="marked1"><a name="line371" /> 371 :query => self.unencode_segment(uri_object.query),
|
993
|
+
</span><span class="marked0"><a name="line372" /> 372 :fragment => self.unencode_segment(uri_object.fragment)
|
994
|
+
</span><span class="inferred1"><a name="line373" /> 373 }
|
995
|
+
</span><span class="marked0"><a name="line374" /> 374 if URI::IDNA.send(:use_libidn?)
|
996
|
+
</span><span class="marked1"><a name="line375" /> 375 segments.each do |key, value|
|
997
|
+
</span><span class="marked0"><a name="line376" /> 376 if value != nil
|
998
|
+
</span><span class="marked1"><a name="line377" /> 377 segments[key] = IDN::Stringprep.nfkc_normalize(value.to_s)
|
999
|
+
</span><span class="inferred0"><a name="line378" /> 378 end
|
1000
|
+
</span><span class="inferred1"><a name="line379" /> 379 end
|
1001
|
+
</span><span class="inferred0"><a name="line380" /> 380 end
|
1002
|
+
</span><span class="marked1"><a name="line381" /> 381 return Addressable::URI.new(
|
1003
|
+
</span><span class="marked0"><a name="line382" /> 382 self.encode_segment(segments[:scheme],
|
1004
|
+
</span><span class="inferred1"><a name="line383" /> 383 Addressable::URI::CharacterClasses::SCHEME),
|
1005
|
+
</span><span class="marked0"><a name="line384" /> 384 self.encode_segment(segments[:user],
|
1006
|
+
</span><span class="inferred1"><a name="line385" /> 385 Addressable::URI::CharacterClasses::AUTHORITY),
|
1007
|
+
</span><span class="marked0"><a name="line386" /> 386 self.encode_segment(segments[:password],
|
1008
|
+
</span><span class="inferred1"><a name="line387" /> 387 Addressable::URI::CharacterClasses::AUTHORITY),
|
1009
|
+
</span><span class="inferred0"><a name="line388" /> 388 segments[:host],
|
1010
|
+
</span><span class="inferred1"><a name="line389" /> 389 segments[:port],
|
1011
|
+
</span><span class="marked0"><a name="line390" /> 390 self.encode_segment(segments[:path],
|
1012
|
+
</span><span class="inferred1"><a name="line391" /> 391 Addressable::URI::CharacterClasses::PATH),
|
1013
|
+
</span><span class="marked0"><a name="line392" /> 392 self.encode_segment(segments[:query],
|
1014
|
+
</span><span class="inferred1"><a name="line393" /> 393 Addressable::URI::CharacterClasses::QUERY),
|
1015
|
+
</span><span class="marked0"><a name="line394" /> 394 self.encode_segment(segments[:fragment],
|
1016
|
+
</span><span class="inferred1"><a name="line395" /> 395 Addressable::URI::CharacterClasses::FRAGMENT)
|
1017
|
+
</span><span class="marked0"><a name="line396" /> 396 ).to_s
|
1018
|
+
</span><span class="inferred1"><a name="line397" /> 397 end
|
1019
|
+
</span><span class="inferred0"><a name="line398" /> 398
|
1020
|
+
</span><span class="inferred1"><a name="line399" /> 399 # Extracts uris from an arbitrary body of text.
|
1021
|
+
</span><span class="marked0"><a name="line400" /> 400 def self.extract(text, options={})
|
1022
|
+
</span><span class="marked1"><a name="line401" /> 401 defaults = {:base => nil, :parse => false}
|
1023
|
+
</span><span class="marked0"><a name="line402" /> 402 options = defaults.merge(options)
|
1024
|
+
</span><span class="marked1"><a name="line403" /> 403 raise InvalidOptionError unless (options.keys - defaults.keys).empty?
|
1025
|
+
</span><span class="inferred0"><a name="line404" /> 404 # This regular expression needs to be less forgiving or else it would
|
1026
|
+
</span><span class="inferred1"><a name="line405" /> 405 # match virtually all text. Which isn't exactly what we're going for.
|
1027
|
+
</span><span class="marked0"><a name="line406" /> 406 extract_regex = /((([a-z\+]+):)[^ \n\<\>\"\\]+[\w\/])/
|
1028
|
+
</span><span class="marked1"><a name="line407" /> 407 extracted_uris =
|
1029
|
+
</span><span class="marked0"><a name="line408" /> 408 text.scan(extract_regex).collect { |match| match[0] }
|
1030
|
+
</span><span class="marked1"><a name="line409" /> 409 sgml_extract_regex = /<[^>]+href=\"([^\"]+?)\"[^>]*>/
|
1031
|
+
</span><span class="marked0"><a name="line410" /> 410 sgml_extracted_uris =
|
1032
|
+
</span><span class="inferred1"><a name="line411" /> 411 text.scan(sgml_extract_regex).collect { |match| match[0] }
|
1033
|
+
</span><span class="marked0"><a name="line412" /> 412 extracted_uris.concat(sgml_extracted_uris - extracted_uris)
|
1034
|
+
</span><span class="marked1"><a name="line413" /> 413 textile_extract_regex = /\".+?\":([^ ]+\/[^ ]+)[ \,\.\;\:\?\!\<\>\"]/i
|
1035
|
+
</span><span class="marked0"><a name="line414" /> 414 textile_extracted_uris =
|
1036
|
+
</span><span class="inferred1"><a name="line415" /> 415 text.scan(textile_extract_regex).collect { |match| match[0] }
|
1037
|
+
</span><span class="marked0"><a name="line416" /> 416 extracted_uris.concat(textile_extracted_uris - extracted_uris)
|
1038
|
+
</span><span class="marked1"><a name="line417" /> 417 parsed_uris = []
|
1039
|
+
</span><span class="marked0"><a name="line418" /> 418 base_uri = nil
|
1040
|
+
</span><span class="marked1"><a name="line419" /> 419 if options[:base] != nil
|
1041
|
+
</span><span class="marked0"><a name="line420" /> 420 base_uri = options[:base] if options[:base].kind_of?(self)
|
1042
|
+
</span><span class="marked1"><a name="line421" /> 421 base_uri = self.parse(options[:base].to_s) if base_uri == nil
|
1043
|
+
</span><span class="inferred0"><a name="line422" /> 422 end
|
1044
|
+
</span><span class="marked1"><a name="line423" /> 423 for uri_string in extracted_uris
|
1045
|
+
</span><span class="marked0"><a name="line424" /> 424 begin
|
1046
|
+
</span><span class="marked1"><a name="line425" /> 425 if base_uri == nil
|
1047
|
+
</span><span class="marked0"><a name="line426" /> 426 parsed_uris << self.parse(uri_string)
|
1048
|
+
</span><span class="inferred1"><a name="line427" /> 427 else
|
1049
|
+
</span><span class="marked0"><a name="line428" /> 428 parsed_uris << (base_uri + self.parse(uri_string))
|
1050
|
+
</span><span class="inferred1"><a name="line429" /> 429 end
|
1051
|
+
</span><span class="inferred0"><a name="line430" /> 430 rescue Exception
|
1052
|
+
</span><span class="marked1"><a name="line431" /> 431 nil
|
1053
|
+
</span><span class="inferred0"><a name="line432" /> 432 end
|
1054
|
+
</span><span class="inferred1"><a name="line433" /> 433 end
|
1055
|
+
</span><span class="marked0"><a name="line434" /> 434 parsed_uris.reject! do |uri|
|
1056
|
+
</span><span class="marked1"><a name="line435" /> 435 (uri.scheme =~ /T\d+/ ||
|
1057
|
+
</span><span class="marked0"><a name="line436" /> 436 uri.scheme == "xmlns" ||
|
1058
|
+
</span><span class="marked1"><a name="line437" /> 437 uri.scheme == "xml" ||
|
1059
|
+
</span><span class="marked0"><a name="line438" /> 438 uri.scheme == "thr" ||
|
1060
|
+
</span><span class="marked1"><a name="line439" /> 439 uri.scheme == "this" ||
|
1061
|
+
</span><span class="marked0"><a name="line440" /> 440 uri.scheme == "float" ||
|
1062
|
+
</span><span class="marked1"><a name="line441" /> 441 uri.scheme == "user" ||
|
1063
|
+
</span><span class="marked0"><a name="line442" /> 442 uri.scheme == "username" ||
|
1064
|
+
</span><span class="marked1"><a name="line443" /> 443 uri.scheme == "out")
|
1065
|
+
</span><span class="inferred0"><a name="line444" /> 444 end
|
1066
|
+
</span><span class="marked1"><a name="line445" /> 445 if options[:parse]
|
1067
|
+
</span><span class="marked0"><a name="line446" /> 446 return parsed_uris
|
1068
|
+
</span><span class="inferred1"><a name="line447" /> 447 else
|
1069
|
+
</span><span class="marked0"><a name="line448" /> 448 return parsed_uris.collect { |uri| uri.to_s }
|
1070
|
+
</span><span class="inferred1"><a name="line449" /> 449 end
|
1071
|
+
</span><span class="inferred0"><a name="line450" /> 450 end
|
1072
|
+
</span><span class="inferred1"><a name="line451" /> 451
|
1073
|
+
</span><span class="inferred0"><a name="line452" /> 452 # Creates a new uri object from component parts. Passing nil for
|
1074
|
+
</span><span class="inferred1"><a name="line453" /> 453 # any of these parameters is acceptable.
|
1075
|
+
</span><span class="marked0"><a name="line454" /> 454 def initialize(scheme, user, password, host, port, path, query, fragment)
|
1076
|
+
</span><span class="marked1"><a name="line455" /> 455 @scheme = scheme
|
1077
|
+
</span><span class="marked0"><a name="line456" /> 456 @scheme = nil if @scheme.to_s.strip == ""
|
1078
|
+
</span><span class="marked1"><a name="line457" /> 457 @user = user
|
1079
|
+
</span><span class="marked0"><a name="line458" /> 458 @password = password
|
1080
|
+
</span><span class="marked1"><a name="line459" /> 459 @host = host
|
1081
|
+
</span><span class="marked0"><a name="line460" /> 460 @specified_port = port.to_s
|
1082
|
+
</span><span class="marked1"><a name="line461" /> 461 @port = port
|
1083
|
+
</span><span class="marked0"><a name="line462" /> 462 @port = @port.to_s if @port.kind_of?(Fixnum)
|
1084
|
+
</span><span class="marked1"><a name="line463" /> 463 if @port != nil && !(@port =~ /^\d+$/)
|
1085
|
+
</span><span class="marked0"><a name="line464" /> 464 raise InvalidURIError,
|
1086
|
+
</span><span class="inferred1"><a name="line465" /> 465 "Invalid port number: #{@port.inspect}"
|
1087
|
+
</span><span class="inferred0"><a name="line466" /> 466 end
|
1088
|
+
</span><span class="marked1"><a name="line467" /> 467 @port = @port.to_i
|
1089
|
+
</span><span class="marked0"><a name="line468" /> 468 @port = nil if @port == 0
|
1090
|
+
</span><span class="marked1"><a name="line469" /> 469 @path = path
|
1091
|
+
</span><span class="marked0"><a name="line470" /> 470 @query = query
|
1092
|
+
</span><span class="marked1"><a name="line471" /> 471 @fragment = fragment
|
1093
|
+
</span><span class="inferred0"><a name="line472" /> 472
|
1094
|
+
</span><span class="marked1"><a name="line473" /> 473 validate()
|
1095
|
+
</span><span class="inferred0"><a name="line474" /> 474 end
|
1096
|
+
</span><span class="inferred1"><a name="line475" /> 475
|
1097
|
+
</span><span class="inferred0"><a name="line476" /> 476 # Returns the scheme (protocol) for this URI.
|
1098
|
+
</span><span class="marked1"><a name="line477" /> 477 def scheme
|
1099
|
+
</span><span class="marked0"><a name="line478" /> 478 return @scheme
|
1100
|
+
</span><span class="marked1"><a name="line479" /> 479 end
|
1101
|
+
</span><span class="inferred0"><a name="line480" /> 480
|
1102
|
+
</span><span class="inferred1"><a name="line481" /> 481 # Sets the scheme (protocol for this URI.)
|
1103
|
+
</span><span class="marked0"><a name="line482" /> 482 def scheme=(new_scheme)
|
1104
|
+
</span><span class="marked1"><a name="line483" /> 483 @scheme = new_scheme
|
1105
|
+
</span><span class="marked0"><a name="line484" /> 484 end
|
1106
|
+
</span><span class="inferred1"><a name="line485" /> 485
|
1107
|
+
</span><span class="inferred0"><a name="line486" /> 486 # Returns the user for this URI.
|
1108
|
+
</span><span class="marked1"><a name="line487" /> 487 def user
|
1109
|
+
</span><span class="marked0"><a name="line488" /> 488 return @user
|
1110
|
+
</span><span class="marked1"><a name="line489" /> 489 end
|
1111
|
+
</span><span class="inferred0"><a name="line490" /> 490
|
1112
|
+
</span><span class="inferred1"><a name="line491" /> 491 # Sets the user for this URI.
|
1113
|
+
</span><span class="marked0"><a name="line492" /> 492 def user=(new_user)
|
1114
|
+
</span><span class="marked1"><a name="line493" /> 493 @user = new_user
|
1115
|
+
</span><span class="inferred0"><a name="line494" /> 494
|
1116
|
+
</span><span class="inferred1"><a name="line495" /> 495 # You can't have a nil user with a non-nil password
|
1117
|
+
</span><span class="marked0"><a name="line496" /> 496 if @password != nil
|
1118
|
+
</span><span class="marked1"><a name="line497" /> 497 @user = "" if @user.nil?
|
1119
|
+
</span><span class="inferred0"><a name="line498" /> 498 end
|
1120
|
+
</span><span class="inferred1"><a name="line499" /> 499
|
1121
|
+
</span><span class="inferred0"><a name="line500" /> 500 # Reset dependant values
|
1122
|
+
</span><span class="marked1"><a name="line501" /> 501 @userinfo = nil
|
1123
|
+
</span><span class="marked0"><a name="line502" /> 502 @authority = nil
|
1124
|
+
</span><span class="inferred1"><a name="line503" /> 503
|
1125
|
+
</span><span class="inferred0"><a name="line504" /> 504 # Ensure we haven't created an invalid URI
|
1126
|
+
</span><span class="marked1"><a name="line505" /> 505 validate()
|
1127
|
+
</span><span class="inferred0"><a name="line506" /> 506 end
|
1128
|
+
</span><span class="inferred1"><a name="line507" /> 507
|
1129
|
+
</span><span class="inferred0"><a name="line508" /> 508 # Returns the password for this URI.
|
1130
|
+
</span><span class="marked1"><a name="line509" /> 509 def password
|
1131
|
+
</span><span class="marked0"><a name="line510" /> 510 return @password
|
1132
|
+
</span><span class="marked1"><a name="line511" /> 511 end
|
1133
|
+
</span><span class="inferred0"><a name="line512" /> 512
|
1134
|
+
</span><span class="inferred1"><a name="line513" /> 513 # Sets the password for this URI.
|
1135
|
+
</span><span class="marked0"><a name="line514" /> 514 def password=(new_password)
|
1136
|
+
</span><span class="marked1"><a name="line515" /> 515 @password = new_password
|
1137
|
+
</span><span class="inferred0"><a name="line516" /> 516
|
1138
|
+
</span><span class="inferred1"><a name="line517" /> 517 # You can't have a nil user with a non-nil password
|
1139
|
+
</span><span class="marked0"><a name="line518" /> 518 if @password != nil
|
1140
|
+
</span><span class="marked1"><a name="line519" /> 519 @user = "" if @user.nil?
|
1141
|
+
</span><span class="inferred0"><a name="line520" /> 520 end
|
1142
|
+
</span><span class="inferred1"><a name="line521" /> 521
|
1143
|
+
</span><span class="inferred0"><a name="line522" /> 522 # Reset dependant values
|
1144
|
+
</span><span class="marked1"><a name="line523" /> 523 @userinfo = nil
|
1145
|
+
</span><span class="marked0"><a name="line524" /> 524 @authority = nil
|
1146
|
+
</span><span class="inferred1"><a name="line525" /> 525
|
1147
|
+
</span><span class="inferred0"><a name="line526" /> 526 # Ensure we haven't created an invalid URI
|
1148
|
+
</span><span class="marked1"><a name="line527" /> 527 validate()
|
1149
|
+
</span><span class="inferred0"><a name="line528" /> 528 end
|
1150
|
+
</span><span class="inferred1"><a name="line529" /> 529
|
1151
|
+
</span><span class="inferred0"><a name="line530" /> 530 # Returns the username and password segment of this URI.
|
1152
|
+
</span><span class="marked1"><a name="line531" /> 531 def userinfo
|
1153
|
+
</span><span class="marked0"><a name="line532" /> 532 if !defined?(@userinfo) || @userinfo.nil?
|
1154
|
+
</span><span class="marked1"><a name="line533" /> 533 current_user = self.user
|
1155
|
+
</span><span class="marked0"><a name="line534" /> 534 current_password = self.password
|
1156
|
+
</span><span class="marked1"><a name="line535" /> 535 if current_user == nil && current_password == nil
|
1157
|
+
</span><span class="marked0"><a name="line536" /> 536 @userinfo = nil
|
1158
|
+
</span><span class="marked1"><a name="line537" /> 537 elsif current_user != nil && current_password == nil
|
1159
|
+
</span><span class="marked0"><a name="line538" /> 538 @userinfo = "#{current_user}"
|
1160
|
+
</span><span class="marked1"><a name="line539" /> 539 elsif current_user != nil && current_password != nil
|
1161
|
+
</span><span class="marked0"><a name="line540" /> 540 @userinfo = "#{current_user}:#{current_password}"
|
1162
|
+
</span><span class="inferred1"><a name="line541" /> 541 end
|
1163
|
+
</span><span class="inferred0"><a name="line542" /> 542 end
|
1164
|
+
</span><span class="marked1"><a name="line543" /> 543 return @userinfo
|
1165
|
+
</span><span class="inferred0"><a name="line544" /> 544 end
|
1166
|
+
</span><span class="inferred1"><a name="line545" /> 545
|
1167
|
+
</span><span class="inferred0"><a name="line546" /> 546 # Sets the username and password segment of this URI.
|
1168
|
+
</span><span class="marked1"><a name="line547" /> 547 def userinfo=(new_userinfo)
|
1169
|
+
</span><span class="marked0"><a name="line548" /> 548 new_user = new_userinfo.to_s.strip.scan(/^(.*):/).flatten[0]
|
1170
|
+
</span><span class="marked1"><a name="line549" /> 549 new_password = new_userinfo.to_s.strip.scan(/:(.*)$/).flatten[0]
|
1171
|
+
</span><span class="inferred0"><a name="line550" /> 550
|
1172
|
+
</span><span class="inferred1"><a name="line551" /> 551 # Password assigned first to ensure validity in case of nil
|
1173
|
+
</span><span class="marked0"><a name="line552" /> 552 self.password = new_password
|
1174
|
+
</span><span class="marked1"><a name="line553" /> 553 self.user = new_user
|
1175
|
+
</span><span class="inferred0"><a name="line554" /> 554
|
1176
|
+
</span><span class="inferred1"><a name="line555" /> 555 # Reset dependant values
|
1177
|
+
</span><span class="marked0"><a name="line556" /> 556 @authority = nil
|
1178
|
+
</span><span class="inferred1"><a name="line557" /> 557
|
1179
|
+
</span><span class="inferred0"><a name="line558" /> 558 # Ensure we haven't created an invalid URI
|
1180
|
+
</span><span class="marked1"><a name="line559" /> 559 validate()
|
1181
|
+
</span><span class="inferred0"><a name="line560" /> 560 end
|
1182
|
+
</span><span class="inferred1"><a name="line561" /> 561
|
1183
|
+
</span><span class="inferred0"><a name="line562" /> 562 # Returns the host for this URI.
|
1184
|
+
</span><span class="marked1"><a name="line563" /> 563 def host
|
1185
|
+
</span><span class="marked0"><a name="line564" /> 564 return @host
|
1186
|
+
</span><span class="marked1"><a name="line565" /> 565 end
|
1187
|
+
</span><span class="inferred0"><a name="line566" /> 566
|
1188
|
+
</span><span class="inferred1"><a name="line567" /> 567 # Sets the host for this URI.
|
1189
|
+
</span><span class="marked0"><a name="line568" /> 568 def host=(new_host)
|
1190
|
+
</span><span class="marked1"><a name="line569" /> 569 @host = new_host
|
1191
|
+
</span><span class="inferred0"><a name="line570" /> 570
|
1192
|
+
</span><span class="inferred1"><a name="line571" /> 571 # Reset dependant values
|
1193
|
+
</span><span class="marked0"><a name="line572" /> 572 @authority = nil
|
1194
|
+
</span><span class="inferred1"><a name="line573" /> 573
|
1195
|
+
</span><span class="inferred0"><a name="line574" /> 574 # Ensure we haven't created an invalid URI
|
1196
|
+
</span><span class="marked1"><a name="line575" /> 575 validate()
|
1197
|
+
</span><span class="inferred0"><a name="line576" /> 576 end
|
1198
|
+
</span><span class="inferred1"><a name="line577" /> 577
|
1199
|
+
</span><span class="inferred0"><a name="line578" /> 578 # Returns the authority segment of this URI.
|
1200
|
+
</span><span class="marked1"><a name="line579" /> 579 def authority
|
1201
|
+
</span><span class="marked0"><a name="line580" /> 580 if !defined?(@authority) || @authority.nil?
|
1202
|
+
</span><span class="marked1"><a name="line581" /> 581 return nil if self.host.nil?
|
1203
|
+
</span><span class="marked0"><a name="line582" /> 582 @authority = ""
|
1204
|
+
</span><span class="marked1"><a name="line583" /> 583 if self.userinfo != nil
|
1205
|
+
</span><span class="marked0"><a name="line584" /> 584 @authority << "#{self.userinfo}@"
|
1206
|
+
</span><span class="inferred1"><a name="line585" /> 585 end
|
1207
|
+
</span><span class="marked0"><a name="line586" /> 586 @authority << self.host
|
1208
|
+
</span><span class="marked1"><a name="line587" /> 587 if self.specified_port != nil
|
1209
|
+
</span><span class="marked0"><a name="line588" /> 588 @authority << ":#{self.specified_port}"
|
1210
|
+
</span><span class="inferred1"><a name="line589" /> 589 end
|
1211
|
+
</span><span class="inferred0"><a name="line590" /> 590 end
|
1212
|
+
</span><span class="marked1"><a name="line591" /> 591 return @authority
|
1213
|
+
</span><span class="inferred0"><a name="line592" /> 592 end
|
1214
|
+
</span><span class="inferred1"><a name="line593" /> 593
|
1215
|
+
</span><span class="inferred0"><a name="line594" /> 594 # Sets the authority segment of this URI.
|
1216
|
+
</span><span class="marked1"><a name="line595" /> 595 def authority=(new_authority)
|
1217
|
+
</span><span class="marked0"><a name="line596" /> 596 if new_authority != nil
|
1218
|
+
</span><span class="marked1"><a name="line597" /> 597 new_userinfo = new_authority.scan(/^([^\[\]]*)@/).flatten[0]
|
1219
|
+
</span><span class="marked0"><a name="line598" /> 598 if new_userinfo != nil
|
1220
|
+
</span><span class="marked1"><a name="line599" /> 599 new_user = new_userinfo.strip.scan(/^([^:]*):?/).flatten[0]
|
1221
|
+
</span><span class="marked0"><a name="line600" /> 600 new_password = new_userinfo.strip.scan(/:(.*)$/).flatten[0]
|
1222
|
+
</span><span class="inferred1"><a name="line601" /> 601 end
|
1223
|
+
</span><span class="marked0"><a name="line602" /> 602 new_host =
|
1224
|
+
</span><span class="inferred1"><a name="line603" /> 603 new_authority.gsub(/^([^\[\]]*)@/, "").gsub(/:([^:@\[\]]*?)$/, "")
|
1225
|
+
</span><span class="marked0"><a name="line604" /> 604 new_port =
|
1226
|
+
</span><span class="inferred1"><a name="line605" /> 605 new_authority.scan(/:([^:@\[\]]*?)$/).flatten[0]
|
1227
|
+
</span><span class="inferred0"><a name="line606" /> 606 end
|
1228
|
+
</span><span class="marked1"><a name="line607" /> 607 new_port = nil if new_port == ""
|
1229
|
+
</span><span class="inferred0"><a name="line608" /> 608
|
1230
|
+
</span><span class="inferred1"><a name="line609" /> 609 # Password assigned first to ensure validity in case of nil
|
1231
|
+
</span><span class="marked0"><a name="line610" /> 610 self.password = new_password
|
1232
|
+
</span><span class="marked1"><a name="line611" /> 611 self.user = new_user
|
1233
|
+
</span><span class="marked0"><a name="line612" /> 612 self.host = new_host
|
1234
|
+
</span><span class="inferred1"><a name="line613" /> 613
|
1235
|
+
</span><span class="inferred0"><a name="line614" /> 614 # Port reset to allow port normalization
|
1236
|
+
</span><span class="marked1"><a name="line615" /> 615 @port = nil
|
1237
|
+
</span><span class="marked0"><a name="line616" /> 616 @specified_port = new_port
|
1238
|
+
</span><span class="inferred1"><a name="line617" /> 617
|
1239
|
+
</span><span class="inferred0"><a name="line618" /> 618 # Ensure we haven't created an invalid URI
|
1240
|
+
</span><span class="marked1"><a name="line619" /> 619 validate()
|
1241
|
+
</span><span class="inferred0"><a name="line620" /> 620 end
|
1242
|
+
</span><span class="inferred1"><a name="line621" /> 621
|
1243
|
+
</span><span class="inferred0"><a name="line622" /> 622 # Returns an array of known ip-based schemes. These schemes typically
|
1244
|
+
</span><span class="inferred1"><a name="line623" /> 623 # use a similar URI form:
|
1245
|
+
</span><span class="inferred0"><a name="line624" /> 624 # //<user>:<password>@<host>:<port>/<url-path>
|
1246
|
+
</span><span class="marked1"><a name="line625" /> 625 def self.ip_based_schemes
|
1247
|
+
</span><span class="marked0"><a name="line626" /> 626 return self.scheme_mapping.keys
|
1248
|
+
</span><span class="marked1"><a name="line627" /> 627 end
|
1249
|
+
</span><span class="inferred0"><a name="line628" /> 628
|
1250
|
+
</span><span class="inferred1"><a name="line629" /> 629 # Returns a hash of common IP-based schemes and their default port
|
1251
|
+
</span><span class="inferred0"><a name="line630" /> 630 # numbers. Adding new schemes to this hash, as necessary, will allow
|
1252
|
+
</span><span class="inferred1"><a name="line631" /> 631 # for better URI normalization.
|
1253
|
+
</span><span class="marked0"><a name="line632" /> 632 def self.scheme_mapping
|
1254
|
+
</span><span class="marked1"><a name="line633" /> 633 if !defined?(@protocol_mapping) || @protocol_mapping.nil?
|
1255
|
+
</span><span class="marked0"><a name="line634" /> 634 @protocol_mapping = {
|
1256
|
+
</span><span class="inferred1"><a name="line635" /> 635 "http" => 80,
|
1257
|
+
</span><span class="inferred0"><a name="line636" /> 636 "https" => 443,
|
1258
|
+
</span><span class="inferred1"><a name="line637" /> 637 "ftp" => 21,
|
1259
|
+
</span><span class="inferred0"><a name="line638" /> 638 "tftp" => 69,
|
1260
|
+
</span><span class="inferred1"><a name="line639" /> 639 "ssh" => 22,
|
1261
|
+
</span><span class="inferred0"><a name="line640" /> 640 "svn+ssh" => 22,
|
1262
|
+
</span><span class="inferred1"><a name="line641" /> 641 "telnet" => 23,
|
1263
|
+
</span><span class="inferred0"><a name="line642" /> 642 "nntp" => 119,
|
1264
|
+
</span><span class="inferred1"><a name="line643" /> 643 "gopher" => 70,
|
1265
|
+
</span><span class="inferred0"><a name="line644" /> 644 "wais" => 210,
|
1266
|
+
</span><span class="inferred1"><a name="line645" /> 645 "ldap" => 389,
|
1267
|
+
</span><span class="inferred0"><a name="line646" /> 646 "prospero" => 1525
|
1268
|
+
</span><span class="inferred1"><a name="line647" /> 647 }
|
1269
|
+
</span><span class="inferred0"><a name="line648" /> 648 end
|
1270
|
+
</span><span class="marked1"><a name="line649" /> 649 return @protocol_mapping
|
1271
|
+
</span><span class="inferred0"><a name="line650" /> 650 end
|
1272
|
+
</span><span class="inferred1"><a name="line651" /> 651
|
1273
|
+
</span><span class="inferred0"><a name="line652" /> 652 # Returns the port number for this URI. This method will normalize to the
|
1274
|
+
</span><span class="inferred1"><a name="line653" /> 653 # default port for the URI's scheme if the port isn't explicitly specified
|
1275
|
+
</span><span class="inferred0"><a name="line654" /> 654 # in the URI.
|
1276
|
+
</span><span class="marked1"><a name="line655" /> 655 def port
|
1277
|
+
</span><span class="marked0"><a name="line656" /> 656 if @port.to_i == 0
|
1278
|
+
</span><span class="marked1"><a name="line657" /> 657 if self.scheme.nil?
|
1279
|
+
</span><span class="marked0"><a name="line658" /> 658 @port = nil
|
1280
|
+
</span><span class="inferred1"><a name="line659" /> 659 else
|
1281
|
+
</span><span class="marked0"><a name="line660" /> 660 @port = self.class.scheme_mapping[self.scheme.strip.downcase]
|
1282
|
+
</span><span class="inferred1"><a name="line661" /> 661 end
|
1283
|
+
</span><span class="marked0"><a name="line662" /> 662 return @port
|
1284
|
+
</span><span class="inferred1"><a name="line663" /> 663 else
|
1285
|
+
</span><span class="marked0"><a name="line664" /> 664 @port = @port.to_i
|
1286
|
+
</span><span class="marked1"><a name="line665" /> 665 return @port
|
1287
|
+
</span><span class="inferred0"><a name="line666" /> 666 end
|
1288
|
+
</span><span class="marked1"><a name="line667" /> 667 end
|
1289
|
+
</span><span class="inferred0"><a name="line668" /> 668
|
1290
|
+
</span><span class="inferred1"><a name="line669" /> 669 # Sets the port for this URI.
|
1291
|
+
</span><span class="marked0"><a name="line670" /> 670 def port=(new_port)
|
1292
|
+
</span><span class="marked1"><a name="line671" /> 671 @port = new_port.to_s.to_i
|
1293
|
+
</span><span class="marked0"><a name="line672" /> 672 @specified_port = @port
|
1294
|
+
</span><span class="marked1"><a name="line673" /> 673 @authority = nil
|
1295
|
+
</span><span class="inferred0"><a name="line674" /> 674 end
|
1296
|
+
</span><span class="inferred1"><a name="line675" /> 675
|
1297
|
+
</span><span class="inferred0"><a name="line676" /> 676 # Returns the port number that was actually specified in the URI string.
|
1298
|
+
</span><span class="marked1"><a name="line677" /> 677 def specified_port
|
1299
|
+
</span><span class="marked0"><a name="line678" /> 678 port = @specified_port.to_s.to_i
|
1300
|
+
</span><span class="marked1"><a name="line679" /> 679 if port == 0
|
1301
|
+
</span><span class="marked0"><a name="line680" /> 680 return nil
|
1302
|
+
</span><span class="inferred1"><a name="line681" /> 681 else
|
1303
|
+
</span><span class="marked0"><a name="line682" /> 682 return port
|
1304
|
+
</span><span class="inferred1"><a name="line683" /> 683 end
|
1305
|
+
</span><span class="inferred0"><a name="line684" /> 684 end
|
1306
|
+
</span><span class="inferred1"><a name="line685" /> 685
|
1307
|
+
</span><span class="inferred0"><a name="line686" /> 686 # Returns the path for this URI.
|
1308
|
+
</span><span class="marked1"><a name="line687" /> 687 def path
|
1309
|
+
</span><span class="marked0"><a name="line688" /> 688 return @path
|
1310
|
+
</span><span class="marked1"><a name="line689" /> 689 end
|
1311
|
+
</span><span class="inferred0"><a name="line690" /> 690
|
1312
|
+
</span><span class="inferred1"><a name="line691" /> 691 # Sets the path for this URI.
|
1313
|
+
</span><span class="marked0"><a name="line692" /> 692 def path=(new_path)
|
1314
|
+
</span><span class="marked1"><a name="line693" /> 693 @path = new_path
|
1315
|
+
</span><span class="marked0"><a name="line694" /> 694 end
|
1316
|
+
</span><span class="inferred1"><a name="line695" /> 695
|
1317
|
+
</span><span class="inferred0"><a name="line696" /> 696 # Returns the basename, if any, of the file at the path being referenced.
|
1318
|
+
</span><span class="inferred1"><a name="line697" /> 697 # Returns nil if there is no path component.
|
1319
|
+
</span><span class="marked0"><a name="line698" /> 698 def basename
|
1320
|
+
</span><span class="marked1"><a name="line699" /> 699 return nil if self.path == nil
|
1321
|
+
</span><span class="marked0"><a name="line700" /> 700 return File.basename(self.path).gsub(/;[^\/]*$/, "")
|
1322
|
+
</span><span class="inferred1"><a name="line701" /> 701 end
|
1323
|
+
</span><span class="inferred0"><a name="line702" /> 702
|
1324
|
+
</span><span class="inferred1"><a name="line703" /> 703 # Returns the extension, if any, of the file at the path being referenced.
|
1325
|
+
</span><span class="inferred0"><a name="line704" /> 704 # Returns "" if there is no extension or nil if there is no path
|
1326
|
+
</span><span class="inferred1"><a name="line705" /> 705 # component.
|
1327
|
+
</span><span class="marked0"><a name="line706" /> 706 def extname
|
1328
|
+
</span><span class="marked1"><a name="line707" /> 707 return nil if self.path == nil
|
1329
|
+
</span><span class="marked0"><a name="line708" /> 708 return File.extname(self.basename.gsub(/;[^\/]*$/, ""))
|
1330
|
+
</span><span class="inferred1"><a name="line709" /> 709 end
|
1331
|
+
</span><span class="inferred0"><a name="line710" /> 710
|
1332
|
+
</span><span class="inferred1"><a name="line711" /> 711 # Returns the query string for this URI.
|
1333
|
+
</span><span class="marked0"><a name="line712" /> 712 def query
|
1334
|
+
</span><span class="marked1"><a name="line713" /> 713 return @query
|
1335
|
+
</span><span class="marked0"><a name="line714" /> 714 end
|
1336
|
+
</span><span class="inferred1"><a name="line715" /> 715
|
1337
|
+
</span><span class="inferred0"><a name="line716" /> 716 # Sets the query string for this URI.
|
1338
|
+
</span><span class="marked1"><a name="line717" /> 717 def query=(new_query)
|
1339
|
+
</span><span class="marked0"><a name="line718" /> 718 @query = new_query
|
1340
|
+
</span><span class="marked1"><a name="line719" /> 719 end
|
1341
|
+
</span><span class="inferred0"><a name="line720" /> 720
|
1342
|
+
</span><span class="inferred1"><a name="line721" /> 721 # Returns the fragment for this URI.
|
1343
|
+
</span><span class="marked0"><a name="line722" /> 722 def fragment
|
1344
|
+
</span><span class="marked1"><a name="line723" /> 723 return @fragment
|
1345
|
+
</span><span class="marked0"><a name="line724" /> 724 end
|
1346
|
+
</span><span class="inferred1"><a name="line725" /> 725
|
1347
|
+
</span><span class="inferred0"><a name="line726" /> 726 # Sets the fragment for this URI.
|
1348
|
+
</span><span class="marked1"><a name="line727" /> 727 def fragment=(new_fragment)
|
1349
|
+
</span><span class="marked0"><a name="line728" /> 728 @fragment = new_fragment
|
1350
|
+
</span><span class="marked1"><a name="line729" /> 729 end
|
1351
|
+
</span><span class="inferred0"><a name="line730" /> 730
|
1352
|
+
</span><span class="inferred1"><a name="line731" /> 731 # Returns true if the URI uses an IP-based protocol.
|
1353
|
+
</span><span class="marked0"><a name="line732" /> 732 def ip_based?
|
1354
|
+
</span><span class="marked1"><a name="line733" /> 733 return false if self.scheme.nil?
|
1355
|
+
</span><span class="marked0"><a name="line734" /> 734 return self.class.ip_based_schemes.include?(self.scheme.strip.downcase)
|
1356
|
+
</span><span class="inferred1"><a name="line735" /> 735 end
|
1357
|
+
</span><span class="inferred0"><a name="line736" /> 736
|
1358
|
+
</span><span class="inferred1"><a name="line737" /> 737 # Returns true if this URI is known to be relative.
|
1359
|
+
</span><span class="marked0"><a name="line738" /> 738 def relative?
|
1360
|
+
</span><span class="marked1"><a name="line739" /> 739 return self.scheme.nil?
|
1361
|
+
</span><span class="marked0"><a name="line740" /> 740 end
|
1362
|
+
</span><span class="inferred1"><a name="line741" /> 741
|
1363
|
+
</span><span class="inferred0"><a name="line742" /> 742 # Returns true if this URI is known to be absolute.
|
1364
|
+
</span><span class="marked1"><a name="line743" /> 743 def absolute?
|
1365
|
+
</span><span class="marked0"><a name="line744" /> 744 return !relative?
|
1366
|
+
</span><span class="marked1"><a name="line745" /> 745 end
|
1367
|
+
</span><span class="inferred0"><a name="line746" /> 746
|
1368
|
+
</span><span class="inferred1"><a name="line747" /> 747 # Joins two URIs together.
|
1369
|
+
</span><span class="marked0"><a name="line748" /> 748 def +(uri)
|
1370
|
+
</span><span class="marked1"><a name="line749" /> 749 if !uri.kind_of?(self.class)
|
1371
|
+
</span><span class="marked0"><a name="line750" /> 750 uri = URI.parse(uri.to_s)
|
1372
|
+
</span><span class="inferred1"><a name="line751" /> 751 end
|
1373
|
+
</span><span class="marked0"><a name="line752" /> 752 if uri.to_s == ""
|
1374
|
+
</span><span class="marked1"><a name="line753" /> 753 return self.dup
|
1375
|
+
</span><span class="inferred0"><a name="line754" /> 754 end
|
1376
|
+
</span><span class="inferred1"><a name="line755" /> 755
|
1377
|
+
</span><span class="marked0"><a name="line756" /> 756 joined_scheme = nil
|
1378
|
+
</span><span class="marked1"><a name="line757" /> 757 joined_user = nil
|
1379
|
+
</span><span class="marked0"><a name="line758" /> 758 joined_password = nil
|
1380
|
+
</span><span class="marked1"><a name="line759" /> 759 joined_host = nil
|
1381
|
+
</span><span class="marked0"><a name="line760" /> 760 joined_port = nil
|
1382
|
+
</span><span class="marked1"><a name="line761" /> 761 joined_path = nil
|
1383
|
+
</span><span class="marked0"><a name="line762" /> 762 joined_query = nil
|
1384
|
+
</span><span class="marked1"><a name="line763" /> 763 joined_fragment = nil
|
1385
|
+
</span><span class="inferred0"><a name="line764" /> 764
|
1386
|
+
</span><span class="inferred1"><a name="line765" /> 765 # Section 5.2.2 of RFC 3986
|
1387
|
+
</span><span class="marked0"><a name="line766" /> 766 if uri.scheme != nil
|
1388
|
+
</span><span class="marked1"><a name="line767" /> 767 joined_scheme = uri.scheme
|
1389
|
+
</span><span class="marked0"><a name="line768" /> 768 joined_user = uri.user
|
1390
|
+
</span><span class="marked1"><a name="line769" /> 769 joined_password = uri.password
|
1391
|
+
</span><span class="marked0"><a name="line770" /> 770 joined_host = uri.host
|
1392
|
+
</span><span class="marked1"><a name="line771" /> 771 joined_port = uri.specified_port
|
1393
|
+
</span><span class="marked0"><a name="line772" /> 772 joined_path = self.class.normalize_path(uri.path)
|
1394
|
+
</span><span class="marked1"><a name="line773" /> 773 joined_query = uri.query
|
1395
|
+
</span><span class="inferred0"><a name="line774" /> 774 else
|
1396
|
+
</span><span class="marked1"><a name="line775" /> 775 if uri.authority != nil
|
1397
|
+
</span><span class="marked0"><a name="line776" /> 776 joined_user = uri.user
|
1398
|
+
</span><span class="marked1"><a name="line777" /> 777 joined_password = uri.password
|
1399
|
+
</span><span class="marked0"><a name="line778" /> 778 joined_host = uri.host
|
1400
|
+
</span><span class="marked1"><a name="line779" /> 779 joined_port = uri.specified_port
|
1401
|
+
</span><span class="marked0"><a name="line780" /> 780 joined_path = self.class.normalize_path(uri.path)
|
1402
|
+
</span><span class="marked1"><a name="line781" /> 781 joined_query = uri.query
|
1403
|
+
</span><span class="inferred0"><a name="line782" /> 782 else
|
1404
|
+
</span><span class="marked1"><a name="line783" /> 783 if uri.path == nil || uri.path == ""
|
1405
|
+
</span><span class="marked0"><a name="line784" /> 784 joined_path = self.path
|
1406
|
+
</span><span class="marked1"><a name="line785" /> 785 if uri.query != nil
|
1407
|
+
</span><span class="marked0"><a name="line786" /> 786 joined_query = uri.query
|
1408
|
+
</span><span class="inferred1"><a name="line787" /> 787 else
|
1409
|
+
</span><span class="marked0"><a name="line788" /> 788 joined_query = self.query
|
1410
|
+
</span><span class="inferred1"><a name="line789" /> 789 end
|
1411
|
+
</span><span class="inferred0"><a name="line790" /> 790 else
|
1412
|
+
</span><span class="marked1"><a name="line791" /> 791 if uri.path[0..0] == "/"
|
1413
|
+
</span><span class="marked0"><a name="line792" /> 792 joined_path = self.class.normalize_path(uri.path)
|
1414
|
+
</span><span class="inferred1"><a name="line793" /> 793 else
|
1415
|
+
</span><span class="marked0"><a name="line794" /> 794 base_path = self.path.dup
|
1416
|
+
</span><span class="marked1"><a name="line795" /> 795 base_path = "" if base_path == nil
|
1417
|
+
</span><span class="marked0"><a name="line796" /> 796 base_path = self.class.normalize_path(base_path)
|
1418
|
+
</span><span class="inferred1"><a name="line797" /> 797
|
1419
|
+
</span><span class="inferred0"><a name="line798" /> 798 # Section 5.2.3 of RFC 3986
|
1420
|
+
</span><span class="inferred1"><a name="line799" /> 799 #
|
1421
|
+
</span><span class="inferred0"><a name="line800" /> 800 # Removes the right-most path segment from the base path.
|
1422
|
+
</span><span class="marked1"><a name="line801" /> 801 if base_path =~ /\//
|
1423
|
+
</span><span class="marked0"><a name="line802" /> 802 base_path.gsub!(/\/[^\/]+$/, "/")
|
1424
|
+
</span><span class="inferred1"><a name="line803" /> 803 else
|
1425
|
+
</span><span class="marked0"><a name="line804" /> 804 base_path = ""
|
1426
|
+
</span><span class="inferred1"><a name="line805" /> 805 end
|
1427
|
+
</span><span class="inferred0"><a name="line806" /> 806
|
1428
|
+
</span><span class="inferred1"><a name="line807" /> 807 # If the base path is empty and an authority segment has been
|
1429
|
+
</span><span class="inferred0"><a name="line808" /> 808 # defined, use a base path of "/"
|
1430
|
+
</span><span class="marked1"><a name="line809" /> 809 if base_path == "" && self.authority != nil
|
1431
|
+
</span><span class="marked0"><a name="line810" /> 810 base_path = "/"
|
1432
|
+
</span><span class="inferred1"><a name="line811" /> 811 end
|
1433
|
+
</span><span class="inferred0"><a name="line812" /> 812
|
1434
|
+
</span><span class="marked1"><a name="line813" /> 813 joined_path = self.class.normalize_path(base_path + uri.path)
|
1435
|
+
</span><span class="inferred0"><a name="line814" /> 814 end
|
1436
|
+
</span><span class="marked1"><a name="line815" /> 815 joined_query = uri.query
|
1437
|
+
</span><span class="inferred0"><a name="line816" /> 816 end
|
1438
|
+
</span><span class="marked1"><a name="line817" /> 817 joined_user = self.user
|
1439
|
+
</span><span class="marked0"><a name="line818" /> 818 joined_password = self.password
|
1440
|
+
</span><span class="marked1"><a name="line819" /> 819 joined_host = self.host
|
1441
|
+
</span><span class="marked0"><a name="line820" /> 820 joined_port = self.specified_port
|
1442
|
+
</span><span class="inferred1"><a name="line821" /> 821 end
|
1443
|
+
</span><span class="marked0"><a name="line822" /> 822 joined_scheme = self.scheme
|
1444
|
+
</span><span class="inferred1"><a name="line823" /> 823 end
|
1445
|
+
</span><span class="marked0"><a name="line824" /> 824 joined_fragment = uri.fragment
|
1446
|
+
</span><span class="inferred1"><a name="line825" /> 825
|
1447
|
+
</span><span class="marked0"><a name="line826" /> 826 return Addressable::URI.new(
|
1448
|
+
</span><span class="inferred1"><a name="line827" /> 827 joined_scheme,
|
1449
|
+
</span><span class="inferred0"><a name="line828" /> 828 joined_user,
|
1450
|
+
</span><span class="inferred1"><a name="line829" /> 829 joined_password,
|
1451
|
+
</span><span class="inferred0"><a name="line830" /> 830 joined_host,
|
1452
|
+
</span><span class="inferred1"><a name="line831" /> 831 joined_port,
|
1453
|
+
</span><span class="inferred0"><a name="line832" /> 832 joined_path,
|
1454
|
+
</span><span class="inferred1"><a name="line833" /> 833 joined_query,
|
1455
|
+
</span><span class="inferred0"><a name="line834" /> 834 joined_fragment
|
1456
|
+
</span><span class="marked1"><a name="line835" /> 835 )
|
1457
|
+
</span><span class="inferred0"><a name="line836" /> 836 end
|
1458
|
+
</span><span class="inferred1"><a name="line837" /> 837
|
1459
|
+
</span><span class="inferred0"><a name="line838" /> 838 # Merges two URIs together.
|
1460
|
+
</span><span class="marked1"><a name="line839" /> 839 def merge(uri)
|
1461
|
+
</span><span class="marked0"><a name="line840" /> 840 return self + uri
|
1462
|
+
</span><span class="marked1"><a name="line841" /> 841 end
|
1463
|
+
</span><span class="marked0"><a name="line842" /> 842 alias_method :join, :merge
|
1464
|
+
</span><span class="inferred1"><a name="line843" /> 843
|
1465
|
+
</span><span class="inferred0"><a name="line844" /> 844 # Destructive form of merge.
|
1466
|
+
</span><span class="marked1"><a name="line845" /> 845 def merge!(uri)
|
1467
|
+
</span><span class="marked0"><a name="line846" /> 846 replace_self(self.merge(uri))
|
1468
|
+
</span><span class="marked1"><a name="line847" /> 847 end
|
1469
|
+
</span><span class="marked0"><a name="line848" /> 848 alias_method :join!, :merge!
|
1470
|
+
</span><span class="inferred1"><a name="line849" /> 849
|
1471
|
+
</span><span class="inferred0"><a name="line850" /> 850 # Returns the shortest normalized relative form of this URI that uses the
|
1472
|
+
</span><span class="inferred1"><a name="line851" /> 851 # supplied URI as a base for resolution. Returns an absolute URI if
|
1473
|
+
</span><span class="inferred0"><a name="line852" /> 852 # necessary.
|
1474
|
+
</span><span class="marked1"><a name="line853" /> 853 def route_from(uri)
|
1475
|
+
</span><span class="marked0"><a name="line854" /> 854 uri = uri.kind_of?(self.class) ? uri : self.class.parse(uri.to_s)
|
1476
|
+
</span><span class="marked1"><a name="line855" /> 855 uri = uri.normalize
|
1477
|
+
</span><span class="marked0"><a name="line856" /> 856 normalized_self = self.normalize
|
1478
|
+
</span><span class="marked1"><a name="line857" /> 857 if normalized_self.relative?
|
1479
|
+
</span><span class="marked0"><a name="line858" /> 858 raise ArgumentError, "Expected absolute URI, got: #{self.to_s}"
|
1480
|
+
</span><span class="inferred1"><a name="line859" /> 859 end
|
1481
|
+
</span><span class="marked0"><a name="line860" /> 860 if uri.relative?
|
1482
|
+
</span><span class="marked1"><a name="line861" /> 861 raise ArgumentError, "Expected absolute URI, got: #{self.to_s}"
|
1483
1483
|
</span><span class="inferred0"><a name="line862" /> 862 end
|
1484
|
-
</span><span class="
|
1485
|
-
</span><span class="marked0"><a name="line864" /> 864
|
1486
|
-
</span><span class="
|
1487
|
-
</span><span class="
|
1488
|
-
</span><span class="marked1"><a name="line867" /> 867
|
1489
|
-
</span><span class="
|
1490
|
-
</span><span class="
|
1491
|
-
</span><span class="
|
1492
|
-
</span><span class="
|
1493
|
-
</span><span class="
|
1494
|
-
</span><span class="
|
1495
|
-
</span><span class="
|
1496
|
-
</span><span class="
|
1497
|
-
</span><span class="marked0"><a name="line876" /> 876
|
1498
|
-
</span><span class="
|
1499
|
-
</span><span class="inferred0"><a name="line878" /> 878
|
1500
|
-
</span><span class="inferred1"><a name="line879" /> 879
|
1501
|
-
</span><span class="inferred0"><a name="line880" /> 880
|
1502
|
-
</span><span class="inferred1"><a name="line881" /> 881
|
1503
|
-
</span><span class="
|
1504
|
-
</span><span class="marked1"><a name="line883" /> 883
|
1505
|
-
</span><span class="marked0"><a name="line884" /> 884
|
1506
|
-
</span><span class="inferred1"><a name="line885" /> 885
|
1507
|
-
</span><span class="
|
1508
|
-
</span><span class="inferred1"><a name="line887" /> 887
|
1509
|
-
</span><span class="inferred0"><a name="line888" /> 888
|
1510
|
-
</span><span class="inferred1"><a name="line889" /> 889
|
1511
|
-
</span><span class="inferred0"><a name="line890" /> 890
|
1512
|
-
</span><span class="inferred1"><a name="line891" /> 891
|
1513
|
-
</span><span class="inferred0"><a name="line892" /> 892
|
1514
|
-
</span><span class="inferred1"><a name="line893" /> 893
|
1515
|
-
</span><span class="
|
1516
|
-
</span><span class="marked1"><a name="line895" /> 895
|
1517
|
-
</span><span class="
|
1518
|
-
</span><span class="
|
1519
|
-
</span><span class="
|
1520
|
-
</span><span class="
|
1521
|
-
</span><span class="
|
1522
|
-
</span><span class="marked1"><a name="line901" /> 901
|
1523
|
-
</span><span class="
|
1524
|
-
</span><span class="
|
1525
|
-
</span><span class="
|
1526
|
-
</span><span class="
|
1527
|
-
</span><span class="
|
1528
|
-
</span><span class="
|
1529
|
-
</span><span class="
|
1530
|
-
</span><span class="
|
1531
|
-
</span><span class="
|
1532
|
-
</span><span class="
|
1533
|
-
</span><span class="
|
1534
|
-
</span><span class="
|
1535
|
-
</span><span class="marked0"><a name="line914" /> 914
|
1536
|
-
</span><span class="
|
1537
|
-
</span><span class="
|
1538
|
-
</span><span class="
|
1539
|
-
</span><span class="marked0"><a name="line918" /> 918
|
1540
|
-
</span><span class="marked1"><a name="line919" /> 919
|
1541
|
-
</span><span class="marked0"><a name="line920" /> 920
|
1542
|
-
</span><span class="inferred1"><a name="line921" /> 921
|
1543
|
-
</span><span class="
|
1544
|
-
</span><span class="marked1"><a name="line923" /> 923
|
1545
|
-
</span><span class="
|
1546
|
-
</span><span class="marked1"><a name="line925" /> 925
|
1547
|
-
</span><span class="
|
1548
|
-
</span><span class="
|
1549
|
-
</span><span class="
|
1550
|
-
</span><span class="marked1"><a name="line929" /> 929
|
1551
|
-
</span><span class="marked0"><a name="line930" /> 930
|
1552
|
-
</span><span class="
|
1553
|
-
</span><span class="
|
1554
|
-
</span><span class="
|
1555
|
-
</span><span class="marked0"><a name="line934" /> 934
|
1556
|
-
</span><span class="
|
1557
|
-
</span><span class="
|
1558
|
-
</span><span class="
|
1559
|
-
</span><span class="marked0"><a name="line938" /> 938
|
1560
|
-
</span><span class="
|
1561
|
-
</span><span class="
|
1562
|
-
</span><span class="
|
1563
|
-
</span><span class="marked0"><a name="line942" /> 942
|
1564
|
-
</span><span class="marked1"><a name="line943" /> 943
|
1565
|
-
</span><span class="
|
1566
|
-
</span><span class="inferred1"><a name="line945" /> 945
|
1567
|
-
</span><span class="inferred0"><a name="line946" /> 946
|
1568
|
-
</span><span class="
|
1569
|
-
</span><span class="
|
1570
|
-
</span><span class="
|
1571
|
-
</span><span class="inferred0"><a name="line950" /> 950
|
1572
|
-
</span><span class="
|
1573
|
-
</span><span class="
|
1574
|
-
</span><span class="
|
1575
|
-
</span><span class="
|
1576
|
-
</span><span class="inferred1"><a name="line955" /> 955
|
1577
|
-
</span><span class="
|
1578
|
-
</span><span class="
|
1579
|
-
</span><span class="marked0"><a name="line958" /> 958
|
1580
|
-
</span><span class="marked1"><a name="line959" /> 959
|
1581
|
-
</span><span class="inferred0"><a name="line960" /> 960
|
1582
|
-
</span><span class="
|
1583
|
-
</span><span class="
|
1584
|
-
</span><span class="
|
1585
|
-
</span><span class="
|
1586
|
-
</span><span class="
|
1587
|
-
</span><span class="
|
1588
|
-
</span><span class="marked1"><a name="line967" /> 967
|
1589
|
-
</span><span class="marked0"><a name="line968" /> 968
|
1590
|
-
</span><span class="inferred1"><a name="line969" /> 969
|
1591
|
-
</span><span class="marked0"><a name="line970" /> 970
|
1592
|
-
</span><span class="
|
1593
|
-
</span><span class="marked0"><a name="line972" /> 972 return
|
1594
|
-
</span><span class="
|
1595
|
-
</span><span class="inferred0"><a name="line974" /> 974
|
1596
|
-
</span><span class="inferred1"><a name="line975" /> 975
|
1597
|
-
</span><span class="inferred0"><a name="line976" /> 976
|
1598
|
-
</span><span class="inferred1"><a name="line977" /> 977
|
1599
|
-
</span><span class="
|
1600
|
-
</span><span class="
|
1601
|
-
</span><span class="
|
1602
|
-
</span><span class="
|
1603
|
-
</span><span class="
|
1604
|
-
</span><span class="
|
1605
|
-
</span><span class="
|
1606
|
-
</span><span class="inferred1"><a name="line985" /> 985
|
1607
|
-
</span><span class="marked0"><a name="line986" /> 986
|
1608
|
-
</span><span class="
|
1609
|
-
</span><span class="
|
1610
|
-
</span><span class="
|
1611
|
-
</span><span class="inferred0"><a name="line990" /> 990
|
1612
|
-
</span><span class="inferred1"><a name="line991" /> 991
|
1613
|
-
</span><span class="inferred0"><a name="line992" /> 992 #
|
1614
|
-
</span><span class="
|
1615
|
-
</span><span class="marked0"><a name="line994" /> 994
|
1616
|
-
</span><span class="marked1"><a name="line995" /> 995
|
1617
|
-
</span><span class="marked0"><a name="line996" /> 996
|
1618
|
-
</span><span class="
|
1619
|
-
</span><span class="inferred0"><a name="line998" /> 998
|
1620
|
-
</span><span class="
|
1621
|
-
</span><span class="inferred0"><a name="line1000" />1000
|
1622
|
-
</span><span class="marked1"><a name="line1001" />1001
|
1623
|
-
</span><span class="
|
1624
|
-
</span><span class="
|
1625
|
-
</span><span class="inferred0"><a name="line1004" />1004
|
1626
|
-
</span><span class="inferred1"><a name="line1005" />1005
|
1627
|
-
</span><span class="inferred0"><a name="line1006" />1006 #
|
1628
|
-
</span><span class="marked1"><a name="line1007" />1007 def
|
1629
|
-
</span><span class="marked0"><a name="line1008" />1008
|
1630
|
-
</span><span class="marked1"><a name="line1009" />1009
|
1631
|
-
</span><span class="marked0"><a name="line1010" />1010
|
1632
|
-
</span><span class="
|
1633
|
-
</span><span class="marked0"><a name="line1012" />1012
|
1634
|
-
</span><span class="marked1"><a name="line1013" />1013
|
1635
|
-
</span><span class="
|
1636
|
-
</span><span class="marked1"><a name="line1015" />1015
|
1637
|
-
</span><span class="
|
1638
|
-
</span><span class="
|
1639
|
-
</span><span class="marked0"><a name="line1018" />1018
|
1640
|
-
</span><span class="
|
1641
|
-
</span><span class="
|
1642
|
-
</span><span class="
|
1643
|
-
</span><span class="
|
1644
|
-
</span><span class="marked1"><a name="line1023" />1023
|
1645
|
-
</span><span class="
|
1646
|
-
</span><span class="
|
1647
|
-
</span><span class="inferred0"><a name="line1026" />1026
|
1648
|
-
</span><span class="inferred1"><a name="line1027" />1027
|
1649
|
-
</span><span class="inferred0"><a name="line1028" />1028
|
1650
|
-
</span><span class="inferred1"><a name="line1029" />1029
|
1651
|
-
</span><span class="
|
1652
|
-
</span><span class="
|
1653
|
-
</span><span class="
|
1654
|
-
</span><span class="
|
1655
|
-
</span><span class="
|
1656
|
-
</span><span class="
|
1657
|
-
</span><span class="
|
1658
|
-
</span><span class="
|
1659
|
-
</span><span class="
|
1660
|
-
</span><span class="marked1"><a name="line1039" />1039
|
1661
|
-
</span><span class="marked0"><a name="line1040" />1040
|
1662
|
-
</span><span class="marked1"><a name="line1041" />1041
|
1663
|
-
</span><span class="marked0"><a name="line1042" />1042
|
1664
|
-
</span><span class="marked1"><a name="line1043" />1043
|
1665
|
-
</span><span class="marked0"><a name="line1044" />1044
|
1666
|
-
</span><span class="marked1"><a name="line1045" />1045
|
1667
|
-
</span><span class="marked0"><a name="line1046" />1046
|
1668
|
-
</span><span class="
|
1669
|
-
</span><span class="
|
1670
|
-
</span><span class="
|
1671
|
-
</span><span class="marked0"><a name="line1050" />1050
|
1672
|
-
</span><span class="
|
1673
|
-
</span><span class="marked0"><a name="line1052" />1052
|
1674
|
-
</span><span class="
|
1675
|
-
</span><span class="
|
1676
|
-
</span><span class="
|
1677
|
-
</span><span class="
|
1678
|
-
</span><span class="
|
1679
|
-
</span><span class="
|
1680
|
-
</span><span class="
|
1681
|
-
</span><span class="
|
1682
|
-
</span><span class="
|
1683
|
-
</span><span class="
|
1684
|
-
</span><span class="
|
1685
|
-
</span><span class="marked0"><a name="line1064" />1064
|
1686
|
-
</span><span class="
|
1687
|
-
</span><span class="
|
1688
|
-
</span><span class="inferred1"><a name="line1067" />1067
|
1689
|
-
</span><span class="
|
1690
|
-
</span><span class="
|
1691
|
-
</span><span class="
|
1692
|
-
</span><span class="
|
1693
|
-
</span><span class="marked0"><a name="line1072" />1072
|
1694
|
-
</span><span class="
|
1695
|
-
</span><span class="marked0"><a name="line1074" />1074
|
1696
|
-
</span><span class="marked1"><a name="line1075" />1075
|
1697
|
-
</span><span class="
|
1698
|
-
</span><span class="
|
1699
|
-
</span><span class="inferred0"><a name="line1078" />1078
|
1700
|
-
</span><span class="marked1"><a name="line1079" />1079
|
1701
|
-
</span><span class="inferred0"><a name="line1080" />1080
|
1702
|
-
</span><span class="
|
1703
|
-
</span><span class="
|
1704
|
-
</span><span class="
|
1705
|
-
</span><span class="
|
1706
|
-
</span><span class="
|
1707
|
-
</span><span class="marked0"><a name="line1086" />1086
|
1708
|
-
</span><span class="marked1"><a name="line1087" />1087
|
1709
|
-
</span><span class="marked0"><a name="line1088" />1088
|
1710
|
-
</span><span class="marked1"><a name="line1089" />1089
|
1711
|
-
</span><span class="
|
1712
|
-
</span><span class="
|
1713
|
-
</span><span class="inferred0"><a name="line1092" />1092
|
1714
|
-
</span><span class="
|
1715
|
-
</span><span class="
|
1716
|
-
</span><span class="
|
1717
|
-
</span><span class="inferred0"><a name="line1096" />1096
|
1718
|
-
</span><span class="
|
1719
|
-
</span><span class="inferred0"><a name="line1098" />1098
|
1720
|
-
</span><span class="
|
1721
|
-
</span><span class="
|
1722
|
-
</span><span class="marked1"><a name="line1101" />1101
|
1723
|
-
</span><span class="
|
1724
|
-
</span><span class="
|
1725
|
-
</span><span class="marked0"><a name="line1104" />1104
|
1726
|
-
</span><span class="
|
1727
|
-
</span><span class="marked0"><a name="line1106" />1106
|
1728
|
-
</span><span class="
|
1729
|
-
</span><span class="
|
1730
|
-
</span><span class="
|
1731
|
-
</span><span class="inferred0"><a name="line1110" />1110
|
1732
|
-
</span><span class="
|
1733
|
-
</span><span class="inferred0"><a name="line1112" />1112
|
1734
|
-
</span><span class="
|
1735
|
-
</span><span class="inferred0"><a name="line1114" />1114
|
1736
|
-
</span><span class="
|
1737
|
-
</span><span class="
|
1738
|
-
</span><span class="marked1"><a name="line1117" />1117
|
1739
|
-
</span><span class="
|
1740
|
-
</span><span class="
|
1741
|
-
</span><span class="marked0"><a name="line1120" />1120
|
1742
|
-
</span><span class="
|
1743
|
-
</span><span class="
|
1744
|
-
</span><span class="inferred1"><a name="line1123" />1123
|
1745
|
-
</span><span class="
|
1746
|
-
</span><span class="
|
1747
|
-
</span><span class="marked0"><a name="line1126" />1126
|
1748
|
-
</span><span class="
|
1749
|
-
</span><span class="marked0"><a name="line1128" />1128
|
1750
|
-
</span><span class="marked1"><a name="line1129" />1129
|
1751
|
-
</span><span class="
|
1752
|
-
</span><span class="marked1"><a name="line1131" />1131
|
1753
|
-
</span><span class="
|
1754
|
-
</span><span class="marked1"><a name="line1133" />1133
|
1755
|
-
</span><span class="inferred0"><a name="line1134" />1134
|
1756
|
-
</span><span class="marked1"><a name="line1135" />1135
|
1757
|
-
</span><span class="marked0"><a name="line1136" />1136
|
1758
|
-
</span><span class="
|
1759
|
-
</span><span class="marked0"><a name="line1138" />1138
|
1760
|
-
</span><span class="inferred1"><a name="line1139" />1139
|
1761
|
-
</span><span class="
|
1762
|
-
</span><span class="inferred1"><a name="line1141" />1141
|
1763
|
-
</span><span class="marked0"><a name="line1142" />1142
|
1764
|
-
</span><span class="
|
1765
|
-
</span><span class="
|
1766
|
-
</span><span class="
|
1767
|
-
</span><span class="marked0"><a name="line1146" />1146
|
1768
|
-
</span><span class="inferred1"><a name="line1147" />1147
|
1769
|
-
</span><span class="marked0"><a name="line1148" />1148
|
1770
|
-
</span><span class="
|
1771
|
-
</span><span class="
|
1772
|
-
</span><span class="marked1"><a name="line1151" />1151
|
1773
|
-
</span><span class="
|
1774
|
-
</span><span class="
|
1775
|
-
</span><span class="inferred0"><a name="line1154" />1154
|
1776
|
-
</span><span class="
|
1777
|
-
</span><span class="
|
1778
|
-
</span><span class="
|
1779
|
-
</span><span class="marked0"><a name="line1158" />1158
|
1780
|
-
</span><span class="
|
1781
|
-
</span><span class="marked0"><a name="line1160" />1160
|
1782
|
-
</span><span class="
|
1783
|
-
</span><span class="
|
1784
|
-
</span><span class="marked1"><a name="line1163" />1163
|
1785
|
-
</span><span class="marked0"><a name="line1164" />1164
|
1786
|
-
</span><span class="
|
1787
|
-
</span><span class="marked0"><a name="line1166" />1166
|
1788
|
-
</span><span class="marked1"><a name="line1167" />1167
|
1789
|
-
</span><span class="marked0"><a name="line1168" />1168
|
1790
|
-
</span><span class="marked1"><a name="line1169" />1169
|
1791
|
-
</span><span class="
|
1792
|
-
</span><span class="
|
1793
|
-
</span><span class="
|
1794
|
-
</span><span class="
|
1795
|
-
</span><span class="
|
1796
|
-
</span><span class="
|
1484
|
+
</span><span class="marked1"><a name="line863" /> 863 if normalized_self == uri
|
1485
|
+
</span><span class="marked0"><a name="line864" /> 864 return Addressable::URI.parse("##{normalized_self.fragment}")
|
1486
|
+
</span><span class="inferred1"><a name="line865" /> 865 end
|
1487
|
+
</span><span class="marked0"><a name="line866" /> 866 segments = normalized_self.to_h
|
1488
|
+
</span><span class="marked1"><a name="line867" /> 867 if normalized_self.scheme == uri.scheme
|
1489
|
+
</span><span class="marked0"><a name="line868" /> 868 segments[:scheme] = nil
|
1490
|
+
</span><span class="marked1"><a name="line869" /> 869 if normalized_self.authority == uri.authority
|
1491
|
+
</span><span class="marked0"><a name="line870" /> 870 segments[:user] = nil
|
1492
|
+
</span><span class="marked1"><a name="line871" /> 871 segments[:password] = nil
|
1493
|
+
</span><span class="marked0"><a name="line872" /> 872 segments[:host] = nil
|
1494
|
+
</span><span class="marked1"><a name="line873" /> 873 segments[:port] = nil
|
1495
|
+
</span><span class="marked0"><a name="line874" /> 874 if normalized_self.path == uri.path
|
1496
|
+
</span><span class="marked1"><a name="line875" /> 875 segments[:path] = nil
|
1497
|
+
</span><span class="marked0"><a name="line876" /> 876 if normalized_self.query == uri.query
|
1498
|
+
</span><span class="marked1"><a name="line877" /> 877 segments[:query] = nil
|
1499
|
+
</span><span class="inferred0"><a name="line878" /> 878 end
|
1500
|
+
</span><span class="inferred1"><a name="line879" /> 879 end
|
1501
|
+
</span><span class="inferred0"><a name="line880" /> 880 end
|
1502
|
+
</span><span class="inferred1"><a name="line881" /> 881 end
|
1503
|
+
</span><span class="inferred0"><a name="line882" /> 882 # Avoid network-path references.
|
1504
|
+
</span><span class="marked1"><a name="line883" /> 883 if segments[:scheme] == nil && segments[:host] != nil
|
1505
|
+
</span><span class="marked0"><a name="line884" /> 884 segments[:scheme] = normalized_self.scheme
|
1506
|
+
</span><span class="inferred1"><a name="line885" /> 885 end
|
1507
|
+
</span><span class="marked0"><a name="line886" /> 886 return Addressable::URI.new(
|
1508
|
+
</span><span class="inferred1"><a name="line887" /> 887 segments[:scheme],
|
1509
|
+
</span><span class="inferred0"><a name="line888" /> 888 segments[:user],
|
1510
|
+
</span><span class="inferred1"><a name="line889" /> 889 segments[:password],
|
1511
|
+
</span><span class="inferred0"><a name="line890" /> 890 segments[:host],
|
1512
|
+
</span><span class="inferred1"><a name="line891" /> 891 segments[:port],
|
1513
|
+
</span><span class="inferred0"><a name="line892" /> 892 segments[:path],
|
1514
|
+
</span><span class="inferred1"><a name="line893" /> 893 segments[:query],
|
1515
|
+
</span><span class="inferred0"><a name="line894" /> 894 segments[:fragment]
|
1516
|
+
</span><span class="marked1"><a name="line895" /> 895 )
|
1517
|
+
</span><span class="inferred0"><a name="line896" /> 896 end
|
1518
|
+
</span><span class="inferred1"><a name="line897" /> 897
|
1519
|
+
</span><span class="inferred0"><a name="line898" /> 898 # Returns the shortest normalized relative form of the supplied URI that
|
1520
|
+
</span><span class="inferred1"><a name="line899" /> 899 # uses this URI as a base for resolution. Returns an absolute URI if
|
1521
|
+
</span><span class="inferred0"><a name="line900" /> 900 # necessary.
|
1522
|
+
</span><span class="marked1"><a name="line901" /> 901 def route_to(uri)
|
1523
|
+
</span><span class="marked0"><a name="line902" /> 902 uri = uri.kind_of?(self.class) ? uri : self.class.parse(uri.to_s)
|
1524
|
+
</span><span class="marked1"><a name="line903" /> 903 return uri.route_from(self)
|
1525
|
+
</span><span class="inferred0"><a name="line904" /> 904 end
|
1526
|
+
</span><span class="inferred1"><a name="line905" /> 905
|
1527
|
+
</span><span class="inferred0"><a name="line906" /> 906 # Returns a normalized URI object.
|
1528
|
+
</span><span class="inferred1"><a name="line907" /> 907 #
|
1529
|
+
</span><span class="inferred0"><a name="line908" /> 908 # NOTE: This method does not attempt to fully conform to specifications.
|
1530
|
+
</span><span class="inferred1"><a name="line909" /> 909 # It exists largely to correct other people's failures to read the
|
1531
|
+
</span><span class="inferred0"><a name="line910" /> 910 # specifications, and also to deal with caching issues since several
|
1532
|
+
</span><span class="inferred1"><a name="line911" /> 911 # different URIs may represent the same resource and should not be
|
1533
|
+
</span><span class="inferred0"><a name="line912" /> 912 # cached multiple times.
|
1534
|
+
</span><span class="marked1"><a name="line913" /> 913 def normalize
|
1535
|
+
</span><span class="marked0"><a name="line914" /> 914 normalized_scheme = nil
|
1536
|
+
</span><span class="marked1"><a name="line915" /> 915 normalized_scheme = self.scheme.strip.downcase if self.scheme != nil
|
1537
|
+
</span><span class="marked0"><a name="line916" /> 916 normalized_scheme = "svn+ssh" if normalized_scheme == "ssh+svn"
|
1538
|
+
</span><span class="marked1"><a name="line917" /> 917 if normalized_scheme == "feed"
|
1539
|
+
</span><span class="marked0"><a name="line918" /> 918 if self.to_s =~ /^feed:\/*http:\/*/
|
1540
|
+
</span><span class="marked1"><a name="line919" /> 919 return self.class.parse(
|
1541
|
+
</span><span class="marked0"><a name="line920" /> 920 self.to_s.scan(/^feed:\/*(http:\/*.*)/).flatten[0]).normalize
|
1542
|
+
</span><span class="inferred1"><a name="line921" /> 921 end
|
1543
|
+
</span><span class="inferred0"><a name="line922" /> 922 end
|
1544
|
+
</span><span class="marked1"><a name="line923" /> 923 normalized_user = nil
|
1545
|
+
</span><span class="marked0"><a name="line924" /> 924 normalized_user = self.user.strip if self.user != nil
|
1546
|
+
</span><span class="marked1"><a name="line925" /> 925 normalized_password = nil
|
1547
|
+
</span><span class="marked0"><a name="line926" /> 926 normalized_password = self.password.strip if self.password != nil
|
1548
|
+
</span><span class="inferred1"><a name="line927" /> 927
|
1549
|
+
</span><span class="marked0"><a name="line928" /> 928 if normalized_scheme =~ /https?/ && normalized_user == "" &&
|
1550
|
+
</span><span class="marked1"><a name="line929" /> 929 (normalized_password == nil || normalized_password == "")
|
1551
|
+
</span><span class="marked0"><a name="line930" /> 930 normalized_user = nil
|
1552
|
+
</span><span class="marked1"><a name="line931" /> 931 normalized_password = nil
|
1553
|
+
</span><span class="inferred0"><a name="line932" /> 932 end
|
1554
|
+
</span><span class="inferred1"><a name="line933" /> 933
|
1555
|
+
</span><span class="marked0"><a name="line934" /> 934 normalized_host = nil
|
1556
|
+
</span><span class="marked1"><a name="line935" /> 935 normalized_host = self.host.strip.downcase if self.host != nil
|
1557
|
+
</span><span class="marked0"><a name="line936" /> 936 if normalized_host != nil
|
1558
|
+
</span><span class="marked1"><a name="line937" /> 937 begin
|
1559
|
+
</span><span class="marked0"><a name="line938" /> 938 normalized_host = URI::IDNA.to_ascii(normalized_host)
|
1560
|
+
</span><span class="inferred1"><a name="line939" /> 939 rescue Exception
|
1561
|
+
</span><span class="marked0"><a name="line940" /> 940 nil
|
1562
|
+
</span><span class="inferred1"><a name="line941" /> 941 end
|
1563
|
+
</span><span class="marked0"><a name="line942" /> 942 if normalized_host[-1..-1] == "."
|
1564
|
+
</span><span class="marked1"><a name="line943" /> 943 normalized_host = normalized_host[0...-1]
|
1565
|
+
</span><span class="inferred0"><a name="line944" /> 944 end
|
1566
|
+
</span><span class="inferred1"><a name="line945" /> 945 end
|
1567
|
+
</span><span class="inferred0"><a name="line946" /> 946
|
1568
|
+
</span><span class="marked1"><a name="line947" /> 947 normalized_port = self.port
|
1569
|
+
</span><span class="marked0"><a name="line948" /> 948 if self.class.scheme_mapping[normalized_scheme] == normalized_port
|
1570
|
+
</span><span class="marked1"><a name="line949" /> 949 normalized_port = nil
|
1571
|
+
</span><span class="inferred0"><a name="line950" /> 950 end
|
1572
|
+
</span><span class="marked1"><a name="line951" /> 951 normalized_path = nil
|
1573
|
+
</span><span class="marked0"><a name="line952" /> 952 normalized_path = self.path.strip if self.path != nil
|
1574
|
+
</span><span class="inferred1"><a name="line953" /> 953 if normalized_path == nil &&
|
1575
|
+
</span><span class="marked0"><a name="line954" /> 954 normalized_scheme != nil &&
|
1576
|
+
</span><span class="inferred1"><a name="line955" /> 955 normalized_host != nil
|
1577
|
+
</span><span class="marked0"><a name="line956" /> 956 normalized_path = "/"
|
1578
|
+
</span><span class="inferred1"><a name="line957" /> 957 end
|
1579
|
+
</span><span class="marked0"><a name="line958" /> 958 if normalized_path != nil
|
1580
|
+
</span><span class="marked1"><a name="line959" /> 959 normalized_path = self.class.normalize_path(normalized_path)
|
1581
|
+
</span><span class="inferred0"><a name="line960" /> 960 end
|
1582
|
+
</span><span class="marked1"><a name="line961" /> 961 if normalized_path == ""
|
1583
|
+
</span><span class="marked0"><a name="line962" /> 962 if ["http", "https", "ftp", "tftp"].include?(normalized_scheme)
|
1584
|
+
</span><span class="marked1"><a name="line963" /> 963 normalized_path = "/"
|
1585
|
+
</span><span class="inferred0"><a name="line964" /> 964 end
|
1586
|
+
</span><span class="inferred1"><a name="line965" /> 965 end
|
1587
|
+
</span><span class="inferred0"><a name="line966" /> 966
|
1588
|
+
</span><span class="marked1"><a name="line967" /> 967 normalized_query = nil
|
1589
|
+
</span><span class="marked0"><a name="line968" /> 968 normalized_query = self.query.strip if self.query != nil
|
1590
|
+
</span><span class="inferred1"><a name="line969" /> 969
|
1591
|
+
</span><span class="marked0"><a name="line970" /> 970 normalized_fragment = nil
|
1592
|
+
</span><span class="marked1"><a name="line971" /> 971 normalized_fragment = self.fragment.strip if self.fragment != nil
|
1593
|
+
</span><span class="marked0"><a name="line972" /> 972 return Addressable::URI.parse(
|
1594
|
+
</span><span class="marked1"><a name="line973" /> 973 Addressable::URI.normalized_encode(Addressable::URI.new(
|
1595
|
+
</span><span class="inferred0"><a name="line974" /> 974 normalized_scheme,
|
1596
|
+
</span><span class="inferred1"><a name="line975" /> 975 normalized_user,
|
1597
|
+
</span><span class="inferred0"><a name="line976" /> 976 normalized_password,
|
1598
|
+
</span><span class="inferred1"><a name="line977" /> 977 normalized_host,
|
1599
|
+
</span><span class="inferred0"><a name="line978" /> 978 normalized_port,
|
1600
|
+
</span><span class="inferred1"><a name="line979" /> 979 normalized_path,
|
1601
|
+
</span><span class="inferred0"><a name="line980" /> 980 normalized_query,
|
1602
|
+
</span><span class="inferred1"><a name="line981" /> 981 normalized_fragment
|
1603
|
+
</span><span class="marked0"><a name="line982" /> 982 )))
|
1604
|
+
</span><span class="inferred1"><a name="line983" /> 983 end
|
1605
|
+
</span><span class="inferred0"><a name="line984" /> 984
|
1606
|
+
</span><span class="inferred1"><a name="line985" /> 985 # Destructively normalizes this URI object.
|
1607
|
+
</span><span class="marked0"><a name="line986" /> 986 def normalize!
|
1608
|
+
</span><span class="marked1"><a name="line987" /> 987 replace_self(self.normalize)
|
1609
|
+
</span><span class="marked0"><a name="line988" /> 988 end
|
1610
|
+
</span><span class="inferred1"><a name="line989" /> 989
|
1611
|
+
</span><span class="inferred0"><a name="line990" /> 990 # Creates a URI suitable for display to users. If semantic attacks are
|
1612
|
+
</span><span class="inferred1"><a name="line991" /> 991 # likely, the application should try to detect these and warn the user.
|
1613
|
+
</span><span class="inferred0"><a name="line992" /> 992 # See RFC 3986 section 7.6 for more information.
|
1614
|
+
</span><span class="marked1"><a name="line993" /> 993 def display_uri
|
1615
|
+
</span><span class="marked0"><a name="line994" /> 994 display_uri = self.normalize
|
1616
|
+
</span><span class="marked1"><a name="line995" /> 995 begin
|
1617
|
+
</span><span class="marked0"><a name="line996" /> 996 display_uri.instance_variable_set("@host",
|
1618
|
+
</span><span class="marked1"><a name="line997" /> 997 URI::IDNA.to_unicode(display_uri.host))
|
1619
|
+
</span><span class="inferred0"><a name="line998" /> 998 rescue Exception
|
1620
|
+
</span><span class="marked1"><a name="line999" /> 999 nil
|
1621
|
+
</span><span class="inferred0"><a name="line1000" />1000 end
|
1622
|
+
</span><span class="marked1"><a name="line1001" />1001 return display_uri
|
1623
|
+
</span><span class="inferred0"><a name="line1002" />1002 end
|
1624
|
+
</span><span class="inferred1"><a name="line1003" />1003
|
1625
|
+
</span><span class="inferred0"><a name="line1004" />1004 # Returns true if the URI objects are equal. This method normalizes
|
1626
|
+
</span><span class="inferred1"><a name="line1005" />1005 # both URIs before doing the comparison, and allows comparison against
|
1627
|
+
</span><span class="inferred0"><a name="line1006" />1006 # strings.
|
1628
|
+
</span><span class="marked1"><a name="line1007" />1007 def ===(uri)
|
1629
|
+
</span><span class="marked0"><a name="line1008" />1008 uri_string = nil
|
1630
|
+
</span><span class="marked1"><a name="line1009" />1009 if uri.respond_to?(:normalize)
|
1631
|
+
</span><span class="marked0"><a name="line1010" />1010 uri_string = uri.normalize.to_s
|
1632
|
+
</span><span class="inferred1"><a name="line1011" />1011 else
|
1633
|
+
</span><span class="marked0"><a name="line1012" />1012 begin
|
1634
|
+
</span><span class="marked1"><a name="line1013" />1013 uri_string = URI.parse(uri.to_s).normalize.to_s
|
1635
|
+
</span><span class="inferred0"><a name="line1014" />1014 rescue Exception
|
1636
|
+
</span><span class="marked1"><a name="line1015" />1015 return false
|
1637
|
+
</span><span class="inferred0"><a name="line1016" />1016 end
|
1638
|
+
</span><span class="inferred1"><a name="line1017" />1017 end
|
1639
|
+
</span><span class="marked0"><a name="line1018" />1018 return self.normalize.to_s == uri_string
|
1640
|
+
</span><span class="inferred1"><a name="line1019" />1019 end
|
1641
|
+
</span><span class="inferred0"><a name="line1020" />1020
|
1642
|
+
</span><span class="inferred1"><a name="line1021" />1021 # Returns true if the URI objects are equal. This method normalizes
|
1643
|
+
</span><span class="inferred0"><a name="line1022" />1022 # both URIs before doing the comparison.
|
1644
|
+
</span><span class="marked1"><a name="line1023" />1023 def ==(uri)
|
1645
|
+
</span><span class="marked0"><a name="line1024" />1024 return false unless uri.kind_of?(self.class)
|
1646
|
+
</span><span class="marked1"><a name="line1025" />1025 return self.normalize.to_s == uri.normalize.to_s
|
1647
|
+
</span><span class="inferred0"><a name="line1026" />1026 end
|
1648
|
+
</span><span class="inferred1"><a name="line1027" />1027
|
1649
|
+
</span><span class="inferred0"><a name="line1028" />1028 # Returns true if the URI objects are equal. This method does NOT
|
1650
|
+
</span><span class="inferred1"><a name="line1029" />1029 # normalize either URI before doing the comparison.
|
1651
|
+
</span><span class="marked0"><a name="line1030" />1030 def eql?(uri)
|
1652
|
+
</span><span class="marked1"><a name="line1031" />1031 return false unless uri.kind_of?(self.class)
|
1653
|
+
</span><span class="marked0"><a name="line1032" />1032 return self.to_s == uri.to_s
|
1654
|
+
</span><span class="inferred1"><a name="line1033" />1033 end
|
1655
|
+
</span><span class="inferred0"><a name="line1034" />1034
|
1656
|
+
</span><span class="inferred1"><a name="line1035" />1035 # Clones the URI object.
|
1657
|
+
</span><span class="marked0"><a name="line1036" />1036 def dup
|
1658
|
+
</span><span class="marked1"><a name="line1037" />1037 duplicated_scheme = nil
|
1659
|
+
</span><span class="marked0"><a name="line1038" />1038 duplicated_scheme = self.scheme.dup if self.scheme != nil
|
1660
|
+
</span><span class="marked1"><a name="line1039" />1039 duplicated_user = nil
|
1661
|
+
</span><span class="marked0"><a name="line1040" />1040 duplicated_user = self.user.dup if self.user != nil
|
1662
|
+
</span><span class="marked1"><a name="line1041" />1041 duplicated_password = nil
|
1663
|
+
</span><span class="marked0"><a name="line1042" />1042 duplicated_password = self.password.dup if self.password != nil
|
1664
|
+
</span><span class="marked1"><a name="line1043" />1043 duplicated_host = nil
|
1665
|
+
</span><span class="marked0"><a name="line1044" />1044 duplicated_host = self.host.dup if self.host != nil
|
1666
|
+
</span><span class="marked1"><a name="line1045" />1045 duplicated_port = self.port
|
1667
|
+
</span><span class="marked0"><a name="line1046" />1046 duplicated_path = nil
|
1668
|
+
</span><span class="marked1"><a name="line1047" />1047 duplicated_path = self.path.dup if self.path != nil
|
1669
|
+
</span><span class="marked0"><a name="line1048" />1048 duplicated_query = nil
|
1670
|
+
</span><span class="marked1"><a name="line1049" />1049 duplicated_query = self.query.dup if self.query != nil
|
1671
|
+
</span><span class="marked0"><a name="line1050" />1050 duplicated_fragment = nil
|
1672
|
+
</span><span class="marked1"><a name="line1051" />1051 duplicated_fragment = self.fragment.dup if self.fragment != nil
|
1673
|
+
</span><span class="marked0"><a name="line1052" />1052 duplicated_uri = Addressable::URI.new(
|
1674
|
+
</span><span class="inferred1"><a name="line1053" />1053 duplicated_scheme,
|
1675
|
+
</span><span class="inferred0"><a name="line1054" />1054 duplicated_user,
|
1676
|
+
</span><span class="inferred1"><a name="line1055" />1055 duplicated_password,
|
1677
|
+
</span><span class="inferred0"><a name="line1056" />1056 duplicated_host,
|
1678
|
+
</span><span class="inferred1"><a name="line1057" />1057 duplicated_port,
|
1679
|
+
</span><span class="inferred0"><a name="line1058" />1058 duplicated_path,
|
1680
|
+
</span><span class="inferred1"><a name="line1059" />1059 duplicated_query,
|
1681
|
+
</span><span class="inferred0"><a name="line1060" />1060 duplicated_fragment
|
1682
|
+
</span><span class="inferred1"><a name="line1061" />1061 )
|
1683
|
+
</span><span class="marked0"><a name="line1062" />1062 @specified_port = nil if !defined?(@specified_port)
|
1684
|
+
</span><span class="marked1"><a name="line1063" />1063 duplicated_uri.instance_variable_set("@specified_port", @specified_port)
|
1685
|
+
</span><span class="marked0"><a name="line1064" />1064 return duplicated_uri
|
1686
|
+
</span><span class="inferred1"><a name="line1065" />1065 end
|
1687
|
+
</span><span class="inferred0"><a name="line1066" />1066
|
1688
|
+
</span><span class="inferred1"><a name="line1067" />1067 # Returns the assembled URI as a string.
|
1689
|
+
</span><span class="marked0"><a name="line1068" />1068 def to_s
|
1690
|
+
</span><span class="marked1"><a name="line1069" />1069 uri_string = ""
|
1691
|
+
</span><span class="marked0"><a name="line1070" />1070 uri_string << "#{self.scheme}:" if self.scheme != nil
|
1692
|
+
</span><span class="marked1"><a name="line1071" />1071 uri_string << "//#{self.authority}" if self.authority != nil
|
1693
|
+
</span><span class="marked0"><a name="line1072" />1072 uri_string << self.path.to_s
|
1694
|
+
</span><span class="marked1"><a name="line1073" />1073 uri_string << "?#{self.query}" if self.query != nil
|
1695
|
+
</span><span class="marked0"><a name="line1074" />1074 uri_string << "##{self.fragment}" if self.fragment != nil
|
1696
|
+
</span><span class="marked1"><a name="line1075" />1075 return uri_string
|
1697
|
+
</span><span class="inferred0"><a name="line1076" />1076 end
|
1698
|
+
</span><span class="inferred1"><a name="line1077" />1077
|
1699
|
+
</span><span class="inferred0"><a name="line1078" />1078 # Returns a Hash of the URI segments.
|
1700
|
+
</span><span class="marked1"><a name="line1079" />1079 def to_h
|
1701
|
+
</span><span class="inferred0"><a name="line1080" />1080 return {
|
1702
|
+
</span><span class="marked1"><a name="line1081" />1081 :scheme => self.scheme,
|
1703
|
+
</span><span class="marked0"><a name="line1082" />1082 :user => self.user,
|
1704
|
+
</span><span class="marked1"><a name="line1083" />1083 :password => self.password,
|
1705
|
+
</span><span class="marked0"><a name="line1084" />1084 :host => self.host,
|
1706
|
+
</span><span class="marked1"><a name="line1085" />1085 :port => self.specified_port,
|
1707
|
+
</span><span class="marked0"><a name="line1086" />1086 :path => self.path,
|
1708
|
+
</span><span class="marked1"><a name="line1087" />1087 :query => self.query,
|
1709
|
+
</span><span class="marked0"><a name="line1088" />1088 :fragment => self.fragment
|
1710
|
+
</span><span class="marked1"><a name="line1089" />1089 }
|
1711
|
+
</span><span class="marked0"><a name="line1090" />1090 end
|
1712
|
+
</span><span class="inferred1"><a name="line1091" />1091
|
1713
|
+
</span><span class="inferred0"><a name="line1092" />1092 # Returns a string representation of the URI object's state.
|
1714
|
+
</span><span class="marked1"><a name="line1093" />1093 def inspect
|
1715
|
+
</span><span class="marked0"><a name="line1094" />1094 sprintf("#<%s:%#0x URI:%s>", self.class.to_s, self.object_id, self.to_s)
|
1716
|
+
</span><span class="marked1"><a name="line1095" />1095 end
|
1717
|
+
</span><span class="inferred0"><a name="line1096" />1096
|
1718
|
+
</span><span class="inferred1"><a name="line1097" />1097 # This module handles internationalized domain names. When Ruby has an
|
1719
|
+
</span><span class="inferred0"><a name="line1098" />1098 # implementation of nameprep, stringprep, punycode, etc, this
|
1720
|
+
</span><span class="inferred1"><a name="line1099" />1099 # module should contain an actual implementation of IDNA instead of
|
1721
|
+
</span><span class="inferred0"><a name="line1100" />1100 # returning nil if libidn can't be used.
|
1722
|
+
</span><span class="marked1"><a name="line1101" />1101 module IDNA
|
1723
|
+
</span><span class="inferred0"><a name="line1102" />1102 # Returns the ascii representation of the label.
|
1724
|
+
</span><span class="marked1"><a name="line1103" />1103 def self.to_ascii(label)
|
1725
|
+
</span><span class="marked0"><a name="line1104" />1104 return nil if label.nil?
|
1726
|
+
</span><span class="marked1"><a name="line1105" />1105 if self.use_libidn?
|
1727
|
+
</span><span class="marked0"><a name="line1106" />1106 return IDN::Idna.toASCII(label)
|
1728
|
+
</span><span class="inferred1"><a name="line1107" />1107 else
|
1729
|
+
</span><span class="marked0"><a name="line1108" />1108 raise NotImplementedError,
|
1730
|
+
</span><span class="inferred1"><a name="line1109" />1109 "There is no available pure-ruby implementation. " +
|
1731
|
+
</span><span class="inferred0"><a name="line1110" />1110 "Install libidn bindings."
|
1732
|
+
</span><span class="inferred1"><a name="line1111" />1111 end
|
1733
|
+
</span><span class="inferred0"><a name="line1112" />1112 end
|
1734
|
+
</span><span class="inferred1"><a name="line1113" />1113
|
1735
|
+
</span><span class="inferred0"><a name="line1114" />1114 # Returns the unicode representation of the label.
|
1736
|
+
</span><span class="marked1"><a name="line1115" />1115 def self.to_unicode(label)
|
1737
|
+
</span><span class="marked0"><a name="line1116" />1116 return nil if label.nil?
|
1738
|
+
</span><span class="marked1"><a name="line1117" />1117 if self.use_libidn?
|
1739
|
+
</span><span class="marked0"><a name="line1118" />1118 return IDN::Idna.toUnicode(label)
|
1740
|
+
</span><span class="inferred1"><a name="line1119" />1119 else
|
1741
|
+
</span><span class="marked0"><a name="line1120" />1120 raise NotImplementedError,
|
1742
|
+
</span><span class="inferred1"><a name="line1121" />1121 "There is no available pure-ruby implementation. " +
|
1743
|
+
</span><span class="inferred0"><a name="line1122" />1122 "Install libidn bindings."
|
1744
|
+
</span><span class="inferred1"><a name="line1123" />1123 end
|
1745
|
+
</span><span class="inferred0"><a name="line1124" />1124 end
|
1746
|
+
</span><span class="inferred1"><a name="line1125" />1125
|
1747
|
+
</span><span class="marked0"><a name="line1126" />1126 private
|
1748
|
+
</span><span class="inferred1"><a name="line1127" />1127 # Determines if the libidn bindings are available and able to be used.
|
1749
|
+
</span><span class="marked0"><a name="line1128" />1128 def self.use_libidn?
|
1750
|
+
</span><span class="marked1"><a name="line1129" />1129 if !defined?(@use_libidn) || @use_libidn.nil?
|
1751
|
+
</span><span class="marked0"><a name="line1130" />1130 begin
|
1752
|
+
</span><span class="marked1"><a name="line1131" />1131 require 'rubygems'
|
1753
|
+
</span><span class="inferred0"><a name="line1132" />1132 rescue LoadError
|
1754
|
+
</span><span class="marked1"><a name="line1133" />1133 nil
|
1755
|
+
</span><span class="inferred0"><a name="line1134" />1134 end
|
1756
|
+
</span><span class="marked1"><a name="line1135" />1135 begin
|
1757
|
+
</span><span class="marked0"><a name="line1136" />1136 require 'idn'
|
1758
|
+
</span><span class="inferred1"><a name="line1137" />1137 rescue LoadError
|
1759
|
+
</span><span class="marked0"><a name="line1138" />1138 nil
|
1760
|
+
</span><span class="inferred1"><a name="line1139" />1139 end
|
1761
|
+
</span><span class="marked0"><a name="line1140" />1140 @use_libidn = !!(defined?(IDN::Idna))
|
1762
|
+
</span><span class="inferred1"><a name="line1141" />1141 end
|
1763
|
+
</span><span class="marked0"><a name="line1142" />1142 return @use_libidn
|
1764
|
+
</span><span class="inferred1"><a name="line1143" />1143 end
|
1765
|
+
</span><span class="inferred0"><a name="line1144" />1144 end
|
1766
|
+
</span><span class="inferred1"><a name="line1145" />1145
|
1767
|
+
</span><span class="marked0"><a name="line1146" />1146 private
|
1768
|
+
</span><span class="inferred1"><a name="line1147" />1147 # Resolves paths to their simplest form.
|
1769
|
+
</span><span class="marked0"><a name="line1148" />1148 def self.normalize_path(path)
|
1770
|
+
</span><span class="inferred1"><a name="line1149" />1149 # Section 5.2.4 of RFC 3986
|
1771
|
+
</span><span class="inferred0"><a name="line1150" />1150
|
1772
|
+
</span><span class="marked1"><a name="line1151" />1151 return nil if path.nil?
|
1773
|
+
</span><span class="marked0"><a name="line1152" />1152 normalized_path = path.dup
|
1774
|
+
</span><span class="marked1"><a name="line1153" />1153 previous_state = normalized_path.dup
|
1775
|
+
</span><span class="inferred0"><a name="line1154" />1154 begin
|
1776
|
+
</span><span class="marked1"><a name="line1155" />1155 previous_state = normalized_path.dup
|
1777
|
+
</span><span class="marked0"><a name="line1156" />1156 normalized_path.gsub!(/\/\.\//, "/")
|
1778
|
+
</span><span class="marked1"><a name="line1157" />1157 normalized_path.gsub!(/\/\.$/, "/")
|
1779
|
+
</span><span class="marked0"><a name="line1158" />1158 parent = normalized_path.scan(/\/([^\/]+)\/\.\.\//).flatten[0]
|
1780
|
+
</span><span class="marked1"><a name="line1159" />1159 if parent != "." && parent != ".."
|
1781
|
+
</span><span class="marked0"><a name="line1160" />1160 normalized_path.gsub!(/\/#{parent}\/\.\.\//, "/")
|
1782
|
+
</span><span class="inferred1"><a name="line1161" />1161 end
|
1783
|
+
</span><span class="marked0"><a name="line1162" />1162 parent = normalized_path.scan(/\/([^\/]+)\/\.\.$/).flatten[0]
|
1784
|
+
</span><span class="marked1"><a name="line1163" />1163 if parent != "." && parent != ".."
|
1785
|
+
</span><span class="marked0"><a name="line1164" />1164 normalized_path.gsub!(/\/#{parent}\/\.\.$/, "/")
|
1786
|
+
</span><span class="inferred1"><a name="line1165" />1165 end
|
1787
|
+
</span><span class="marked0"><a name="line1166" />1166 normalized_path.gsub!(/^\.\.?\/?/, "")
|
1788
|
+
</span><span class="marked1"><a name="line1167" />1167 normalized_path.gsub!(/^\/\.\.?\//, "/")
|
1789
|
+
</span><span class="marked0"><a name="line1168" />1168 end until previous_state == normalized_path
|
1790
|
+
</span><span class="marked1"><a name="line1169" />1169 return normalized_path
|
1791
|
+
</span><span class="inferred0"><a name="line1170" />1170 end
|
1792
|
+
</span><span class="inferred1"><a name="line1171" />1171
|
1793
|
+
</span><span class="inferred0"><a name="line1172" />1172 # Ensures that the URI is valid.
|
1794
|
+
</span><span class="marked1"><a name="line1173" />1173 def validate
|
1795
|
+
</span><span class="marked0"><a name="line1174" />1174 if self.scheme == nil && self.user == nil && self.password == nil &&
|
1796
|
+
</span><span class="marked1"><a name="line1175" />1175 self.host == nil && self.port == nil && self.path == nil &&
|
1797
|
+
</span><span class="marked0"><a name="line1176" />1176 self.query == nil && self.fragment == nil
|
1798
|
+
</span><span class="marked1"><a name="line1177" />1177 raise InvalidURIError, "All segments were nil."
|
1799
|
+
</span><span class="inferred0"><a name="line1178" />1178 end
|
1800
|
+
</span><span class="marked1"><a name="line1179" />1179 if self.scheme != nil &&
|
1801
|
+
</span><span class="marked0"><a name="line1180" />1180 (self.host == nil || self.host == "") &&
|
1802
|
+
</span><span class="marked1"><a name="line1181" />1181 (self.path == nil || self.path == "")
|
1803
|
+
</span><span class="marked0"><a name="line1182" />1182 raise InvalidURIError,
|
1804
|
+
</span><span class="inferred1"><a name="line1183" />1183 "Absolute URI missing hierarchical segment."
|
1805
|
+
</span><span class="inferred0"><a name="line1184" />1184 end
|
1806
|
+
</span><span class="inferred1"><a name="line1185" />1185 end
|
1807
|
+
</span><span class="inferred0"><a name="line1186" />1186
|
1808
|
+
</span><span class="inferred1"><a name="line1187" />1187 # Replaces the internal state of self with the specified URI's state.
|
1809
|
+
</span><span class="inferred0"><a name="line1188" />1188 # Used in destructive operations to avoid massive code repetition.
|
1810
|
+
</span><span class="marked1"><a name="line1189" />1189 def replace_self(uri)
|
1811
|
+
</span><span class="inferred0"><a name="line1190" />1190 # Reset dependant values
|
1812
|
+
</span><span class="marked1"><a name="line1191" />1191 @userinfo = nil
|
1813
|
+
</span><span class="marked0"><a name="line1192" />1192 @authority = nil
|
1814
|
+
</span><span class="inferred1"><a name="line1193" />1193
|
1815
|
+
</span><span class="marked0"><a name="line1194" />1194 @scheme = uri.scheme
|
1816
|
+
</span><span class="marked1"><a name="line1195" />1195 @user = uri.user
|
1817
|
+
</span><span class="marked0"><a name="line1196" />1196 @password = uri.password
|
1818
|
+
</span><span class="marked1"><a name="line1197" />1197 @host = uri.host
|
1819
|
+
</span><span class="marked0"><a name="line1198" />1198 @specified_port = uri.instance_variable_get("@specified_port")
|
1820
|
+
</span><span class="marked1"><a name="line1199" />1199 @port = @specified_port.to_s.to_i
|
1821
|
+
</span><span class="marked0"><a name="line1200" />1200 @path = uri.path
|
1822
|
+
</span><span class="marked1"><a name="line1201" />1201 @query = uri.query
|
1823
|
+
</span><span class="marked0"><a name="line1202" />1202 @fragment = uri.fragment
|
1824
|
+
</span><span class="marked1"><a name="line1203" />1203 return self
|
1825
|
+
</span><span class="inferred0"><a name="line1204" />1204 end
|
1826
|
+
</span><span class="inferred1"><a name="line1205" />1205 end
|
1827
|
+
</span><span class="inferred0"><a name="line1206" />1206 end
|
1797
1828
|
</span></pre><hr /> <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.8.0.</p><p>
|
1798
1829
|
<a href='http://validator.w3.org/check/referer'>
|
1799
1830
|
<img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
|