addressable 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +14 -0
- data/README +18 -6
- data/Rakefile +0 -1
- data/lib/addressable/idna.rb +24 -20
- data/lib/addressable/template.rb +1024 -0
- data/lib/addressable/uri.rb +192 -765
- data/lib/addressable/version.rb +3 -2
- data/spec/addressable/idna_spec.rb +6 -5
- data/spec/addressable/template_spec.rb +2111 -0
- data/spec/addressable/uri_spec.rb +343 -1119
- metadata +4 -2
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
2
|
#--
|
3
3
|
# Addressable, Copyright (c) 2006-2007 Bob Aman
|
4
4
|
#
|
@@ -30,48 +30,37 @@ require "addressable/uri"
|
|
30
30
|
if !"".respond_to?("force_encoding")
|
31
31
|
class String
|
32
32
|
def force_encoding(encoding)
|
33
|
-
|
33
|
+
@encoding = encoding
|
34
34
|
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class Encoding
|
38
|
-
UTF_8 = Encoding.new
|
39
|
-
ASCII_8BIT = Encoding.new
|
40
|
-
end
|
41
|
-
end
|
42
35
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
return true
|
36
|
+
def encoding
|
37
|
+
@encoding ||= Encoding::ASCII_8BIT
|
38
|
+
end
|
47
39
|
end
|
48
40
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
41
|
+
class Encoding
|
42
|
+
def initialize(name)
|
43
|
+
@name = name
|
44
|
+
end
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
return value
|
58
|
-
end
|
46
|
+
def to_s
|
47
|
+
return @name
|
48
|
+
end
|
59
49
|
|
60
|
-
|
61
|
-
|
62
|
-
return ".*"
|
50
|
+
UTF_8 = Encoding.new("UTF-8")
|
51
|
+
ASCII_8BIT = Encoding.new("US-ASCII")
|
63
52
|
end
|
64
53
|
end
|
65
54
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
55
|
+
module URI
|
56
|
+
class HTTP
|
57
|
+
def initialize(uri)
|
58
|
+
@uri = uri
|
59
|
+
end
|
71
60
|
|
72
|
-
|
73
|
-
|
74
|
-
|
61
|
+
def to_s
|
62
|
+
return @uri.to_s
|
63
|
+
end
|
75
64
|
end
|
76
65
|
end
|
77
66
|
|
@@ -104,6 +93,37 @@ describe Addressable::URI, "when created from nil components" do
|
|
104
93
|
it "should be an empty uri" do
|
105
94
|
@uri.to_s.should == ""
|
106
95
|
end
|
96
|
+
|
97
|
+
it "should still be an empty uri if the scheme is set to whitespace" do
|
98
|
+
@uri.scheme = "\t \n"
|
99
|
+
@uri.to_s.should == ""
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should raise an error if set into an invalid state" do
|
103
|
+
(lambda do
|
104
|
+
@uri.user = "user"
|
105
|
+
end).should raise_error(Addressable::URI::InvalidURIError)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should raise an error if set into an invalid state" do
|
109
|
+
(lambda do
|
110
|
+
@uri.password = "pass"
|
111
|
+
end).should raise_error(Addressable::URI::InvalidURIError)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should raise an error if set into an invalid state" do
|
115
|
+
(lambda do
|
116
|
+
@uri.scheme = "http"
|
117
|
+
@uri.fragment = "fragment"
|
118
|
+
end).should raise_error(Addressable::URI::InvalidURIError)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should raise an error if set into an invalid state" do
|
122
|
+
(lambda do
|
123
|
+
@uri.fragment = "fragment"
|
124
|
+
@uri.scheme = "http"
|
125
|
+
end).should raise_error(Addressable::URI::InvalidURIError)
|
126
|
+
end
|
107
127
|
end
|
108
128
|
|
109
129
|
describe Addressable::URI, "when created from string components" do
|
@@ -139,7 +159,9 @@ end
|
|
139
159
|
describe Addressable::URI, "when created with both an authority and a user" do
|
140
160
|
it "should raise an error" do
|
141
161
|
(lambda do
|
142
|
-
Addressable::URI.new(
|
162
|
+
Addressable::URI.new(
|
163
|
+
:user => "user", :authority => "user@example.com:80"
|
164
|
+
)
|
143
165
|
end).should raise_error(ArgumentError)
|
144
166
|
end
|
145
167
|
end
|
@@ -181,8 +203,60 @@ describe Addressable::URI, "when created with a path that hasn't been " +
|
|
181
203
|
end
|
182
204
|
end
|
183
205
|
|
206
|
+
describe Addressable::URI, "when parsed from an Addressable::URI object" do
|
207
|
+
it "should return the object" do
|
208
|
+
uri = Addressable::URI.parse("http://example.com/")
|
209
|
+
(lambda do
|
210
|
+
Addressable::URI.parse(uri).object_id.should == uri.object_id
|
211
|
+
end).should_not raise_error
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should return the object" do
|
215
|
+
uri = Addressable::URI.parse("http://example.com/")
|
216
|
+
(lambda do
|
217
|
+
Addressable::URI.heuristic_parse(uri).object_id.should == uri.object_id
|
218
|
+
end).should_not raise_error
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
describe Addressable::URI, "when parsed from something that looks " +
|
223
|
+
"like a URI object" do
|
224
|
+
it "should parse without error" do
|
225
|
+
uri = Addressable::URI.parse(URI::HTTP.new("http://example.com/"))
|
226
|
+
(lambda do
|
227
|
+
Addressable::URI.parse(uri)
|
228
|
+
end).should_not raise_error
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
describe Addressable::URI, "when parsed from ''" do
|
233
|
+
before do
|
234
|
+
@uri = Addressable::URI.parse("")
|
235
|
+
end
|
236
|
+
|
237
|
+
it "should have no scheme" do
|
238
|
+
@uri.scheme.should == nil
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should not be considered to be ip-based" do
|
242
|
+
@uri.should_not be_ip_based
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should have a path of ''" do
|
246
|
+
@uri.path.should == ""
|
247
|
+
end
|
248
|
+
|
249
|
+
it "should be considered relative" do
|
250
|
+
@uri.should be_relative
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should be considered to be in normal form" do
|
254
|
+
@uri.normalize.should be_eql(@uri)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
184
258
|
# Section 1.1.2 of RFC 3986
|
185
|
-
describe Addressable::URI, "
|
259
|
+
describe Addressable::URI, "when parsed from " +
|
186
260
|
"'ftp://ftp.is.co.za/rfc/rfc1808.txt'" do
|
187
261
|
before do
|
188
262
|
@uri = Addressable::URI.parse("ftp://ftp.is.co.za/rfc/rfc1808.txt")
|
@@ -210,7 +284,7 @@ describe Addressable::URI, " when parsed from " +
|
|
210
284
|
end
|
211
285
|
|
212
286
|
# Section 1.1.2 of RFC 3986
|
213
|
-
describe Addressable::URI, "
|
287
|
+
describe Addressable::URI, "when parsed from " +
|
214
288
|
"'http://www.ietf.org/rfc/rfc2396.txt'" do
|
215
289
|
before do
|
216
290
|
@uri = Addressable::URI.parse("http://www.ietf.org/rfc/rfc2396.txt")
|
@@ -287,10 +361,16 @@ describe Addressable::URI, "when parsed from " +
|
|
287
361
|
@uri.omit!(:scheme, :authority)
|
288
362
|
@uri.to_s.should == "/c=GB?objectClass?one"
|
289
363
|
end
|
364
|
+
|
365
|
+
it "should raise an error if omission would create an invalid URI" do
|
366
|
+
(lambda do
|
367
|
+
@uri.omit(:authority, :path)
|
368
|
+
end).should raise_error(Addressable::URI::InvalidURIError)
|
369
|
+
end
|
290
370
|
end
|
291
371
|
|
292
372
|
# Section 1.1.2 of RFC 3986
|
293
|
-
describe Addressable::URI, "
|
373
|
+
describe Addressable::URI, "when parsed from " +
|
294
374
|
"'mailto:John.Doe@example.com'" do
|
295
375
|
before do
|
296
376
|
@uri = Addressable::URI.parse("mailto:John.Doe@example.com")
|
@@ -314,7 +394,7 @@ describe Addressable::URI, " when parsed from " +
|
|
314
394
|
end
|
315
395
|
|
316
396
|
# Section 1.1.2 of RFC 3986
|
317
|
-
describe Addressable::URI, "
|
397
|
+
describe Addressable::URI, "when parsed from " +
|
318
398
|
"'news:comp.infosystems.www.servers.unix'" do
|
319
399
|
before do
|
320
400
|
@uri = Addressable::URI.parse("news:comp.infosystems.www.servers.unix")
|
@@ -362,7 +442,7 @@ describe Addressable::URI, "when parsed from " +
|
|
362
442
|
end
|
363
443
|
|
364
444
|
# Section 1.1.2 of RFC 3986
|
365
|
-
describe Addressable::URI, "
|
445
|
+
describe Addressable::URI, "when parsed from " +
|
366
446
|
"'telnet://192.0.2.16:80/'" do
|
367
447
|
before do
|
368
448
|
@uri = Addressable::URI.parse("telnet://192.0.2.16:80/")
|
@@ -394,7 +474,7 @@ describe Addressable::URI, " when parsed from " +
|
|
394
474
|
end
|
395
475
|
|
396
476
|
# Section 1.1.2 of RFC 3986
|
397
|
-
describe Addressable::URI, "
|
477
|
+
describe Addressable::URI, "when parsed from " +
|
398
478
|
"'urn:oasis:names:specification:docbook:dtd:xml:4.1.2'" do
|
399
479
|
before do
|
400
480
|
@uri = Addressable::URI.parse(
|
@@ -419,7 +499,7 @@ describe Addressable::URI, " when parsed from " +
|
|
419
499
|
end
|
420
500
|
end
|
421
501
|
|
422
|
-
describe Addressable::URI, "
|
502
|
+
describe Addressable::URI, "when parsed from " +
|
423
503
|
"'http://example.com'" do
|
424
504
|
before do
|
425
505
|
@uri = Addressable::URI.parse("http://example.com")
|
@@ -611,6 +691,7 @@ describe Addressable::URI, " when parsed from " +
|
|
611
691
|
@uri.normalized_password.should == "secret%40123%21"
|
612
692
|
@uri.user.should == ""
|
613
693
|
@uri.normalize.to_s.should == "http://:secret%40123%21@example.com/"
|
694
|
+
@uri.omit(:password).to_s.should == "http://example.com"
|
614
695
|
end
|
615
696
|
|
616
697
|
it "should have the correct user/pass after repeated assignment" do
|
@@ -668,7 +749,7 @@ describe Addressable::URI, " when parsed from " +
|
|
668
749
|
end
|
669
750
|
end
|
670
751
|
|
671
|
-
describe Addressable::URI, "
|
752
|
+
describe Addressable::URI, "when parsed from " +
|
672
753
|
"'http://example.com/'" do
|
673
754
|
before do
|
674
755
|
@uri = Addressable::URI.parse("http://example.com/")
|
@@ -738,12 +819,12 @@ describe Addressable::URI, " when parsed from " +
|
|
738
819
|
@uri.hash.should_not == @uri.to_s.hash
|
739
820
|
end
|
740
821
|
|
741
|
-
it "should have the same hash as an
|
742
|
-
@uri.hash.should == Addressable::URI.parse("http://example.com
|
822
|
+
it "should have the same hash as an equal URI" do
|
823
|
+
@uri.hash.should == Addressable::URI.parse("http://example.com/").hash
|
743
824
|
end
|
744
825
|
end
|
745
826
|
|
746
|
-
describe Addressable::URI, "
|
827
|
+
describe Addressable::URI, "when parsed from " +
|
747
828
|
"'http://@example.com/'" do
|
748
829
|
before do
|
749
830
|
@uri = Addressable::URI.parse("http://@example.com/")
|
@@ -771,7 +852,7 @@ describe Addressable::URI, " when parsed from " +
|
|
771
852
|
end
|
772
853
|
end
|
773
854
|
|
774
|
-
describe Addressable::URI, "
|
855
|
+
describe Addressable::URI, "when parsed from " +
|
775
856
|
"'http://example.com./'" do
|
776
857
|
before do
|
777
858
|
@uri = Addressable::URI.parse("http://example.com./")
|
@@ -790,7 +871,7 @@ describe Addressable::URI, " when parsed from " +
|
|
790
871
|
end
|
791
872
|
end
|
792
873
|
|
793
|
-
describe Addressable::URI, "
|
874
|
+
describe Addressable::URI, "when parsed from " +
|
794
875
|
"'http://:@example.com/'" do
|
795
876
|
before do
|
796
877
|
@uri = Addressable::URI.parse("http://:@example.com/")
|
@@ -818,7 +899,7 @@ describe Addressable::URI, " when parsed from " +
|
|
818
899
|
end
|
819
900
|
end
|
820
901
|
|
821
|
-
describe Addressable::URI, "
|
902
|
+
describe Addressable::URI, "when parsed from " +
|
822
903
|
"'http://example.com/~smith/'" do
|
823
904
|
before do
|
824
905
|
@uri = Addressable::URI.parse("http://example.com/~smith/")
|
@@ -839,7 +920,31 @@ describe Addressable::URI, " when parsed from " +
|
|
839
920
|
end
|
840
921
|
end
|
841
922
|
|
842
|
-
describe Addressable::URI, "
|
923
|
+
describe Addressable::URI, "when parsed from " +
|
924
|
+
"'http://example.com/%E8'" do
|
925
|
+
before do
|
926
|
+
@uri = Addressable::URI.parse("http://example.com/%E8")
|
927
|
+
end
|
928
|
+
|
929
|
+
it "should not raise an exception when normalized" do
|
930
|
+
(lambda do
|
931
|
+
@uri.normalize
|
932
|
+
end).should_not raise_error(ArgumentError)
|
933
|
+
end
|
934
|
+
|
935
|
+
it "should be considered to be in normal form" do
|
936
|
+
@uri.normalize.should be_eql(@uri)
|
937
|
+
end
|
938
|
+
|
939
|
+
it "should not change if encoded with the normalizing algorithm" do
|
940
|
+
Addressable::URI.normalized_encode(@uri).to_s.should ==
|
941
|
+
"http://example.com/%E8"
|
942
|
+
Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s.should ===
|
943
|
+
"http://example.com/%E8"
|
944
|
+
end
|
945
|
+
end
|
946
|
+
|
947
|
+
describe Addressable::URI, "when parsed from " +
|
843
948
|
"'http://example.com/%C3%87'" do
|
844
949
|
before do
|
845
950
|
@uri = Addressable::URI.parse("http://example.com/%C3%87")
|
@@ -884,7 +989,7 @@ describe Addressable::URI, " when parsed from " +
|
|
884
989
|
end
|
885
990
|
end
|
886
991
|
|
887
|
-
describe Addressable::URI, "
|
992
|
+
describe Addressable::URI, "when parsed from " +
|
888
993
|
"'http://example.com/?q=string'" do
|
889
994
|
before do
|
890
995
|
@uri = Addressable::URI.parse("http://example.com/?q=string")
|
@@ -943,7 +1048,7 @@ describe Addressable::URI, " when parsed from " +
|
|
943
1048
|
end
|
944
1049
|
end
|
945
1050
|
|
946
|
-
describe Addressable::URI, "
|
1051
|
+
describe Addressable::URI, "when parsed from " +
|
947
1052
|
"'http://example.com:80/'" do
|
948
1053
|
before do
|
949
1054
|
@uri = Addressable::URI.parse("http://example.com:80/")
|
@@ -1055,7 +1160,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1055
1160
|
end
|
1056
1161
|
end
|
1057
1162
|
|
1058
|
-
describe Addressable::URI, "
|
1163
|
+
describe Addressable::URI, "when parsed from " +
|
1059
1164
|
"'http://example.com:8080/'" do
|
1060
1165
|
before do
|
1061
1166
|
@uri = Addressable::URI.parse("http://example.com:8080/")
|
@@ -1152,7 +1257,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1152
1257
|
end
|
1153
1258
|
end
|
1154
1259
|
|
1155
|
-
describe Addressable::URI, "
|
1260
|
+
describe Addressable::URI, "when parsed from " +
|
1156
1261
|
"'http://example.com:%38%30/'" do
|
1157
1262
|
before do
|
1158
1263
|
@uri = Addressable::URI.parse("http://example.com:%38%30/")
|
@@ -1171,7 +1276,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1171
1276
|
end
|
1172
1277
|
end
|
1173
1278
|
|
1174
|
-
describe Addressable::URI, "
|
1279
|
+
describe Addressable::URI, "when parsed from " +
|
1175
1280
|
"'http://example.com/path/to/resource/'" do
|
1176
1281
|
before do
|
1177
1282
|
@uri = Addressable::URI.parse("http://example.com/path/to/resource/")
|
@@ -1409,7 +1514,7 @@ describe Addressable::URI, "when parsed from " +
|
|
1409
1514
|
end
|
1410
1515
|
end
|
1411
1516
|
|
1412
|
-
describe Addressable::URI, "
|
1517
|
+
describe Addressable::URI, "when parsed from " +
|
1413
1518
|
"'http://example.com/file.txt'" do
|
1414
1519
|
before do
|
1415
1520
|
@uri = Addressable::URI.parse("http://example.com/file.txt")
|
@@ -1460,7 +1565,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1460
1565
|
end
|
1461
1566
|
end
|
1462
1567
|
|
1463
|
-
describe Addressable::URI, "
|
1568
|
+
describe Addressable::URI, "when parsed from " +
|
1464
1569
|
"'http://example.com/file.txt;parameter'" do
|
1465
1570
|
before do
|
1466
1571
|
@uri = Addressable::URI.parse("http://example.com/file.txt;parameter")
|
@@ -1511,7 +1616,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1511
1616
|
end
|
1512
1617
|
end
|
1513
1618
|
|
1514
|
-
describe Addressable::URI, "
|
1619
|
+
describe Addressable::URI, "when parsed from " +
|
1515
1620
|
"'http://example.com/file.txt;x=y'" do
|
1516
1621
|
before do
|
1517
1622
|
@uri = Addressable::URI.parse("http://example.com/file.txt;x=y")
|
@@ -1566,7 +1671,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1566
1671
|
end
|
1567
1672
|
end
|
1568
1673
|
|
1569
|
-
describe Addressable::URI, "
|
1674
|
+
describe Addressable::URI, "when parsed from " +
|
1570
1675
|
"'svn+ssh://developername@rubyforge.org/var/svn/project'" do
|
1571
1676
|
before do
|
1572
1677
|
@uri = Addressable::URI.parse(
|
@@ -1599,7 +1704,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1599
1704
|
end
|
1600
1705
|
end
|
1601
1706
|
|
1602
|
-
describe Addressable::URI, "
|
1707
|
+
describe Addressable::URI, "when parsed from " +
|
1603
1708
|
"'ssh+svn://developername@rubyforge.org/var/svn/project'" do
|
1604
1709
|
before do
|
1605
1710
|
@uri = Addressable::URI.parse(
|
@@ -1636,7 +1741,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1636
1741
|
end
|
1637
1742
|
end
|
1638
1743
|
|
1639
|
-
describe Addressable::URI, "
|
1744
|
+
describe Addressable::URI, "when parsed from " +
|
1640
1745
|
"'mailto:user@example.com'" do
|
1641
1746
|
before do
|
1642
1747
|
@uri = Addressable::URI.parse("mailto:user@example.com")
|
@@ -1663,7 +1768,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1663
1768
|
end
|
1664
1769
|
end
|
1665
1770
|
|
1666
|
-
describe Addressable::URI, "
|
1771
|
+
describe Addressable::URI, "when parsed from " +
|
1667
1772
|
"'tag:example.com,2006-08-18:/path/to/something'" do
|
1668
1773
|
before do
|
1669
1774
|
@uri = Addressable::URI.parse(
|
@@ -1692,7 +1797,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1692
1797
|
end
|
1693
1798
|
end
|
1694
1799
|
|
1695
|
-
describe Addressable::URI, "
|
1800
|
+
describe Addressable::URI, "when parsed from " +
|
1696
1801
|
"'http://example.com/x;y/'" do
|
1697
1802
|
before do
|
1698
1803
|
@uri = Addressable::URI.parse("http://example.com/x;y/")
|
@@ -1703,7 +1808,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1703
1808
|
end
|
1704
1809
|
end
|
1705
1810
|
|
1706
|
-
describe Addressable::URI, "
|
1811
|
+
describe Addressable::URI, "when parsed from " +
|
1707
1812
|
"'http://example.com/?x=1&y=2'" do
|
1708
1813
|
before do
|
1709
1814
|
@uri = Addressable::URI.parse("http://example.com/?x=1&y=2")
|
@@ -1714,7 +1819,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1714
1819
|
end
|
1715
1820
|
end
|
1716
1821
|
|
1717
|
-
describe Addressable::URI, "
|
1822
|
+
describe Addressable::URI, "when parsed from " +
|
1718
1823
|
"'view-source:http://example.com/'" do
|
1719
1824
|
before do
|
1720
1825
|
@uri = Addressable::URI.parse("view-source:http://example.com/")
|
@@ -1733,7 +1838,7 @@ describe Addressable::URI, " when parsed from " +
|
|
1733
1838
|
end
|
1734
1839
|
end
|
1735
1840
|
|
1736
|
-
describe Addressable::URI, "
|
1841
|
+
describe Addressable::URI, "when parsed from " +
|
1737
1842
|
"'http://user:pass@example.com/path/to/resource?query=x#fragment'" do
|
1738
1843
|
before do
|
1739
1844
|
@uri = Addressable::URI.parse(
|
@@ -1831,11 +1936,15 @@ describe Addressable::URI, " when parsed from " +
|
|
1831
1936
|
@uri.scheme.should == "ftp"
|
1832
1937
|
@uri.to_s.should ==
|
1833
1938
|
"ftp://user:pass@example.com/path/to/resource?query=x#fragment"
|
1939
|
+
@uri.to_str.should ==
|
1940
|
+
"ftp://user:pass@example.com/path/to/resource?query=x#fragment"
|
1834
1941
|
@uri.scheme = "bogus!"
|
1835
1942
|
@uri.scheme.should == "bogus!"
|
1836
1943
|
@uri.normalized_scheme.should == "bogus%21"
|
1837
1944
|
@uri.normalize.to_s.should ==
|
1838
1945
|
"bogus%21://user:pass@example.com/path/to/resource?query=x#fragment"
|
1946
|
+
@uri.normalize.to_str.should ==
|
1947
|
+
"bogus%21://user:pass@example.com/path/to/resource?query=x#fragment"
|
1839
1948
|
end
|
1840
1949
|
|
1841
1950
|
it "should have the correct authority segment after assignment" do
|
@@ -1917,10 +2026,12 @@ describe Addressable::URI, " when parsed from " +
|
|
1917
2026
|
end
|
1918
2027
|
|
1919
2028
|
it "should have the correct query string after hash assignment" do
|
1920
|
-
@uri.query_values = {"?uestion mark"=>"=sign", "hello"=>"
|
2029
|
+
@uri.query_values = {"?uestion mark"=>"=sign", "hello"=>"g\xC3\xBCnther"}
|
1921
2030
|
@uri.query.split("&").should include("%3Fuestion%20mark=%3Dsign")
|
1922
2031
|
@uri.query.split("&").should include("hello=g%C3%BCnther")
|
1923
|
-
@uri.query_values.should == {
|
2032
|
+
@uri.query_values.should == {
|
2033
|
+
"?uestion mark"=>"=sign", "hello"=>"g\xC3\xBCnther"
|
2034
|
+
}
|
1924
2035
|
end
|
1925
2036
|
|
1926
2037
|
it "should have the correct query string after flag hash assignment" do
|
@@ -1933,6 +2044,12 @@ describe Addressable::URI, " when parsed from " +
|
|
1933
2044
|
}
|
1934
2045
|
end
|
1935
2046
|
|
2047
|
+
it "should raise an error if query values are set to a bogus type" do
|
2048
|
+
(lambda do
|
2049
|
+
@uri.query_values = "bogus"
|
2050
|
+
end).should raise_error(TypeError)
|
2051
|
+
end
|
2052
|
+
|
1936
2053
|
it "should have the correct fragment after assignment" do
|
1937
2054
|
@uri.fragment = "newfragment"
|
1938
2055
|
@uri.fragment.should == "newfragment"
|
@@ -2023,7 +2140,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2023
2140
|
end
|
2024
2141
|
end
|
2025
2142
|
|
2026
|
-
describe Addressable::URI, "
|
2143
|
+
describe Addressable::URI, "when parsed from " +
|
2027
2144
|
"'http://user@example.com'" do
|
2028
2145
|
before do
|
2029
2146
|
@uri = Addressable::URI.parse("http://user@example.com")
|
@@ -2111,7 +2228,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2111
2228
|
end
|
2112
2229
|
end
|
2113
2230
|
|
2114
|
-
describe Addressable::URI, "
|
2231
|
+
describe Addressable::URI, "when parsed from " +
|
2115
2232
|
"'http://user:@example.com'" do
|
2116
2233
|
before do
|
2117
2234
|
@uri = Addressable::URI.parse("http://user:@example.com")
|
@@ -2166,7 +2283,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2166
2283
|
end
|
2167
2284
|
end
|
2168
2285
|
|
2169
|
-
describe Addressable::URI, "
|
2286
|
+
describe Addressable::URI, "when parsed from " +
|
2170
2287
|
"'http://:pass@example.com'" do
|
2171
2288
|
before do
|
2172
2289
|
@uri = Addressable::URI.parse("http://:pass@example.com")
|
@@ -2226,7 +2343,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2226
2343
|
end
|
2227
2344
|
end
|
2228
2345
|
|
2229
|
-
describe Addressable::URI, "
|
2346
|
+
describe Addressable::URI, "when parsed from " +
|
2230
2347
|
"'http://:@example.com'" do
|
2231
2348
|
before do
|
2232
2349
|
@uri = Addressable::URI.parse("http://:@example.com")
|
@@ -2282,7 +2399,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2282
2399
|
end
|
2283
2400
|
end
|
2284
2401
|
|
2285
|
-
describe Addressable::URI, "
|
2402
|
+
describe Addressable::URI, "when parsed from " +
|
2286
2403
|
"'#example'" do
|
2287
2404
|
before do
|
2288
2405
|
@uri = Addressable::URI.parse("#example")
|
@@ -2309,7 +2426,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2309
2426
|
end
|
2310
2427
|
end
|
2311
2428
|
|
2312
|
-
describe Addressable::URI, "
|
2429
|
+
describe Addressable::URI, "when parsed from " +
|
2313
2430
|
"the network-path reference '//example.com/'" do
|
2314
2431
|
before do
|
2315
2432
|
@uri = Addressable::URI.parse("//example.com/")
|
@@ -2337,7 +2454,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2337
2454
|
end
|
2338
2455
|
end
|
2339
2456
|
|
2340
|
-
describe Addressable::URI, "
|
2457
|
+
describe Addressable::URI, "when parsed from " +
|
2341
2458
|
"'feed://http://example.com/'" do
|
2342
2459
|
before do
|
2343
2460
|
@uri = Addressable::URI.parse("feed://http://example.com/")
|
@@ -2352,7 +2469,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2352
2469
|
end
|
2353
2470
|
end
|
2354
2471
|
|
2355
|
-
describe Addressable::URI, "
|
2472
|
+
describe Addressable::URI, "when parsed from " +
|
2356
2473
|
"'feed:http://example.com/'" do
|
2357
2474
|
before do
|
2358
2475
|
@uri = Addressable::URI.parse("feed:http://example.com/")
|
@@ -2381,7 +2498,7 @@ describe Addressable::URI, "when parsed from " +
|
|
2381
2498
|
end
|
2382
2499
|
end
|
2383
2500
|
|
2384
|
-
describe Addressable::URI, "
|
2501
|
+
describe Addressable::URI, "when parsed from " +
|
2385
2502
|
"'http://example.com/indirect/path/./to/../resource/'" do
|
2386
2503
|
before do
|
2387
2504
|
@uri = Addressable::URI.parse(
|
@@ -2411,7 +2528,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2411
2528
|
end
|
2412
2529
|
end
|
2413
2530
|
|
2414
|
-
describe Addressable::URI, "
|
2531
|
+
describe Addressable::URI, "when parsed from " +
|
2415
2532
|
"'http://under_score.example.com/'" do
|
2416
2533
|
it "should not cause an error" do
|
2417
2534
|
(lambda do
|
@@ -2420,7 +2537,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2420
2537
|
end
|
2421
2538
|
end
|
2422
2539
|
|
2423
|
-
describe Addressable::URI, "
|
2540
|
+
describe Addressable::URI, "when parsed from " +
|
2424
2541
|
"'./this:that'" do
|
2425
2542
|
before do
|
2426
2543
|
@uri = Addressable::URI.parse("./this:that")
|
@@ -2450,7 +2567,26 @@ describe Addressable::URI, "when parsed from " +
|
|
2450
2567
|
end
|
2451
2568
|
end
|
2452
2569
|
|
2453
|
-
describe Addressable::URI, "
|
2570
|
+
describe Addressable::URI, "when parsed from '?'" do
|
2571
|
+
before do
|
2572
|
+
@uri = Addressable::URI.parse("?")
|
2573
|
+
end
|
2574
|
+
|
2575
|
+
it "should have the correct subscript notation query values" do
|
2576
|
+
@uri.query_values.should == {}
|
2577
|
+
@uri.query_values(:notation => :subscript).should == {}
|
2578
|
+
end
|
2579
|
+
|
2580
|
+
it "should have the correct dot notation query values" do
|
2581
|
+
@uri.query_values(:notation => :dot).should == {}
|
2582
|
+
end
|
2583
|
+
|
2584
|
+
it "should have the correct flat notation query values" do
|
2585
|
+
@uri.query_values(:notation => :flat).should == {}
|
2586
|
+
end
|
2587
|
+
end
|
2588
|
+
|
2589
|
+
describe Addressable::URI, "when parsed from '?one=1&two=2&three=3'" do
|
2454
2590
|
before do
|
2455
2591
|
@uri = Addressable::URI.parse("?one=1&two=2&three=3")
|
2456
2592
|
end
|
@@ -2466,7 +2602,7 @@ describe Addressable::URI, " when parsed from '?one=1&two=2&three=3'" do
|
|
2466
2602
|
end
|
2467
2603
|
end
|
2468
2604
|
|
2469
|
-
describe Addressable::URI, "
|
2605
|
+
describe Addressable::URI, "when parsed from '?one[two][three]=four'" do
|
2470
2606
|
before do
|
2471
2607
|
@uri = Addressable::URI.parse("?one[two][three]=four")
|
2472
2608
|
end
|
@@ -2482,7 +2618,7 @@ describe Addressable::URI, " when parsed from '?one[two][three]=four'" do
|
|
2482
2618
|
end
|
2483
2619
|
end
|
2484
2620
|
|
2485
|
-
describe Addressable::URI, "
|
2621
|
+
describe Addressable::URI, "when parsed from '?one.two.three=four'" do
|
2486
2622
|
before do
|
2487
2623
|
@uri = Addressable::URI.parse("?one.two.three=four")
|
2488
2624
|
end
|
@@ -2500,7 +2636,7 @@ describe Addressable::URI, " when parsed from '?one.two.three=four'" do
|
|
2500
2636
|
end
|
2501
2637
|
end
|
2502
2638
|
|
2503
|
-
describe Addressable::URI, "
|
2639
|
+
describe Addressable::URI, "when parsed from " +
|
2504
2640
|
"'?one[two][three]=four&one[two][five]=six'" do
|
2505
2641
|
before do
|
2506
2642
|
@uri = Addressable::URI.parse("?one[two][three]=four&one[two][five]=six")
|
@@ -2520,7 +2656,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2520
2656
|
end
|
2521
2657
|
end
|
2522
2658
|
|
2523
|
-
describe Addressable::URI, "
|
2659
|
+
describe Addressable::URI, "when parsed from " +
|
2524
2660
|
"'?one.two.three=four&one.two.five=six'" do
|
2525
2661
|
before do
|
2526
2662
|
@uri = Addressable::URI.parse("?one.two.three=four&one.two.five=six")
|
@@ -2540,7 +2676,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2540
2676
|
end
|
2541
2677
|
end
|
2542
2678
|
|
2543
|
-
describe Addressable::URI, "
|
2679
|
+
describe Addressable::URI, "when parsed from " +
|
2544
2680
|
"'?one[two][three][]=four&one[two][three][]=five'" do
|
2545
2681
|
before do
|
2546
2682
|
@uri = Addressable::URI.parse(
|
@@ -2548,7 +2684,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2548
2684
|
)
|
2549
2685
|
end
|
2550
2686
|
|
2551
|
-
it "should have the correct
|
2687
|
+
it "should have the correct subscript notation query values" do
|
2552
2688
|
@uri.query_values(:notation => :subscript).should == {
|
2553
2689
|
"one" => {"two" => {"three" => ["four", "five"]}}
|
2554
2690
|
}
|
@@ -2561,7 +2697,22 @@ describe Addressable::URI, " when parsed from " +
|
|
2561
2697
|
end
|
2562
2698
|
end
|
2563
2699
|
|
2564
|
-
describe Addressable::URI, "
|
2700
|
+
describe Addressable::URI, "when parsed from " +
|
2701
|
+
"'?one[two][three][0]=four&one[two][three][1]=five'" do
|
2702
|
+
before do
|
2703
|
+
@uri = Addressable::URI.parse(
|
2704
|
+
"?one[two][three][0]=four&one[two][three][1]=five"
|
2705
|
+
)
|
2706
|
+
end
|
2707
|
+
|
2708
|
+
it "should have the correct subscript notation query values" do
|
2709
|
+
@uri.query_values(:notation => :subscript).should == {
|
2710
|
+
"one" => {"two" => {"three" => ["four", "five"]}}
|
2711
|
+
}
|
2712
|
+
end
|
2713
|
+
end
|
2714
|
+
|
2715
|
+
describe Addressable::URI, "when parsed from " +
|
2565
2716
|
"'http://www.詹姆斯.com/'" do
|
2566
2717
|
before do
|
2567
2718
|
@uri = Addressable::URI.parse("http://www.詹姆斯.com/")
|
@@ -2578,7 +2729,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2578
2729
|
end
|
2579
2730
|
end
|
2580
2731
|
|
2581
|
-
describe Addressable::URI, "
|
2732
|
+
describe Addressable::URI, "when parsed from " +
|
2582
2733
|
"'http://www.詹姆斯.com/ some spaces /'" do
|
2583
2734
|
before do
|
2584
2735
|
@uri = Addressable::URI.parse("http://www.詹姆斯.com/ some spaces /")
|
@@ -2597,7 +2748,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2597
2748
|
end
|
2598
2749
|
end
|
2599
2750
|
|
2600
|
-
describe Addressable::URI, "
|
2751
|
+
describe Addressable::URI, "when parsed from " +
|
2601
2752
|
"'http://www.xn--8ws00zhy3a.com/'" do
|
2602
2753
|
before do
|
2603
2754
|
@uri = Addressable::URI.parse("http://www.xn--8ws00zhy3a.com/")
|
@@ -2606,9 +2757,17 @@ describe Addressable::URI, " when parsed from " +
|
|
2606
2757
|
it "should be displayed as http://www.詹姆斯.com/" do
|
2607
2758
|
@uri.display_uri.to_s.should == "http://www.詹姆斯.com/"
|
2608
2759
|
end
|
2760
|
+
|
2761
|
+
it "should properly force the encoding" do
|
2762
|
+
display_string = @uri.display_uri.to_str
|
2763
|
+
display_string.should == "http://www.詹姆斯.com/"
|
2764
|
+
if display_string.respond_to?(:encoding)
|
2765
|
+
display_string.encoding.to_s.should == Encoding::UTF_8.to_s
|
2766
|
+
end
|
2767
|
+
end
|
2609
2768
|
end
|
2610
2769
|
|
2611
|
-
describe Addressable::URI, "
|
2770
|
+
describe Addressable::URI, "when parsed from " +
|
2612
2771
|
"'http://www.詹姆斯.com/atomtests/iri/詹.html'" do
|
2613
2772
|
before do
|
2614
2773
|
@uri = Addressable::URI.parse("http://www.詹姆斯.com/atomtests/iri/詹.html")
|
@@ -2623,7 +2782,7 @@ describe Addressable::URI, " when parsed from " +
|
|
2623
2782
|
end
|
2624
2783
|
end
|
2625
2784
|
|
2626
|
-
describe Addressable::URI, "
|
2785
|
+
describe Addressable::URI, "when parsed from a percent-encoded IRI" do
|
2627
2786
|
before do
|
2628
2787
|
@uri = Addressable::URI.parse(
|
2629
2788
|
"http://www.%E3%81%BB%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA" +
|
@@ -2936,47 +3095,6 @@ describe Addressable::URI, "with a base uri of 'http://a/b/c/d;p?q'" do
|
|
2936
3095
|
end
|
2937
3096
|
end
|
2938
3097
|
|
2939
|
-
describe Addressable::URI, "when extracting from an arbitrary text" do
|
2940
|
-
before do
|
2941
|
-
@text = File.open(File.expand_path(
|
2942
|
-
File.dirname(__FILE__) + "/../data/rfc3986.txt")) { |file| file.read }
|
2943
|
-
end
|
2944
|
-
|
2945
|
-
it "should have all obvious URIs extractable from it" do
|
2946
|
-
@uris = Addressable::URI.extract(@text)
|
2947
|
-
@uris.should include("http://www.w3.org/People/Berners-Lee/")
|
2948
|
-
@uris.should include("http://roy.gbiv.com/")
|
2949
|
-
@uris.should include("http://larry.masinter.net/")
|
2950
|
-
@uris = Addressable::URI.extract(@text,
|
2951
|
-
:base => "http://example.com/", :parse => true)
|
2952
|
-
@uris.should include(
|
2953
|
-
Addressable::URI.parse("http://www.w3.org/People/Berners-Lee/"))
|
2954
|
-
@uris.should include(
|
2955
|
-
Addressable::URI.parse("http://roy.gbiv.com/"))
|
2956
|
-
@uris.should include(
|
2957
|
-
Addressable::URI.parse("http://larry.masinter.net/"))
|
2958
|
-
end
|
2959
|
-
end
|
2960
|
-
|
2961
|
-
describe Addressable::URI, "when extracting from an arbitrary text " +
|
2962
|
-
"containing invalid URIs" do
|
2963
|
-
before do
|
2964
|
-
@text = <<-TEXT
|
2965
|
-
This is an invalid URI:
|
2966
|
-
http://example.com:bogus/path/to/something/
|
2967
|
-
This is a valid URI:
|
2968
|
-
http://example.com:80/path/to/something/
|
2969
|
-
TEXT
|
2970
|
-
end
|
2971
|
-
|
2972
|
-
it "should ignore invalid URIs when extracting" do
|
2973
|
-
@uris = Addressable::URI.extract(@text)
|
2974
|
-
@uris.should include("http://example.com:80/path/to/something/")
|
2975
|
-
@uris.should_not include("http://example.com:bogus/path/to/something/")
|
2976
|
-
@uris.size.should == 1
|
2977
|
-
end
|
2978
|
-
end
|
2979
|
-
|
2980
3098
|
describe Addressable::URI, "when converting the path " +
|
2981
3099
|
"'relative/path/to/something'" do
|
2982
3100
|
before do
|
@@ -2986,13 +3104,13 @@ describe Addressable::URI, "when converting the path " +
|
|
2986
3104
|
it "should convert to " +
|
2987
3105
|
"\'relative/path/to/something\'" do
|
2988
3106
|
@uri = Addressable::URI.convert_path(@path)
|
2989
|
-
@uri.
|
3107
|
+
@uri.to_str.should == "relative/path/to/something"
|
2990
3108
|
end
|
2991
3109
|
|
2992
3110
|
it "should join with an absolute file path correctly" do
|
2993
3111
|
@base = Addressable::URI.convert_path("/absolute/path/")
|
2994
3112
|
@uri = Addressable::URI.convert_path(@path)
|
2995
|
-
(@base + @uri).
|
3113
|
+
(@base + @uri).to_str.should ==
|
2996
3114
|
"file:///absolute/path/relative/path/to/something"
|
2997
3115
|
end
|
2998
3116
|
end
|
@@ -3017,12 +3135,12 @@ describe Addressable::URI, "when given the root directory" do
|
|
3017
3135
|
if RUBY_PLATFORM =~ /mswin/
|
3018
3136
|
it "should convert to \'file:///c:/\'" do
|
3019
3137
|
@uri = Addressable::URI.convert_path(@path)
|
3020
|
-
@uri.
|
3138
|
+
@uri.to_str.should == "file:///c:/"
|
3021
3139
|
end
|
3022
3140
|
else
|
3023
3141
|
it "should convert to \'file:///\'" do
|
3024
3142
|
@uri = Addressable::URI.convert_path(@path)
|
3025
|
-
@uri.
|
3143
|
+
@uri.to_str.should == "file:///"
|
3026
3144
|
end
|
3027
3145
|
end
|
3028
3146
|
end
|
@@ -3035,11 +3153,11 @@ describe Addressable::URI, "when given the path '/home/user/'" do
|
|
3035
3153
|
it "should convert to " +
|
3036
3154
|
"\'file:///home/user/\'" do
|
3037
3155
|
@uri = Addressable::URI.convert_path(@path)
|
3038
|
-
@uri.
|
3156
|
+
@uri.to_str.should == "file:///home/user/"
|
3039
3157
|
end
|
3040
3158
|
end
|
3041
3159
|
|
3042
|
-
describe Addressable::URI, "
|
3160
|
+
describe Addressable::URI, "when given the path " +
|
3043
3161
|
"'c:\\windows\\My Documents 100%20\\foo.txt'" do
|
3044
3162
|
before do
|
3045
3163
|
@path = "c:\\windows\\My Documents 100%20\\foo.txt"
|
@@ -3048,11 +3166,11 @@ describe Addressable::URI, " when given the path " +
|
|
3048
3166
|
it "should convert to " +
|
3049
3167
|
"\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
|
3050
3168
|
@uri = Addressable::URI.convert_path(@path)
|
3051
|
-
@uri.
|
3169
|
+
@uri.to_str.should == "file:///c:/windows/My%20Documents%20100%20/foo.txt"
|
3052
3170
|
end
|
3053
3171
|
end
|
3054
3172
|
|
3055
|
-
describe Addressable::URI, "
|
3173
|
+
describe Addressable::URI, "when given the path " +
|
3056
3174
|
"'file://c:\\windows\\My Documents 100%20\\foo.txt'" do
|
3057
3175
|
before do
|
3058
3176
|
@path = "file://c:\\windows\\My Documents 100%20\\foo.txt"
|
@@ -3061,11 +3179,11 @@ describe Addressable::URI, " when given the path " +
|
|
3061
3179
|
it "should convert to " +
|
3062
3180
|
"\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
|
3063
3181
|
@uri = Addressable::URI.convert_path(@path)
|
3064
|
-
@uri.
|
3182
|
+
@uri.to_str.should == "file:///c:/windows/My%20Documents%20100%20/foo.txt"
|
3065
3183
|
end
|
3066
3184
|
end
|
3067
3185
|
|
3068
|
-
describe Addressable::URI, "
|
3186
|
+
describe Addressable::URI, "when given the path " +
|
3069
3187
|
"'file:c:\\windows\\My Documents 100%20\\foo.txt'" do
|
3070
3188
|
before do
|
3071
3189
|
@path = "file:c:\\windows\\My Documents 100%20\\foo.txt"
|
@@ -3074,11 +3192,11 @@ describe Addressable::URI, " when given the path " +
|
|
3074
3192
|
it "should convert to " +
|
3075
3193
|
"\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
|
3076
3194
|
@uri = Addressable::URI.convert_path(@path)
|
3077
|
-
@uri.
|
3195
|
+
@uri.to_str.should == "file:///c:/windows/My%20Documents%20100%20/foo.txt"
|
3078
3196
|
end
|
3079
3197
|
end
|
3080
3198
|
|
3081
|
-
describe Addressable::URI, "
|
3199
|
+
describe Addressable::URI, "when given the path " +
|
3082
3200
|
"'file:/c:\\windows\\My Documents 100%20\\foo.txt'" do
|
3083
3201
|
before do
|
3084
3202
|
@path = "file:/c:\\windows\\My Documents 100%20\\foo.txt"
|
@@ -3087,11 +3205,11 @@ describe Addressable::URI, " when given the path " +
|
|
3087
3205
|
it "should convert to " +
|
3088
3206
|
"\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
|
3089
3207
|
@uri = Addressable::URI.convert_path(@path)
|
3090
|
-
@uri.
|
3208
|
+
@uri.to_str.should == "file:///c:/windows/My%20Documents%20100%20/foo.txt"
|
3091
3209
|
end
|
3092
3210
|
end
|
3093
3211
|
|
3094
|
-
describe Addressable::URI, "
|
3212
|
+
describe Addressable::URI, "when given the path " +
|
3095
3213
|
"'file:///c|/windows/My%20Documents%20100%20/foo.txt'" do
|
3096
3214
|
before do
|
3097
3215
|
@path = "file:///c|/windows/My%20Documents%20100%20/foo.txt"
|
@@ -3100,7 +3218,7 @@ describe Addressable::URI, " when given the path " +
|
|
3100
3218
|
it "should convert to " +
|
3101
3219
|
"\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
|
3102
3220
|
@uri = Addressable::URI.convert_path(@path)
|
3103
|
-
@uri.
|
3221
|
+
@uri.to_str.should == "file:///c:/windows/My%20Documents%20100%20/foo.txt"
|
3104
3222
|
end
|
3105
3223
|
end
|
3106
3224
|
|
@@ -3111,480 +3229,7 @@ describe Addressable::URI, "when given an http protocol URI" do
|
|
3111
3229
|
|
3112
3230
|
it "should not do any conversion at all" do
|
3113
3231
|
@uri = Addressable::URI.convert_path(@path)
|
3114
|
-
@uri.
|
3115
|
-
end
|
3116
|
-
end
|
3117
|
-
|
3118
|
-
describe Addressable::URI, " when given the template pattern " +
|
3119
|
-
"'http://example.com/search/{query}/' " +
|
3120
|
-
"to be processed with the ExampleProcessor" do
|
3121
|
-
before do
|
3122
|
-
@pattern = "http://example.com/search/{query}/"
|
3123
|
-
end
|
3124
|
-
|
3125
|
-
it "should expand to " +
|
3126
|
-
"'http://example.com/search/an+example+search+query/' " +
|
3127
|
-
"with a mapping of {\"query\" => \"an example search query\"} " do
|
3128
|
-
Addressable::URI.expand_template(
|
3129
|
-
"http://example.com/search/{query}/",
|
3130
|
-
{"query" => "an example search query"},
|
3131
|
-
ExampleProcessor).to_s.should ==
|
3132
|
-
"http://example.com/search/an+example+search+query/"
|
3133
|
-
end
|
3134
|
-
|
3135
|
-
it "should raise an error " +
|
3136
|
-
"with a mapping of {\"query\" => \"invalid!\"}" do
|
3137
|
-
(lambda do
|
3138
|
-
Addressable::URI.expand_template(
|
3139
|
-
"http://example.com/search/{query}/",
|
3140
|
-
{"query" => "invalid!"},
|
3141
|
-
ExampleProcessor).to_s
|
3142
|
-
end).should raise_error
|
3143
|
-
end
|
3144
|
-
end
|
3145
|
-
|
3146
|
-
# Section 3.3.1 of the URI Template draft v 01
|
3147
|
-
describe Addressable::URI, " when given the mapping supplied in " +
|
3148
|
-
"Section 3.3.1 of the URI Template draft v 01" do
|
3149
|
-
before do
|
3150
|
-
@mapping = {
|
3151
|
-
"a" => "fred",
|
3152
|
-
"b" => "barney",
|
3153
|
-
"c" => "cheeseburger",
|
3154
|
-
"d" => "one two three",
|
3155
|
-
"e" => "20% tricky",
|
3156
|
-
"f" => "",
|
3157
|
-
"20" => "this-is-spinal-tap",
|
3158
|
-
"scheme" => "https",
|
3159
|
-
"p" => "quote=to+be+or+not+to+be",
|
3160
|
-
"q" => "hullo#world"
|
3161
|
-
}
|
3162
|
-
end
|
3163
|
-
|
3164
|
-
it "should result in 'http://example.org/page1#fred' " +
|
3165
|
-
"when used to expand 'http://example.org/page1\#{a}'" do
|
3166
|
-
Addressable::URI.expand_template(
|
3167
|
-
"http://example.org/page1\#{a}",
|
3168
|
-
@mapping
|
3169
|
-
).to_s.should == "http://example.org/page1#fred"
|
3170
|
-
end
|
3171
|
-
|
3172
|
-
it "should result in 'http://example.org/fred/barney/' " +
|
3173
|
-
"when used to expand 'http://example.org/{a}/{b}/'" do
|
3174
|
-
Addressable::URI.expand_template(
|
3175
|
-
"http://example.org/{a}/{b}/",
|
3176
|
-
@mapping
|
3177
|
-
).to_s.should == "http://example.org/fred/barney/"
|
3178
|
-
end
|
3179
|
-
|
3180
|
-
it "should result in 'http://example.org/fredbarney/' " +
|
3181
|
-
"when used to expand 'http://example.org/{a}{b}/'" do
|
3182
|
-
Addressable::URI.expand_template(
|
3183
|
-
"http://example.org/{a}{b}/",
|
3184
|
-
@mapping
|
3185
|
-
).to_s.should == "http://example.org/fredbarney/"
|
3186
|
-
end
|
3187
|
-
|
3188
|
-
it "should result in " +
|
3189
|
-
"'http://example.com/order/cheeseburger/cheeseburger/cheeseburger/' " +
|
3190
|
-
"when used to expand 'http://example.com/order/{c}/{c}/{c}/'" do
|
3191
|
-
Addressable::URI.expand_template(
|
3192
|
-
"http://example.com/order/{c}/{c}/{c}/",
|
3193
|
-
@mapping
|
3194
|
-
).to_s.should ==
|
3195
|
-
"http://example.com/order/cheeseburger/cheeseburger/cheeseburger/"
|
3196
|
-
end
|
3197
|
-
|
3198
|
-
it "should result in 'http://example.org/one%20two%20three' " +
|
3199
|
-
"when used to expand 'http://example.org/{d}'" do
|
3200
|
-
Addressable::URI.expand_template(
|
3201
|
-
"http://example.org/{d}",
|
3202
|
-
@mapping
|
3203
|
-
).to_s.should == "http://example.org/one%20two%20three"
|
3204
|
-
end
|
3205
|
-
|
3206
|
-
it "should result in 'http://example.org/20%25%20tricky' " +
|
3207
|
-
"when used to expand 'http://example.org/{e}'" do
|
3208
|
-
Addressable::URI.expand_template(
|
3209
|
-
"http://example.org/{e}",
|
3210
|
-
@mapping
|
3211
|
-
).to_s.should == "http://example.org/20%25%20tricky"
|
3212
|
-
end
|
3213
|
-
|
3214
|
-
it "should result in 'http://example.com//' " +
|
3215
|
-
"when used to expand 'http://example.com/{f}/'" do
|
3216
|
-
Addressable::URI.expand_template(
|
3217
|
-
"http://example.com/{f}/",
|
3218
|
-
@mapping
|
3219
|
-
).to_s.should == "http://example.com//"
|
3220
|
-
end
|
3221
|
-
|
3222
|
-
it "should result in " +
|
3223
|
-
"'https://this-is-spinal-tap.example.org?date=&option=fred' " +
|
3224
|
-
"when used to expand " +
|
3225
|
-
"'{scheme}://{20}.example.org?date={wilma}&option={a}'" do
|
3226
|
-
Addressable::URI.expand_template(
|
3227
|
-
"{scheme}://{20}.example.org?date={wilma}&option={a}",
|
3228
|
-
@mapping
|
3229
|
-
).to_s.should ==
|
3230
|
-
"https://this-is-spinal-tap.example.org?date=&option=fred"
|
3231
|
-
end
|
3232
|
-
|
3233
|
-
# The v 01 draft conflicts with the v 03 draft here.
|
3234
|
-
# The Addressable implementation uses v 03.
|
3235
|
-
it "should result in " +
|
3236
|
-
"'http://example.org?quote%3Dto%2Bbe%2Bor%2Bnot%2Bto%2Bbe' " +
|
3237
|
-
"when used to expand 'http://example.org?{p}'" do
|
3238
|
-
Addressable::URI.expand_template(
|
3239
|
-
"http://example.org?{p}",
|
3240
|
-
@mapping
|
3241
|
-
).to_s.should == "http://example.org?quote%3Dto%2Bbe%2Bor%2Bnot%2Bto%2Bbe"
|
3242
|
-
end
|
3243
|
-
|
3244
|
-
# The v 01 draft conflicts with the v 03 draft here.
|
3245
|
-
# The Addressable implementation uses v 03.
|
3246
|
-
it "should result in 'http://example.com/hullo%23world' " +
|
3247
|
-
"when used to expand 'http://example.com/{q}'" do
|
3248
|
-
Addressable::URI.expand_template(
|
3249
|
-
"http://example.com/{q}",
|
3250
|
-
@mapping
|
3251
|
-
).to_s.should == "http://example.com/hullo%23world"
|
3252
|
-
end
|
3253
|
-
end
|
3254
|
-
|
3255
|
-
# Section 4.5 of the URI Template draft v 03
|
3256
|
-
describe Addressable::URI, " when given the mapping supplied in " +
|
3257
|
-
"Section 4.5 of the URI Template draft v 03" do
|
3258
|
-
before do
|
3259
|
-
@mapping = {
|
3260
|
-
"foo" => "ϓ",
|
3261
|
-
"bar" => "fred",
|
3262
|
-
"baz" => "10,20,30",
|
3263
|
-
"qux" => ["10","20","30"],
|
3264
|
-
"corge" => [],
|
3265
|
-
"grault" => "",
|
3266
|
-
"garply" => "a/b/c",
|
3267
|
-
"waldo" => "ben & jerrys",
|
3268
|
-
"fred" => ["fred", "", "wilma"],
|
3269
|
-
"plugh" => ["ẛ", "ṡ"],
|
3270
|
-
"1-a_b.c" => "200"
|
3271
|
-
}
|
3272
|
-
end
|
3273
|
-
|
3274
|
-
it "should result in 'http://example.org/?q=fred' " +
|
3275
|
-
"when used to expand 'http://example.org/?q={bar}'" do
|
3276
|
-
Addressable::URI.expand_template(
|
3277
|
-
"http://example.org/?q={bar}",
|
3278
|
-
@mapping
|
3279
|
-
).to_s.should == "http://example.org/?q=fred"
|
3280
|
-
end
|
3281
|
-
|
3282
|
-
it "should result in '/' " +
|
3283
|
-
"when used to expand '/{xyzzy}'" do
|
3284
|
-
Addressable::URI.expand_template(
|
3285
|
-
"/{xyzzy}",
|
3286
|
-
@mapping
|
3287
|
-
).to_s.should == "/"
|
3288
|
-
end
|
3289
|
-
|
3290
|
-
it "should result in " +
|
3291
|
-
"'http://example.org/?foo=%CE%8E&bar=fred&baz=10%2C20%2C30' " +
|
3292
|
-
"when used to expand " +
|
3293
|
-
"'http://example.org/?{-join|&|foo,bar,xyzzy,baz}'" do
|
3294
|
-
Addressable::URI.expand_template(
|
3295
|
-
"http://example.org/?{-join|&|foo,bar,xyzzy,baz}",
|
3296
|
-
@mapping
|
3297
|
-
).to_s.should ==
|
3298
|
-
"http://example.org/?foo=%CE%8E&bar=fred&baz=10%2C20%2C30"
|
3299
|
-
end
|
3300
|
-
|
3301
|
-
it "should result in 'http://example.org/?d=10,20,30' " +
|
3302
|
-
"when used to expand 'http://example.org/?d={-list|,|qux}'" do
|
3303
|
-
Addressable::URI.expand_template(
|
3304
|
-
"http://example.org/?d={-list|,|qux}",
|
3305
|
-
@mapping
|
3306
|
-
).to_s.should == "http://example.org/?d=10,20,30"
|
3307
|
-
end
|
3308
|
-
|
3309
|
-
it "should result in 'http://example.org/?d=10&d=20&d=30' " +
|
3310
|
-
"when used to expand 'http://example.org/?d={-list|&d=|qux}'" do
|
3311
|
-
Addressable::URI.expand_template(
|
3312
|
-
"http://example.org/?d={-list|&d=|qux}",
|
3313
|
-
@mapping
|
3314
|
-
).to_s.should == "http://example.org/?d=10&d=20&d=30"
|
3315
|
-
end
|
3316
|
-
|
3317
|
-
it "should result in 'http://example.org/fredfred/a%2Fb%2Fc' " +
|
3318
|
-
"when used to expand 'http://example.org/{bar}{bar}/{garply}'" do
|
3319
|
-
Addressable::URI.expand_template(
|
3320
|
-
"http://example.org/{bar}{bar}/{garply}",
|
3321
|
-
@mapping
|
3322
|
-
).to_s.should == "http://example.org/fredfred/a%2Fb%2Fc"
|
3323
|
-
end
|
3324
|
-
|
3325
|
-
it "should result in 'http://example.org/fred/fred//wilma' " +
|
3326
|
-
"when used to expand 'http://example.org/{bar}{-prefix|/|fred}'" do
|
3327
|
-
Addressable::URI.expand_template(
|
3328
|
-
"http://example.org/{bar}{-prefix|/|fred}",
|
3329
|
-
@mapping
|
3330
|
-
).to_s.should == "http://example.org/fred/fred//wilma"
|
3331
|
-
end
|
3332
|
-
|
3333
|
-
it "should result in ':%E1%B9%A1:%E1%B9%A1:' " +
|
3334
|
-
"when used to expand '{-neg|:|corge}{-suffix|:|plugh}'" do
|
3335
|
-
Addressable::URI.expand_template(
|
3336
|
-
"{-neg|:|corge}{-suffix|:|plugh}",
|
3337
|
-
@mapping
|
3338
|
-
).to_s.should == ":%E1%B9%A1:%E1%B9%A1:"
|
3339
|
-
end
|
3340
|
-
|
3341
|
-
it "should result in '../ben%20%26%20jerrys/' " +
|
3342
|
-
"when used to expand '../{waldo}/'" do
|
3343
|
-
Addressable::URI.expand_template(
|
3344
|
-
"../{waldo}/",
|
3345
|
-
@mapping
|
3346
|
-
).to_s.should == "../ben%20%26%20jerrys/"
|
3347
|
-
end
|
3348
|
-
|
3349
|
-
it "should result in 'telnet:192.0.2.16:80' " +
|
3350
|
-
"when used to expand 'telnet:192.0.2.16{-opt|:80|grault}'" do
|
3351
|
-
Addressable::URI.expand_template(
|
3352
|
-
"telnet:192.0.2.16{-opt|:80|grault}",
|
3353
|
-
@mapping
|
3354
|
-
).to_s.should == "telnet:192.0.2.16:80"
|
3355
|
-
end
|
3356
|
-
|
3357
|
-
it "should result in ':200:' " +
|
3358
|
-
"when used to expand ':{1-a_b.c}:'" do
|
3359
|
-
Addressable::URI.expand_template(
|
3360
|
-
":{1-a_b.c}:",
|
3361
|
-
@mapping
|
3362
|
-
).to_s.should == ":200:"
|
3363
|
-
end
|
3364
|
-
end
|
3365
|
-
|
3366
|
-
describe Addressable::URI, "when given a mapping that contains a " +
|
3367
|
-
"template-var within a value" do
|
3368
|
-
before do
|
3369
|
-
@mapping = {
|
3370
|
-
"a" => "{b}",
|
3371
|
-
"b" => "barney",
|
3372
|
-
}
|
3373
|
-
end
|
3374
|
-
|
3375
|
-
it "should result in 'http://example.com/%7Bb%7D/barney/' " +
|
3376
|
-
"when used to expand 'http://example.com/{a}/{b}/'" do
|
3377
|
-
Addressable::URI.expand_template(
|
3378
|
-
"http://example.com/{a}/{b}/",
|
3379
|
-
@mapping).to_s.should == "http://example.com/%7Bb%7D/barney/"
|
3380
|
-
end
|
3381
|
-
|
3382
|
-
it "should result in 'http://example.com//%7Bb%7D/' " +
|
3383
|
-
"when used to expand 'http://example.com/{-opt|foo|foo}/{a}/'" do
|
3384
|
-
Addressable::URI.expand_template(
|
3385
|
-
"http://example.com/{-opt|foo|foo}/{a}/",
|
3386
|
-
@mapping).to_s.should == "http://example.com//%7Bb%7D/"
|
3387
|
-
end
|
3388
|
-
|
3389
|
-
it "should result in 'http://example.com//%7Bb%7D/' " +
|
3390
|
-
"when used to expand 'http://example.com/{-neg|foo|b}/{a}/'" do
|
3391
|
-
Addressable::URI.expand_template(
|
3392
|
-
"http://example.com/{-neg|foo|b}/{a}/",
|
3393
|
-
@mapping).to_s.should == "http://example.com//%7Bb%7D/"
|
3394
|
-
end
|
3395
|
-
|
3396
|
-
it "should result in 'http://example.com//barney/%7Bb%7D/' " +
|
3397
|
-
"when used to expand 'http://example.com/{-prefix|/|b}/{a}/'" do
|
3398
|
-
Addressable::URI.expand_template(
|
3399
|
-
"http://example.com/{-prefix|/|b}/{a}/",
|
3400
|
-
@mapping).to_s.should == "http://example.com//barney/%7Bb%7D/"
|
3401
|
-
end
|
3402
|
-
|
3403
|
-
it "should result in 'http://example.com/barney//%7Bb%7D/' " +
|
3404
|
-
"when used to expand 'http://example.com/{-suffix|/|b}/{a}/'" do
|
3405
|
-
Addressable::URI.expand_template(
|
3406
|
-
"http://example.com/{-suffix|/|b}/{a}/",
|
3407
|
-
@mapping).to_s.should == "http://example.com/barney//%7Bb%7D/"
|
3408
|
-
end
|
3409
|
-
|
3410
|
-
it "should result in 'http://example.com/%7Bb%7D/?b=barney&c=42' " +
|
3411
|
-
"when used to expand 'http://example.com/{a}/?{-join|&|b,c=42}'" do
|
3412
|
-
Addressable::URI.expand_template(
|
3413
|
-
"http://example.com/{a}/?{-join|&|b,c=42}",
|
3414
|
-
@mapping).to_s.should == "http://example.com/%7Bb%7D/?b=barney&c=42"
|
3415
|
-
end
|
3416
|
-
|
3417
|
-
it "should result in 'http://example.com/42/?b=barney' " +
|
3418
|
-
"when used to expand 'http://example.com/{c=42}/?{-join|&|b}'" do
|
3419
|
-
Addressable::URI.expand_template(
|
3420
|
-
"http://example.com/{c=42}/?{-join|&|b}",
|
3421
|
-
@mapping).to_s.should == "http://example.com/42/?b=barney"
|
3422
|
-
end
|
3423
|
-
end
|
3424
|
-
|
3425
|
-
describe Addressable::URI, "when given a single variable mapping" do
|
3426
|
-
before do
|
3427
|
-
@mapping = {
|
3428
|
-
"foo" => "fred"
|
3429
|
-
}
|
3430
|
-
end
|
3431
|
-
|
3432
|
-
it "should result in 'fred' when used to expand '{foo}'" do
|
3433
|
-
Addressable::URI.expand_template(
|
3434
|
-
"{foo}",
|
3435
|
-
@mapping
|
3436
|
-
).to_s.should == "fred"
|
3437
|
-
end
|
3438
|
-
|
3439
|
-
it "should result in 'wilma' when used to expand '{bar=wilma}'" do
|
3440
|
-
Addressable::URI.expand_template(
|
3441
|
-
"{bar=wilma}",
|
3442
|
-
@mapping
|
3443
|
-
).to_s.should == "wilma"
|
3444
|
-
end
|
3445
|
-
|
3446
|
-
it "should result in '' when used to expand '{baz}'" do
|
3447
|
-
Addressable::URI.expand_template(
|
3448
|
-
"{baz}",
|
3449
|
-
@mapping
|
3450
|
-
).to_s.should == ""
|
3451
|
-
end
|
3452
|
-
end
|
3453
|
-
|
3454
|
-
describe Addressable::URI, "when given a simple mapping" do
|
3455
|
-
before do
|
3456
|
-
@mapping = {
|
3457
|
-
"foo" => "fred",
|
3458
|
-
"bar" => "barney",
|
3459
|
-
"baz" => ""
|
3460
|
-
}
|
3461
|
-
end
|
3462
|
-
|
3463
|
-
it "should result in 'foo=fred&bar=barney&baz=' when used to expand " +
|
3464
|
-
"'{-join|&|foo,bar,baz,qux}'" do
|
3465
|
-
Addressable::URI.expand_template(
|
3466
|
-
"{-join|&|foo,bar,baz,qux}",
|
3467
|
-
@mapping
|
3468
|
-
).to_s.should == "foo=fred&bar=barney&baz="
|
3469
|
-
end
|
3470
|
-
|
3471
|
-
it "should result in 'bar=barney' when used to expand " +
|
3472
|
-
"'{-join|&|bar}'" do
|
3473
|
-
Addressable::URI.expand_template(
|
3474
|
-
"{-join|&|bar}",
|
3475
|
-
@mapping
|
3476
|
-
).to_s.should == "bar=barney"
|
3477
|
-
end
|
3478
|
-
|
3479
|
-
it "should result in '' when used to expand " +
|
3480
|
-
"'{-join|&|qux}'" do
|
3481
|
-
Addressable::URI.expand_template(
|
3482
|
-
"{-join|&|qux}",
|
3483
|
-
@mapping
|
3484
|
-
).to_s.should == ""
|
3485
|
-
end
|
3486
|
-
end
|
3487
|
-
|
3488
|
-
describe Addressable::URI, "when given a mapping containing values " +
|
3489
|
-
"that are already percent-encoded" do
|
3490
|
-
before do
|
3491
|
-
@mapping = {
|
3492
|
-
"a" => "%7Bb%7D"
|
3493
|
-
}
|
3494
|
-
end
|
3495
|
-
|
3496
|
-
it "should result in 'http://example.com/%257Bb%257D/' " +
|
3497
|
-
"when used to expand 'http://example.com/{a}/'" do
|
3498
|
-
Addressable::URI.expand_template(
|
3499
|
-
"http://example.com/{a}/",
|
3500
|
-
@mapping).to_s.should == "http://example.com/%257Bb%257D/"
|
3501
|
-
end
|
3502
|
-
end
|
3503
|
-
|
3504
|
-
describe Addressable::URI, "when given a mapping containing bogus values" do
|
3505
|
-
it "should raise a TypeError" do
|
3506
|
-
(lambda do
|
3507
|
-
Addressable::URI.expand_template(
|
3508
|
-
"http://example.com/{bogus}/", {
|
3509
|
-
"bogus" => 42
|
3510
|
-
}
|
3511
|
-
)
|
3512
|
-
end).should raise_error(TypeError)
|
3513
|
-
end
|
3514
|
-
end
|
3515
|
-
|
3516
|
-
describe Addressable::URI, "when given a pattern with bogus operators" do
|
3517
|
-
it "should raise an InvalidTemplateOperatorError" do
|
3518
|
-
(lambda do
|
3519
|
-
Addressable::URI.expand_template(
|
3520
|
-
"http://example.com/{-bogus|/|a,b,c}/", {
|
3521
|
-
"a" => "a", "b" => "b", "c" => "c"
|
3522
|
-
}
|
3523
|
-
)
|
3524
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3525
|
-
end
|
3526
|
-
|
3527
|
-
it "should raise an InvalidTemplateOperatorError" do
|
3528
|
-
(lambda do
|
3529
|
-
Addressable::URI.expand_template(
|
3530
|
-
"http://example.com/{-prefix|/|a,b,c}/", {
|
3531
|
-
"a" => "a", "b" => "b", "c" => "c"
|
3532
|
-
}
|
3533
|
-
)
|
3534
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3535
|
-
end
|
3536
|
-
|
3537
|
-
it "should raise an InvalidTemplateOperatorError" do
|
3538
|
-
(lambda do
|
3539
|
-
Addressable::URI.expand_template(
|
3540
|
-
"http://example.com/{-suffix|/|a,b,c}/", {
|
3541
|
-
"a" => "a", "b" => "b", "c" => "c"
|
3542
|
-
}
|
3543
|
-
)
|
3544
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3545
|
-
end
|
3546
|
-
|
3547
|
-
it "should raise an InvalidTemplateOperatorError" do
|
3548
|
-
(lambda do
|
3549
|
-
Addressable::URI.expand_template(
|
3550
|
-
"http://example.com/{-join|/|a,b,c}/", {
|
3551
|
-
"a" => ["a"], "b" => ["b"], "c" => "c"
|
3552
|
-
}
|
3553
|
-
)
|
3554
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3555
|
-
end
|
3556
|
-
|
3557
|
-
it "should raise an InvalidTemplateOperatorError" do
|
3558
|
-
(lambda do
|
3559
|
-
Addressable::URI.expand_template(
|
3560
|
-
"http://example.com/{-list|/|a,b,c}/", {
|
3561
|
-
"a" => ["a"], "b" => ["b"], "c" => "c"
|
3562
|
-
}
|
3563
|
-
)
|
3564
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3565
|
-
end
|
3566
|
-
end
|
3567
|
-
|
3568
|
-
describe Addressable::URI, "when given a mapping that contains an Array" do
|
3569
|
-
before do
|
3570
|
-
@mapping = {"query" => "an example search query".split(" ")}
|
3571
|
-
end
|
3572
|
-
|
3573
|
-
it "should result in 'http://example.com/search/an+example+search+query/'" +
|
3574
|
-
" when used to expand 'http://example.com/search/{-list|+|query}/'" do
|
3575
|
-
Addressable::URI.expand_template(
|
3576
|
-
"http://example.com/search/{-list|+|query}/",
|
3577
|
-
@mapping).to_s.should ==
|
3578
|
-
"http://example.com/search/an+example+search+query/"
|
3579
|
-
end
|
3580
|
-
|
3581
|
-
it "should result in 'http://example.com/search/an+example+search+query/'" +
|
3582
|
-
" when used to expand 'http://example.com/search/{-list|+|query}/'" +
|
3583
|
-
" with a NoOpProcessor" do
|
3584
|
-
Addressable::URI.expand_template(
|
3585
|
-
"http://example.com/search/{-list|+|query}/",
|
3586
|
-
@mapping, NoOpProcessor).to_s.should ==
|
3587
|
-
"http://example.com/search/an+example+search+query/"
|
3232
|
+
@uri.to_str.should == "http://example.com/"
|
3588
3233
|
end
|
3589
3234
|
end
|
3590
3235
|
|
@@ -3598,7 +3243,7 @@ class SuperString
|
|
3598
3243
|
end
|
3599
3244
|
end
|
3600
3245
|
|
3601
|
-
describe Addressable::URI, "
|
3246
|
+
describe Addressable::URI, "when parsing a non-String object" do
|
3602
3247
|
it "should correctly parse anything with a 'to_str' method" do
|
3603
3248
|
Addressable::URI.parse(SuperString.new(42))
|
3604
3249
|
end
|
@@ -3606,7 +3251,7 @@ describe Addressable::URI, " when parsing a non-String object" do
|
|
3606
3251
|
it "should raise a TypeError for objects than cannot be converted" do
|
3607
3252
|
(lambda do
|
3608
3253
|
Addressable::URI.parse(42)
|
3609
|
-
end).should raise_error(TypeError)
|
3254
|
+
end).should raise_error(TypeError, "Can't convert Fixnum into String.")
|
3610
3255
|
end
|
3611
3256
|
|
3612
3257
|
it "should correctly parse heuristically anything with a 'to_str' method" do
|
@@ -3616,7 +3261,7 @@ describe Addressable::URI, " when parsing a non-String object" do
|
|
3616
3261
|
it "should raise a TypeError for objects than cannot be converted" do
|
3617
3262
|
(lambda do
|
3618
3263
|
Addressable::URI.heuristic_parse(42)
|
3619
|
-
end).should raise_error(TypeError)
|
3264
|
+
end).should raise_error(TypeError, "Can't convert Fixnum into String.")
|
3620
3265
|
end
|
3621
3266
|
end
|
3622
3267
|
|
@@ -3698,514 +3343,50 @@ describe Addressable::URI, "when encoding a bogus object" do
|
|
3698
3343
|
end
|
3699
3344
|
end
|
3700
3345
|
|
3701
|
-
describe Addressable::URI, "
|
3702
|
-
"'/'" do
|
3703
|
-
before do
|
3704
|
-
@uri = Addressable::URI.parse("/")
|
3705
|
-
end
|
3706
|
-
|
3707
|
-
it "should have the correct mapping when extracting values " +
|
3708
|
-
"using the pattern '/'" do
|
3709
|
-
@uri.extract_mapping("/").should == {}
|
3710
|
-
end
|
3711
|
-
end
|
3712
|
-
|
3713
|
-
describe Addressable::URI, " when parsed from '/one/'" do
|
3714
|
-
before do
|
3715
|
-
@uri = Addressable::URI.parse("/one/")
|
3716
|
-
end
|
3717
|
-
|
3718
|
-
it "should not match the pattern '/two/'" do
|
3719
|
-
@uri.extract_mapping("/two/").should == nil
|
3720
|
-
end
|
3721
|
-
|
3722
|
-
it "should have the correct mapping when extracting values " +
|
3723
|
-
"using the pattern '/{number}/'" do
|
3724
|
-
@uri.extract_mapping("/{number}/").should == {"number" => "one"}
|
3725
|
-
end
|
3726
|
-
end
|
3727
|
-
|
3728
|
-
describe Addressable::URI, " when parsed from '/one/two/'" do
|
3729
|
-
before do
|
3730
|
-
@uri = Addressable::URI.parse("/one/two/")
|
3731
|
-
end
|
3732
|
-
|
3733
|
-
it "should not match the pattern '/{number}/' " +
|
3734
|
-
"with the SlashlessProcessor" do
|
3735
|
-
@uri.extract_mapping("/{number}/", SlashlessProcessor).should == nil
|
3736
|
-
end
|
3737
|
-
|
3738
|
-
it "should have the correct mapping when extracting values " +
|
3739
|
-
"using the pattern '/{number}/' without a processor" do
|
3740
|
-
@uri.extract_mapping("/{number}/").should == {
|
3741
|
-
"number" => "one/two"
|
3742
|
-
}
|
3743
|
-
end
|
3744
|
-
|
3745
|
-
it "should have the correct mapping when extracting values " +
|
3746
|
-
"using the pattern '/{first}/{second}/' with the SlashlessProcessor" do
|
3747
|
-
@uri.extract_mapping("/{first}/{second}/", SlashlessProcessor).should == {
|
3748
|
-
"first" => "one",
|
3749
|
-
"second" => "two"
|
3750
|
-
}
|
3751
|
-
end
|
3752
|
-
end
|
3753
|
-
|
3754
|
-
describe Addressable::URI, " when parsed from " +
|
3755
|
-
"'http://example.com/search/an+example+search+query/'" do
|
3756
|
-
before do
|
3757
|
-
@uri = Addressable::URI.parse(
|
3758
|
-
"http://example.com/search/an+example+search+query/")
|
3759
|
-
end
|
3760
|
-
|
3761
|
-
it "should have the correct mapping when extracting values using " +
|
3762
|
-
"the pattern 'http://example.com/search/{query}/' with the " +
|
3763
|
-
"ExampleProcessor" do
|
3764
|
-
@uri.extract_mapping(
|
3765
|
-
"http://example.com/search/{query}/", ExampleProcessor
|
3766
|
-
).should == {
|
3767
|
-
"query" => "an example search query"
|
3768
|
-
}
|
3769
|
-
end
|
3770
|
-
|
3771
|
-
it "should have the correct mapping when extracting values " +
|
3772
|
-
"using the pattern " +
|
3773
|
-
"'http://example.com/search/{-list|+|query}/'" do
|
3774
|
-
@uri.extract_mapping(
|
3775
|
-
"http://example.com/search/{-list|+|query}/"
|
3776
|
-
).should == {
|
3777
|
-
"query" => ["an", "example", "search", "query"]
|
3778
|
-
}
|
3779
|
-
end
|
3780
|
-
|
3781
|
-
it "should return nil when extracting values using " +
|
3782
|
-
"a non-matching pattern" do
|
3783
|
-
@uri.extract_mapping(
|
3784
|
-
"http://bogus.com/{thingy}/"
|
3785
|
-
).should == nil
|
3786
|
-
end
|
3787
|
-
end
|
3788
|
-
|
3789
|
-
describe Addressable::URI, " when parsed from " +
|
3790
|
-
"'http://example.com/a/b/c/'" do
|
3791
|
-
before do
|
3792
|
-
@uri = Addressable::URI.parse(
|
3793
|
-
"http://example.com/a/b/c/")
|
3794
|
-
end
|
3795
|
-
|
3796
|
-
it "should have the correct mapping when extracting values " +
|
3797
|
-
"using the pattern " +
|
3798
|
-
"'http://example.com/{first}/{second}/' with the ExampleProcessor" do
|
3799
|
-
@uri.extract_mapping(
|
3800
|
-
"http://example.com/{first}/{second}/", ExampleProcessor
|
3801
|
-
).should == {
|
3802
|
-
"first" => "a",
|
3803
|
-
"second" => "b/c"
|
3804
|
-
}
|
3805
|
-
end
|
3806
|
-
|
3807
|
-
it "should have the correct mapping when extracting values " +
|
3808
|
-
"using the pattern " +
|
3809
|
-
"'http://example.com/{first}/{-list|/|second}/'" do
|
3810
|
-
@uri.extract_mapping(
|
3811
|
-
"http://example.com/{first}/{-list|/|second}/"
|
3812
|
-
).should == {
|
3813
|
-
"first" => "a",
|
3814
|
-
"second" => ["b", "c"]
|
3815
|
-
}
|
3816
|
-
end
|
3817
|
-
|
3818
|
-
it "should have the correct mapping when extracting values " +
|
3819
|
-
"using the pattern " +
|
3820
|
-
"'http://example.com/{first}/{-list|/|rot13}/' " +
|
3821
|
-
"with the ExampleProcessor" do
|
3822
|
-
@uri.extract_mapping(
|
3823
|
-
"http://example.com/{first}/{-list|/|rot13}/",
|
3824
|
-
ExampleProcessor
|
3825
|
-
).should == {
|
3826
|
-
"first" => "a",
|
3827
|
-
"rot13" => ["o", "p"]
|
3828
|
-
}
|
3829
|
-
end
|
3830
|
-
|
3831
|
-
it "should have the correct mapping when extracting values " +
|
3832
|
-
"using the pattern " +
|
3833
|
-
"'http://example.com/{-list|/|rot13}/' " +
|
3834
|
-
"with the ExampleProcessor" do
|
3835
|
-
@uri.extract_mapping(
|
3836
|
-
"http://example.com/{-list|/|rot13}/",
|
3837
|
-
ExampleProcessor
|
3838
|
-
).should == {
|
3839
|
-
"rot13" => ["n", "o", "p"]
|
3840
|
-
}
|
3841
|
-
end
|
3842
|
-
|
3843
|
-
it "should not map to anything when extracting values " +
|
3844
|
-
"using the pattern " +
|
3845
|
-
"'http://example.com/{-list|/|rot13}/'" do
|
3846
|
-
@uri.extract_mapping("http://example.com/{-join|/|a,b,c}/").should == nil
|
3847
|
-
end
|
3848
|
-
end
|
3849
|
-
|
3850
|
-
describe Addressable::URI, " when parsed from " +
|
3851
|
-
"'http://example.com/?a=one&b=two&c=three'" do
|
3852
|
-
before do
|
3853
|
-
@uri = Addressable::URI.parse("http://example.com/?a=one&b=two&c=three")
|
3854
|
-
end
|
3855
|
-
|
3856
|
-
it "should have the correct mapping when extracting values " +
|
3857
|
-
"using the pattern " +
|
3858
|
-
"'http://example.com/?{-join|&|a,b,c}'" do
|
3859
|
-
@uri.extract_mapping(
|
3860
|
-
"http://example.com/?{-join|&|a,b,c}"
|
3861
|
-
).should == {
|
3862
|
-
"a" => "one",
|
3863
|
-
"b" => "two",
|
3864
|
-
"c" => "three"
|
3865
|
-
}
|
3866
|
-
end
|
3867
|
-
end
|
3868
|
-
|
3869
|
-
describe Addressable::URI, " when parsed from " +
|
3870
|
-
"'http://example.com/?rot13=frperg'" do
|
3871
|
-
before do
|
3872
|
-
@uri = Addressable::URI.parse("http://example.com/?rot13=frperg")
|
3873
|
-
end
|
3874
|
-
|
3875
|
-
it "should have the correct mapping when extracting values " +
|
3876
|
-
"using the pattern " +
|
3877
|
-
"'http://example.com/?{-join|&|rot13}' with the ExampleProcessor" do
|
3878
|
-
@uri.extract_mapping(
|
3879
|
-
"http://example.com/?{-join|&|rot13}",
|
3880
|
-
ExampleProcessor
|
3881
|
-
).should == {
|
3882
|
-
"rot13" => "secret"
|
3883
|
-
}
|
3884
|
-
end
|
3885
|
-
end
|
3886
|
-
|
3887
|
-
describe Addressable::URI, " when parsed from " +
|
3888
|
-
"'http://example.com/one/spacer/two/'" do
|
3889
|
-
before do
|
3890
|
-
@uri = Addressable::URI.parse("http://example.com/one/spacer/two/")
|
3891
|
-
end
|
3892
|
-
|
3893
|
-
it "should have the correct mapping when extracting values " +
|
3894
|
-
"using the pattern " +
|
3895
|
-
"'http://example.com/{first}/spacer/{second}/'" do
|
3896
|
-
@uri.extract_mapping(
|
3897
|
-
"http://example.com/{first}/spacer/{second}/"
|
3898
|
-
).should == {
|
3899
|
-
"first" => "one",
|
3900
|
-
"second" => "two"
|
3901
|
-
}
|
3902
|
-
end
|
3903
|
-
|
3904
|
-
it "should have the correct mapping when extracting values " +
|
3905
|
-
"using the pattern " +
|
3906
|
-
"'http://example.com{-prefix|/|stuff}/'" do
|
3907
|
-
@uri.extract_mapping(
|
3908
|
-
"http://example.com{-prefix|/|stuff}/"
|
3909
|
-
).should == {
|
3910
|
-
"stuff" => ["one", "spacer", "two"]
|
3911
|
-
}
|
3912
|
-
end
|
3913
|
-
|
3914
|
-
it "should have the correct mapping when extracting values " +
|
3915
|
-
"using the pattern " +
|
3916
|
-
"'http://example.com/o{-prefix|/|stuff}/'" do
|
3917
|
-
@uri.extract_mapping(
|
3918
|
-
"http://example.com/o{-prefix|/|stuff}/"
|
3919
|
-
).should == nil
|
3920
|
-
end
|
3921
|
-
|
3922
|
-
it "should have the correct mapping when extracting values " +
|
3923
|
-
"using the pattern " +
|
3924
|
-
"'http://example.com/{first}/spacer{-prefix|/|stuff}/'" do
|
3925
|
-
@uri.extract_mapping(
|
3926
|
-
"http://example.com/{first}/spacer{-prefix|/|stuff}/"
|
3927
|
-
).should == {
|
3928
|
-
"first" => "one",
|
3929
|
-
"stuff" => ["two"]
|
3930
|
-
}
|
3931
|
-
end
|
3932
|
-
|
3933
|
-
it "should not match anything when extracting values " +
|
3934
|
-
"using the incorrect suffix pattern " +
|
3935
|
-
"'http://example.com/{-prefix|/|stuff}/'" do
|
3936
|
-
@uri.extract_mapping(
|
3937
|
-
"http://example.com/{-prefix|/|stuff}/"
|
3938
|
-
).should == nil
|
3939
|
-
end
|
3940
|
-
|
3941
|
-
it "should have the correct mapping when extracting values " +
|
3942
|
-
"using the pattern " +
|
3943
|
-
"'http://example.com{-prefix|/|rot13}/' with the ExampleProcessor" do
|
3944
|
-
@uri.extract_mapping(
|
3945
|
-
"http://example.com{-prefix|/|rot13}/",
|
3946
|
-
ExampleProcessor
|
3947
|
-
).should == {
|
3948
|
-
"rot13" => ["bar", "fcnpre", "gjb"]
|
3949
|
-
}
|
3950
|
-
end
|
3951
|
-
|
3952
|
-
it "should have the correct mapping when extracting values " +
|
3953
|
-
"using the pattern " +
|
3954
|
-
"'http://example.com{-prefix|/|rot13}' with the ExampleProcessor" do
|
3955
|
-
@uri.extract_mapping(
|
3956
|
-
"http://example.com{-prefix|/|rot13}",
|
3957
|
-
ExampleProcessor
|
3958
|
-
).should == {
|
3959
|
-
"rot13" => ["bar", "fcnpre", "gjb", ""]
|
3960
|
-
}
|
3961
|
-
end
|
3962
|
-
|
3963
|
-
it "should not match anything when extracting values " +
|
3964
|
-
"using the incorrect suffix pattern " +
|
3965
|
-
"'http://example.com/{-prefix|/|rot13}' with the ExampleProcessor" do
|
3966
|
-
@uri.extract_mapping(
|
3967
|
-
"http://example.com/{-prefix|/|rot13}",
|
3968
|
-
ExampleProcessor
|
3969
|
-
).should == nil
|
3970
|
-
end
|
3971
|
-
|
3972
|
-
it "should have the correct mapping when extracting values " +
|
3973
|
-
"using the pattern " +
|
3974
|
-
"'http://example.com/{-suffix|/|stuff}'" do
|
3975
|
-
@uri.extract_mapping(
|
3976
|
-
"http://example.com/{-suffix|/|stuff}"
|
3977
|
-
).should == {
|
3978
|
-
"stuff" => ["one", "spacer", "two"]
|
3979
|
-
}
|
3980
|
-
end
|
3981
|
-
|
3982
|
-
it "should have the correct mapping when extracting values " +
|
3983
|
-
"using the pattern " +
|
3984
|
-
"'http://example.com/{-suffix|/|stuff}o'" do
|
3985
|
-
@uri.extract_mapping(
|
3986
|
-
"http://example.com/{-suffix|/|stuff}o"
|
3987
|
-
).should == nil
|
3988
|
-
end
|
3989
|
-
|
3990
|
-
it "should have the correct mapping when extracting values " +
|
3991
|
-
"using the pattern " +
|
3992
|
-
"'http://example.com/o{-suffix|/|stuff}'" do
|
3993
|
-
@uri.extract_mapping(
|
3994
|
-
"http://example.com/o{-suffix|/|stuff}"
|
3995
|
-
).should == {"stuff"=>["ne", "spacer", "two"]}
|
3996
|
-
end
|
3997
|
-
|
3998
|
-
it "should have the correct mapping when extracting values " +
|
3999
|
-
"using the pattern " +
|
4000
|
-
"'http://example.com/{first}/spacer/{-suffix|/|stuff}'" do
|
4001
|
-
@uri.extract_mapping(
|
4002
|
-
"http://example.com/{first}/spacer/{-suffix|/|stuff}"
|
4003
|
-
).should == {
|
4004
|
-
"first" => "one",
|
4005
|
-
"stuff" => ["two"]
|
4006
|
-
}
|
4007
|
-
end
|
4008
|
-
|
4009
|
-
it "should not match anything when extracting values " +
|
4010
|
-
"using the incorrect suffix pattern " +
|
4011
|
-
"'http://example.com/{-suffix|/|stuff}/'" do
|
4012
|
-
@uri.extract_mapping(
|
4013
|
-
"http://example.com/{-suffix|/|stuff}/"
|
4014
|
-
).should == nil
|
4015
|
-
end
|
4016
|
-
|
4017
|
-
it "should have the correct mapping when extracting values " +
|
4018
|
-
"using the pattern " +
|
4019
|
-
"'http://example.com/{-suffix|/|rot13}' with the ExampleProcessor" do
|
4020
|
-
@uri.extract_mapping(
|
4021
|
-
"http://example.com/{-suffix|/|rot13}",
|
4022
|
-
ExampleProcessor
|
4023
|
-
).should == {
|
4024
|
-
"rot13" => ["bar", "fcnpre", "gjb"]
|
4025
|
-
}
|
4026
|
-
end
|
4027
|
-
|
4028
|
-
it "should have the correct mapping when extracting values " +
|
4029
|
-
"using the pattern " +
|
4030
|
-
"'http://example.com{-suffix|/|rot13}' with the ExampleProcessor" do
|
4031
|
-
@uri.extract_mapping(
|
4032
|
-
"http://example.com{-suffix|/|rot13}",
|
4033
|
-
ExampleProcessor
|
4034
|
-
).should == {
|
4035
|
-
"rot13" => ["", "bar", "fcnpre", "gjb"]
|
4036
|
-
}
|
4037
|
-
end
|
4038
|
-
|
4039
|
-
it "should not match anything when extracting values " +
|
4040
|
-
"using the incorrect suffix pattern " +
|
4041
|
-
"'http://example.com/{-suffix|/|rot13}/' with the ExampleProcessor" do
|
4042
|
-
@uri.extract_mapping(
|
4043
|
-
"http://example.com/{-suffix|/|rot13}/",
|
4044
|
-
ExampleProcessor
|
4045
|
-
).should == nil
|
4046
|
-
end
|
4047
|
-
end
|
4048
|
-
|
4049
|
-
describe Addressable::URI, " when parsed from " +
|
4050
|
-
"'http://example.com/?email=bob@sporkmonger.com'" do
|
3346
|
+
describe Addressable::URI, "when given the input " +
|
3347
|
+
"'http://example.com/'" do
|
4051
3348
|
before do
|
4052
|
-
@
|
4053
|
-
"http://example.com/?email=bob@sporkmonger.com"
|
4054
|
-
)
|
4055
|
-
end
|
4056
|
-
|
4057
|
-
it "should not match anything when extracting values " +
|
4058
|
-
"using the incorrect opt pattern " +
|
4059
|
-
"'http://example.com/?email={-opt|bogus@bogus.com|test}'" do
|
4060
|
-
@uri.extract_mapping(
|
4061
|
-
"http://example.com/?email={-opt|bogus@bogus.com|test}"
|
4062
|
-
).should == nil
|
4063
|
-
end
|
4064
|
-
|
4065
|
-
it "should not match anything when extracting values " +
|
4066
|
-
"using the incorrect neg pattern " +
|
4067
|
-
"'http://example.com/?email={-neg|bogus@bogus.com|test}'" do
|
4068
|
-
@uri.extract_mapping(
|
4069
|
-
"http://example.com/?email={-neg|bogus@bogus.com|test}"
|
4070
|
-
).should == nil
|
4071
|
-
end
|
4072
|
-
|
4073
|
-
it "should indicate a match when extracting values " +
|
4074
|
-
"using the opt pattern " +
|
4075
|
-
"'http://example.com/?email={-opt|bob@sporkmonger.com|test}'" do
|
4076
|
-
@uri.extract_mapping(
|
4077
|
-
"http://example.com/?email={-opt|bob@sporkmonger.com|test}"
|
4078
|
-
).should == {}
|
3349
|
+
@input = "http://example.com/"
|
4079
3350
|
end
|
4080
3351
|
|
4081
|
-
it "should
|
4082
|
-
|
4083
|
-
|
4084
|
-
@uri.extract_mapping(
|
4085
|
-
"http://example.com/?email={-neg|bob@sporkmonger.com|test}"
|
4086
|
-
).should == {}
|
3352
|
+
it "should heuristically parse to 'http://example.com/'" do
|
3353
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
3354
|
+
@uri.to_s.should == "http://example.com/"
|
4087
3355
|
end
|
4088
3356
|
end
|
4089
3357
|
|
4090
|
-
describe Addressable::URI, " when parsed from " +
|
4091
|
-
"'http://example.com/?email='" do
|
4092
|
-
before do
|
4093
|
-
@uri = Addressable::URI.parse(
|
4094
|
-
"http://example.com/?email="
|
4095
|
-
)
|
4096
|
-
end
|
4097
|
-
|
4098
|
-
it "should indicate a match when extracting values " +
|
4099
|
-
"using the opt pattern " +
|
4100
|
-
"'http://example.com/?email={-opt|bob@sporkmonger.com|test}'" do
|
4101
|
-
@uri.extract_mapping(
|
4102
|
-
"http://example.com/?email={-opt|bob@sporkmonger.com|test}"
|
4103
|
-
).should == {}
|
4104
|
-
end
|
4105
|
-
|
4106
|
-
it "should indicate a match when extracting values " +
|
4107
|
-
"using the neg pattern " +
|
4108
|
-
"'http://example.com/?email={-neg|bob@sporkmonger.com|test}'" do
|
4109
|
-
@uri.extract_mapping(
|
4110
|
-
"http://example.com/?email={-neg|bob@sporkmonger.com|test}"
|
4111
|
-
).should == {}
|
4112
|
-
end
|
4113
|
-
end
|
4114
3358
|
|
4115
|
-
describe Addressable::URI, "
|
4116
|
-
"'http
|
3359
|
+
describe Addressable::URI, "when given the input " +
|
3360
|
+
"'http:example.com/'" do
|
4117
3361
|
before do
|
4118
|
-
@
|
4119
|
-
"http://example.com/a/b/c/?one=1&two=2#foo"
|
4120
|
-
)
|
3362
|
+
@input = "http:example.com/"
|
4121
3363
|
end
|
4122
3364
|
|
4123
|
-
it "should
|
4124
|
-
|
4125
|
-
|
4126
|
-
@uri.extract_mapping(
|
4127
|
-
"http://{host}/{-suffix|/|segments}?{-join|&|one,two}\#{fragment}"
|
4128
|
-
).should == {
|
4129
|
-
"host" => "example.com",
|
4130
|
-
"segments" => ["a", "b", "c"],
|
4131
|
-
"one" => "1",
|
4132
|
-
"two" => "2",
|
4133
|
-
"fragment" => "foo"
|
4134
|
-
}
|
3365
|
+
it "should heuristically parse to 'http://example.com/'" do
|
3366
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
3367
|
+
@uri.to_s.should == "http://example.com/"
|
4135
3368
|
end
|
4136
3369
|
|
4137
|
-
it "should
|
4138
|
-
"
|
4139
|
-
|
4140
|
-
@uri.
|
4141
|
-
"http://{host}/{-suffix|/|segments}?{-join|&|one}\#{fragment}"
|
4142
|
-
).should == nil
|
4143
|
-
end
|
4144
|
-
|
4145
|
-
it "should not match when extracting values " +
|
4146
|
-
"using the pattern " +
|
4147
|
-
"'http://{host}/{-suffix|/|segments}?{-join|&|bogus}\#{fragment}'" do
|
4148
|
-
@uri.extract_mapping(
|
4149
|
-
"http://{host}/{-suffix|/|segments}?{-join|&|bogus}\#{fragment}"
|
4150
|
-
).should == nil
|
4151
|
-
end
|
4152
|
-
|
4153
|
-
it "should not match when extracting values " +
|
4154
|
-
"using the pattern " +
|
4155
|
-
"'http://{host}/{-suffix|/|segments}?" +
|
4156
|
-
"{-join|&|one,bogus}\#{fragment}'" do
|
4157
|
-
@uri.extract_mapping(
|
4158
|
-
"http://{host}/{-suffix|/|segments}?{-join|&|one,bogus}\#{fragment}"
|
4159
|
-
).should == nil
|
4160
|
-
end
|
4161
|
-
|
4162
|
-
it "should not match when extracting values " +
|
4163
|
-
"using the pattern " +
|
4164
|
-
"'http://{host}/{-suffix|/|segments}?" +
|
4165
|
-
"{-join|&|one,two,bogus}\#{fragment}'" do
|
4166
|
-
@uri.extract_mapping(
|
4167
|
-
"http://{host}/{-suffix|/|segments}?{-join|&|one,two,bogus}\#{fragment}"
|
4168
|
-
).should == {
|
4169
|
-
"host" => "example.com",
|
4170
|
-
"segments" => ["a", "b", "c"],
|
4171
|
-
"one" => "1",
|
4172
|
-
"two" => "2",
|
4173
|
-
"fragment" => "foo"
|
4174
|
-
}
|
3370
|
+
it "should heuristically parse to 'http://example.com/' " +
|
3371
|
+
"even with a scheme hint of 'ftp'" do
|
3372
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
3373
|
+
@uri.to_s.should == "http://example.com/"
|
4175
3374
|
end
|
4176
3375
|
end
|
4177
3376
|
|
4178
|
-
describe Addressable::URI, "when given
|
3377
|
+
describe Addressable::URI, "when given the input " +
|
3378
|
+
"'http://example.com/example.com/'" do
|
4179
3379
|
before do
|
4180
|
-
@
|
3380
|
+
@input = "http://example.com/example.com/"
|
4181
3381
|
end
|
4182
3382
|
|
4183
|
-
it "should
|
4184
|
-
(
|
4185
|
-
|
4186
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
4187
|
-
end
|
4188
|
-
|
4189
|
-
it "should raise an InvalidTemplateOperatorError" do
|
4190
|
-
(lambda do
|
4191
|
-
@uri.extract_mapping("http://example.com/{-prefix|/|a,b,c}/")
|
4192
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
4193
|
-
end
|
4194
|
-
|
4195
|
-
it "should raise an InvalidTemplateOperatorError" do
|
4196
|
-
(lambda do
|
4197
|
-
@uri.extract_mapping("http://example.com/{-suffix|/|a,b,c}/")
|
4198
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
4199
|
-
end
|
4200
|
-
|
4201
|
-
it "should raise an InvalidTemplateOperatorError" do
|
4202
|
-
(lambda do
|
4203
|
-
@uri.extract_mapping("http://example.com/{-list|/|a,b,c}/")
|
4204
|
-
end).should raise_error(Addressable::URI::InvalidTemplateOperatorError)
|
3383
|
+
it "should heuristically parse to 'http://example.com/example.com/'" do
|
3384
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
3385
|
+
@uri.to_s.should == "http://example.com/example.com/"
|
4205
3386
|
end
|
4206
3387
|
end
|
4207
3388
|
|
4208
|
-
describe Addressable::URI, "
|
3389
|
+
describe Addressable::URI, "when given the input " +
|
4209
3390
|
"'/path/to/resource'" do
|
4210
3391
|
before do
|
4211
3392
|
@input = "/path/to/resource"
|
@@ -4217,7 +3398,7 @@ describe Addressable::URI, " when given the input " +
|
|
4217
3398
|
end
|
4218
3399
|
end
|
4219
3400
|
|
4220
|
-
describe Addressable::URI, "
|
3401
|
+
describe Addressable::URI, "when given the input " +
|
4221
3402
|
"'relative/path/to/resource'" do
|
4222
3403
|
before do
|
4223
3404
|
@input = "relative/path/to/resource"
|
@@ -4229,7 +3410,7 @@ describe Addressable::URI, " when given the input " +
|
|
4229
3410
|
end
|
4230
3411
|
end
|
4231
3412
|
|
4232
|
-
describe Addressable::URI, "
|
3413
|
+
describe Addressable::URI, "when given the input " +
|
4233
3414
|
"'example.com'" do
|
4234
3415
|
before do
|
4235
3416
|
@input = "example.com"
|
@@ -4241,7 +3422,7 @@ describe Addressable::URI, " when given the input " +
|
|
4241
3422
|
end
|
4242
3423
|
end
|
4243
3424
|
|
4244
|
-
describe Addressable::URI, "
|
3425
|
+
describe Addressable::URI, "when given the input " +
|
4245
3426
|
"'example.com' and a scheme hint of 'ftp'" do
|
4246
3427
|
before do
|
4247
3428
|
@input = "example.com"
|
@@ -4254,7 +3435,7 @@ describe Addressable::URI, " when given the input " +
|
|
4254
3435
|
end
|
4255
3436
|
end
|
4256
3437
|
|
4257
|
-
describe Addressable::URI, "
|
3438
|
+
describe Addressable::URI, "when given the input " +
|
4258
3439
|
"'example.com:21' and a scheme hint of 'ftp'" do
|
4259
3440
|
before do
|
4260
3441
|
@input = "example.com:21"
|
@@ -4267,7 +3448,7 @@ describe Addressable::URI, " when given the input " +
|
|
4267
3448
|
end
|
4268
3449
|
end
|
4269
3450
|
|
4270
|
-
describe Addressable::URI, "
|
3451
|
+
describe Addressable::URI, "when given the input " +
|
4271
3452
|
"'example.com/path/to/resource'" do
|
4272
3453
|
before do
|
4273
3454
|
@input = "example.com/path/to/resource"
|
@@ -4279,7 +3460,7 @@ describe Addressable::URI, " when given the input " +
|
|
4279
3460
|
end
|
4280
3461
|
end
|
4281
3462
|
|
4282
|
-
describe Addressable::URI, "
|
3463
|
+
describe Addressable::URI, "when given the input " +
|
4283
3464
|
"'http:///example.com'" do
|
4284
3465
|
before do
|
4285
3466
|
@input = "http:///example.com"
|
@@ -4291,7 +3472,7 @@ describe Addressable::URI, " when given the input " +
|
|
4291
3472
|
end
|
4292
3473
|
end
|
4293
3474
|
|
4294
|
-
describe Addressable::URI, "
|
3475
|
+
describe Addressable::URI, "when given the input " +
|
4295
3476
|
"'feed:///example.com'" do
|
4296
3477
|
before do
|
4297
3478
|
@input = "feed:///example.com"
|
@@ -4303,7 +3484,7 @@ describe Addressable::URI, " when given the input " +
|
|
4303
3484
|
end
|
4304
3485
|
end
|
4305
3486
|
|
4306
|
-
describe Addressable::URI, "
|
3487
|
+
describe Addressable::URI, "when given the input " +
|
4307
3488
|
"'file://path/to/resource/'" do
|
4308
3489
|
before do
|
4309
3490
|
@input = "file://path/to/resource/"
|
@@ -4315,7 +3496,7 @@ describe Addressable::URI, " when given the input " +
|
|
4315
3496
|
end
|
4316
3497
|
end
|
4317
3498
|
|
4318
|
-
describe Addressable::URI, "
|
3499
|
+
describe Addressable::URI, "when given the input " +
|
4319
3500
|
"'feed://http://example.com'" do
|
4320
3501
|
before do
|
4321
3502
|
@input = "feed://http://example.com"
|
@@ -4326,3 +3507,46 @@ describe Addressable::URI, " when given the input " +
|
|
4326
3507
|
@uri.to_s.should == "feed:http://example.com"
|
4327
3508
|
end
|
4328
3509
|
end
|
3510
|
+
|
3511
|
+
describe Addressable::URI, "when assigning query values" do
|
3512
|
+
before do
|
3513
|
+
@uri = Addressable::URI.new
|
3514
|
+
end
|
3515
|
+
|
3516
|
+
it "should correctly assign {:a => 'a', :b => ['c', 'd', 'e']}" do
|
3517
|
+
@uri.query_values = {:a => "a", :b => ["c", "d", "e"]}
|
3518
|
+
@uri.query.should == "a=a&b[0]=c&b[1]=d&b[2]=e"
|
3519
|
+
end
|
3520
|
+
|
3521
|
+
it "should correctly assign " +
|
3522
|
+
"{:a => 'a', :b => [{:c => 'c', :d => 'd'}, {:e => 'e', :f => 'f'}]}" do
|
3523
|
+
@uri.query_values = {
|
3524
|
+
:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]
|
3525
|
+
}
|
3526
|
+
@uri.query.should == "a=a&b[0][c]=c&b[0][d]=d&b[1][e]=e&b[1][f]=f"
|
3527
|
+
end
|
3528
|
+
|
3529
|
+
it "should correctly assign " +
|
3530
|
+
"{:a => 'a', :b => [{:c => true, :d => 'd'}, {:e => 'e', :f => 'f'}]}" do
|
3531
|
+
@uri.query_values = {
|
3532
|
+
:a => 'a', :b => [{:c => true, :d => 'd'}, {:e => 'e', :f => 'f'}]
|
3533
|
+
}
|
3534
|
+
@uri.query.should == "a=a&b[0][c]&b[0][d]=d&b[1][e]=e&b[1][f]=f"
|
3535
|
+
end
|
3536
|
+
|
3537
|
+
it "should correctly assign " +
|
3538
|
+
"{:a => 'a', :b => {:c => true, :d => 'd'}}" do
|
3539
|
+
@uri.query_values = {
|
3540
|
+
:a => 'a', :b => {:c => true, :d => 'd'}
|
3541
|
+
}
|
3542
|
+
@uri.query.should == "a=a&b[c]&b[d]=d"
|
3543
|
+
end
|
3544
|
+
|
3545
|
+
it "should correctly assign " +
|
3546
|
+
"{:a => 'a', :b => {:c => true, :d => 'd'}, :e => []}" do
|
3547
|
+
@uri.query_values = {
|
3548
|
+
:a => 'a', :b => {:c => true, :d => 'd'}
|
3549
|
+
}
|
3550
|
+
@uri.query.should == "a=a&b[c]&b[d]=d"
|
3551
|
+
end
|
3552
|
+
end
|