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