addressable 1.0.2 → 1.0.3

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.
@@ -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 Thu Dec 13 13:10:46 -0500 2007 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
151
+ <p>Generated on Sat May 03 13:27:44 -0400 2008 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,117 @@ 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>1270</tt>
162
+ <td class='lines_total'><tt>2316</tt>
163
163
  </td>
164
- <td class='lines_code'><tt>889</tt>
164
+ <td class='lines_code'><tt>1540</tt>
165
+ </td>
166
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>58.8%</tt>
167
+ &nbsp;</td>
168
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='59'/>
169
+ <td class='uncovered' width='41'/>
170
+ </tr>
171
+ </table>
172
+ </td>
173
+ </tr>
174
+ </table>
175
+ </td>
176
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>62.0%</tt>
177
+ &nbsp;</td>
178
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='62'/>
179
+ <td class='uncovered' width='38'/>
180
+ </tr>
181
+ </table>
182
+ </td>
183
+ </tr>
184
+ </table>
185
+ </td>
186
+ </tr>
187
+ <tr class='dark'><td><a href='-Library-Ruby-Gems-1_8-gems-rcov-0_8_1_2_0-lib-rcov_rb.html'>/Library/Ruby/Gems/1.8/gems/rcov-0.8.1.2.0/lib/rcov.rb</a>
188
+ </td>
189
+ <td class='lines_total'><tt>988</tt>
190
+ </td>
191
+ <td class='lines_code'><tt>602</tt>
192
+ </td>
193
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>3.3%</tt>
194
+ &nbsp;</td>
195
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='3'/>
196
+ <td class='uncovered' width='97'/>
197
+ </tr>
198
+ </table>
199
+ </td>
200
+ </tr>
201
+ </table>
202
+ </td>
203
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>2.8%</tt>
204
+ &nbsp;</td>
205
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='3'/>
206
+ <td class='uncovered' width='97'/>
207
+ </tr>
208
+ </table>
209
+ </td>
210
+ </tr>
211
+ </table>
212
+ </td>
213
+ </tr>
214
+ <tr class='light'><td><a href='-Library-Ruby-Gems-1_8-gems-rspec-1_1_3-bin-spec.html'>/Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec</a>
215
+ </td>
216
+ <td class='lines_total'><tt>4</tt>
217
+ </td>
218
+ <td class='lines_code'><tt>3</tt>
219
+ </td>
220
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
221
+ &nbsp;</td>
222
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
223
+ <td class='uncovered' width='0'/>
224
+ </tr>
225
+ </table>
226
+ </td>
227
+ </tr>
228
+ </table>
229
+ </td>
230
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
231
+ &nbsp;</td>
232
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
233
+ <td class='uncovered' width='0'/>
234
+ </tr>
235
+ </table>
236
+ </td>
237
+ </tr>
238
+ </table>
239
+ </td>
240
+ </tr>
241
+ <tr class='dark'><td><a href='-Library-Ruby-Gems-1_8-gems-rspec-1_1_3-lib-spec_rb.html'>/Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec.rb</a>
242
+ </td>
243
+ <td class='lines_total'><tt>30</tt>
244
+ </td>
245
+ <td class='lines_code'><tt>26</tt>
246
+ </td>
247
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
248
+ &nbsp;</td>
249
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
250
+ <td class='uncovered' width='0'/>
251
+ </tr>
252
+ </table>
253
+ </td>
254
+ </tr>
255
+ </table>
256
+ </td>
257
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
258
+ &nbsp;</td>
259
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
260
+ <td class='uncovered' width='0'/>
261
+ </tr>
262
+ </table>
263
+ </td>
264
+ </tr>
265
+ </table>
266
+ </td>
267
+ </tr>
268
+ <tr class='light'><td><a href='-Library-Ruby-Gems-1_8-gems-rspec-1_1_3-plugins-mock_frameworks-rspec_rb.html'>/Library/Ruby/Gems/1.8/gems/rspec-1.1.3/plugins/mock_frameworks/rspec.rb</a>
269
+ </td>
270
+ <td class='lines_total'><tt>18</tt>
271
+ </td>
272
+ <td class='lines_code'><tt>17</tt>
165
273
  </td>
166
274
  <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
167
275
  &nbsp;</td>
@@ -186,9 +294,9 @@ table.report tr.dark {
186
294
  </tr>
187
295
  <tr class='dark'><td><a href='lib-addressable-uri_rb.html'>lib/addressable/uri.rb</a>
188
296
  </td>
189
- <td class='lines_total'><tt>1238</tt>
297
+ <td class='lines_total'><tt>1244</tt>
190
298
  </td>
191
- <td class='lines_code'><tt>881</tt>
299
+ <td class='lines_code'><tt>884</tt>
192
300
  </td>
193
301
  <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
194
302
  &nbsp;</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 Thu Dec 13 13:10:50 -0500 2007 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
556
+ <p>Generated on Sat May 03 13:27:45 -0400 2008 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>1238</tt>
574
+ <td class='lines_total'><tt>1244</tt>
575
575
  </td>
576
- <td class='lines_code'><tt>881</tt>
576
+ <td class='lines_code'><tt>884</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
  &nbsp;</td>
@@ -693,7 +693,7 @@ span.run100 {
693
693
  </span><span class="marked1"><a name="line93"></a> 93 host = authority.gsub(/^([^\[\]]*)@/, &quot;&quot;).gsub(/:([^:@\[\]]*?)$/, &quot;&quot;)
694
694
  </span><span class="marked0"><a name="line94"></a> 94 port = authority.scan(/:([^:@\[\]]*?)$/).flatten[0]
695
695
  </span><span class="inferred1"><a name="line95"></a> 95 end
696
- </span><span class="marked0"><a name="line96"></a> 96 if port == nil || port == &quot;&quot;
696
+ </span><span class="marked0"><a name="line96"></a> 96 if port == &quot;&quot;
697
697
  </span><span class="marked1"><a name="line97"></a> 97 port = nil
698
698
  </span><span class="inferred0"><a name="line98"></a> 98 end
699
699
  </span><span class="inferred1"><a name="line99"></a> 99
@@ -1670,172 +1670,178 @@ span.run100 {
1670
1670
  </span><span class="marked0"><a name="line1070"></a>1070 return false unless uri.kind_of?(self.class)
1671
1671
  </span><span class="marked1"><a name="line1071"></a>1071 return self.to_s == uri.to_s
1672
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 = &quot;&quot;
1700
- </span><span class="marked0"><a name="line1100"></a>1100 uri_string &lt;&lt; &quot;#{self.scheme}:&quot; if self.scheme != nil
1701
- </span><span class="marked1"><a name="line1101"></a>1101 uri_string &lt;&lt; &quot;//#{self.authority}&quot; if self.authority != nil
1702
- </span><span class="marked0"><a name="line1102"></a>1102 uri_string &lt;&lt; self.path.to_s
1703
- </span><span class="marked1"><a name="line1103"></a>1103 uri_string &lt;&lt; &quot;?#{self.query}&quot; if self.query != nil
1704
- </span><span class="marked0"><a name="line1104"></a>1104 uri_string &lt;&lt; &quot;##{self.fragment}&quot; 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 =&gt; self.scheme,
1712
- </span><span class="marked0"><a name="line1112"></a>1112 :user =&gt; self.user,
1713
- </span><span class="marked1"><a name="line1113"></a>1113 :password =&gt; self.password,
1714
- </span><span class="marked0"><a name="line1114"></a>1114 :host =&gt; self.host,
1715
- </span><span class="marked1"><a name="line1115"></a>1115 :port =&gt; self.specified_port,
1716
- </span><span class="marked0"><a name="line1116"></a>1116 :path =&gt; self.path,
1717
- </span><span class="marked1"><a name="line1117"></a>1117 :query =&gt; self.query,
1718
- </span><span class="marked0"><a name="line1118"></a>1118 :fragment =&gt; 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(&quot;#&lt;%s:%#0x URI:%s&gt;&quot;, 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 &quot;There is no available pure-ruby implementation. &quot; +
1740
- </span><span class="inferred0"><a name="line1140"></a>1140 &quot;Install libidn bindings.&quot;
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 &quot;There is no available pure-ruby implementation. &quot; +
1752
- </span><span class="inferred0"><a name="line1152"></a>1152 &quot;Install libidn bindings.&quot;
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!(/\/\.\//, &quot;/&quot;)
1787
- </span><span class="marked1"><a name="line1187"></a>1187 normalized_path.gsub!(/\/\.$/, &quot;/&quot;)
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 != &quot;.&quot; &amp;&amp; parent != &quot;..&quot;
1790
- </span><span class="marked0"><a name="line1190"></a>1190 normalized_path.gsub!(/\/#{parent}\/\.\.\//, &quot;/&quot;)
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 != &quot;.&quot; &amp;&amp; parent != &quot;..&quot;
1794
- </span><span class="marked0"><a name="line1194"></a>1194 normalized_path.gsub!(/\/#{parent}\/\.\.$/, &quot;/&quot;)
1795
- </span><span class="inferred1"><a name="line1195"></a>1195 end
1796
- </span><span class="marked0"><a name="line1196"></a>1196 normalized_path.gsub!(/^\.\.?\/?/, &quot;&quot;)
1797
- </span><span class="marked1"><a name="line1197"></a>1197 normalized_path.gsub!(/^\/\.\.?\//, &quot;/&quot;)
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 &amp;&amp;
1805
- </span><span class="marked1"><a name="line1205"></a>1205 (self.host == nil || self.host == &quot;&quot;) &amp;&amp;
1806
- </span><span class="marked0"><a name="line1206"></a>1206 (self.path == nil || self.path == &quot;&quot;)
1807
- </span><span class="marked1"><a name="line1207"></a>1207 raise InvalidURIError,
1808
- </span><span class="inferred0"><a name="line1208"></a>1208 &quot;Absolute URI missing hierarchical segment.&quot;
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, &quot;Hostname not supplied.&quot;
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(&quot;@specified_port&quot;)
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
1673
+ </span><span class="inferred1"><a name="line1073"></a>1073
1674
+ </span><span class="inferred0"><a name="line1074"></a>1074 # Returns a hash value that will make a URI equivalent to its normalized
1675
+ </span><span class="inferred1"><a name="line1075"></a>1075 # form.
1676
+ </span><span class="marked0"><a name="line1076"></a>1076 def hash
1677
+ </span><span class="marked1"><a name="line1077"></a>1077 return (self.normalize.to_s.hash * -1)
1678
+ </span><span class="marked0"><a name="line1078"></a>1078 end
1679
+ </span><span class="inferred1"><a name="line1079"></a>1079
1680
+ </span><span class="inferred0"><a name="line1080"></a>1080 # Clones the URI object.
1681
+ </span><span class="marked1"><a name="line1081"></a>1081 def dup
1682
+ </span><span class="marked0"><a name="line1082"></a>1082 duplicated_scheme = self.scheme ? self.scheme.dup : nil
1683
+ </span><span class="marked1"><a name="line1083"></a>1083 duplicated_user = self.user ? self.user.dup : nil
1684
+ </span><span class="marked0"><a name="line1084"></a>1084 duplicated_password = self.password ? self.password.dup : nil
1685
+ </span><span class="marked1"><a name="line1085"></a>1085 duplicated_host = self.host ? self.host.dup : nil
1686
+ </span><span class="marked0"><a name="line1086"></a>1086 duplicated_port = self.specified_port
1687
+ </span><span class="marked1"><a name="line1087"></a>1087 duplicated_path = self.path ? self.path.dup : nil
1688
+ </span><span class="marked0"><a name="line1088"></a>1088 duplicated_query = self.query ? self.query.dup : nil
1689
+ </span><span class="marked1"><a name="line1089"></a>1089 duplicated_fragment = self.fragment ? self.fragment.dup : nil
1690
+ </span><span class="marked0"><a name="line1090"></a>1090 duplicated_uri = Addressable::URI.new(
1691
+ </span><span class="inferred1"><a name="line1091"></a>1091 duplicated_scheme,
1692
+ </span><span class="inferred0"><a name="line1092"></a>1092 duplicated_user,
1693
+ </span><span class="inferred1"><a name="line1093"></a>1093 duplicated_password,
1694
+ </span><span class="inferred0"><a name="line1094"></a>1094 duplicated_host,
1695
+ </span><span class="inferred1"><a name="line1095"></a>1095 duplicated_port,
1696
+ </span><span class="inferred0"><a name="line1096"></a>1096 duplicated_path,
1697
+ </span><span class="inferred1"><a name="line1097"></a>1097 duplicated_query,
1698
+ </span><span class="inferred0"><a name="line1098"></a>1098 duplicated_fragment
1699
+ </span><span class="inferred1"><a name="line1099"></a>1099 )
1700
+ </span><span class="marked0"><a name="line1100"></a>1100 return duplicated_uri
1701
+ </span><span class="inferred1"><a name="line1101"></a>1101 end
1702
+ </span><span class="inferred0"><a name="line1102"></a>1102
1703
+ </span><span class="inferred1"><a name="line1103"></a>1103 # Returns the assembled URI as a string.
1704
+ </span><span class="marked0"><a name="line1104"></a>1104 def to_s
1705
+ </span><span class="marked1"><a name="line1105"></a>1105 uri_string = &quot;&quot;
1706
+ </span><span class="marked0"><a name="line1106"></a>1106 uri_string &lt;&lt; &quot;#{self.scheme}:&quot; if self.scheme != nil
1707
+ </span><span class="marked1"><a name="line1107"></a>1107 uri_string &lt;&lt; &quot;//#{self.authority}&quot; if self.authority != nil
1708
+ </span><span class="marked0"><a name="line1108"></a>1108 uri_string &lt;&lt; self.path.to_s
1709
+ </span><span class="marked1"><a name="line1109"></a>1109 uri_string &lt;&lt; &quot;?#{self.query}&quot; if self.query != nil
1710
+ </span><span class="marked0"><a name="line1110"></a>1110 uri_string &lt;&lt; &quot;##{self.fragment}&quot; if self.fragment != nil
1711
+ </span><span class="marked1"><a name="line1111"></a>1111 return uri_string
1712
+ </span><span class="inferred0"><a name="line1112"></a>1112 end
1713
+ </span><span class="inferred1"><a name="line1113"></a>1113
1714
+ </span><span class="inferred0"><a name="line1114"></a>1114 # Returns a Hash of the URI segments.
1715
+ </span><span class="marked1"><a name="line1115"></a>1115 def to_hash
1716
+ </span><span class="inferred0"><a name="line1116"></a>1116 return {
1717
+ </span><span class="marked1"><a name="line1117"></a>1117 :scheme =&gt; self.scheme,
1718
+ </span><span class="marked0"><a name="line1118"></a>1118 :user =&gt; self.user,
1719
+ </span><span class="marked1"><a name="line1119"></a>1119 :password =&gt; self.password,
1720
+ </span><span class="marked0"><a name="line1120"></a>1120 :host =&gt; self.host,
1721
+ </span><span class="marked1"><a name="line1121"></a>1121 :port =&gt; self.specified_port,
1722
+ </span><span class="marked0"><a name="line1122"></a>1122 :path =&gt; self.path,
1723
+ </span><span class="marked1"><a name="line1123"></a>1123 :query =&gt; self.query,
1724
+ </span><span class="marked0"><a name="line1124"></a>1124 :fragment =&gt; self.fragment
1725
+ </span><span class="marked1"><a name="line1125"></a>1125 }
1726
+ </span><span class="marked0"><a name="line1126"></a>1126 end
1727
+ </span><span class="inferred1"><a name="line1127"></a>1127
1728
+ </span><span class="inferred0"><a name="line1128"></a>1128 # Returns a string representation of the URI object's state.
1729
+ </span><span class="marked1"><a name="line1129"></a>1129 def inspect
1730
+ </span><span class="marked0"><a name="line1130"></a>1130 sprintf(&quot;#&lt;%s:%#0x URI:%s&gt;&quot;, self.class.to_s, self.object_id, self.to_s)
1731
+ </span><span class="marked1"><a name="line1131"></a>1131 end
1732
+ </span><span class="inferred0"><a name="line1132"></a>1132
1733
+ </span><span class="inferred1"><a name="line1133"></a>1133 # This module handles internationalized domain names. When Ruby has an
1734
+ </span><span class="inferred0"><a name="line1134"></a>1134 # implementation of nameprep, stringprep, punycode, etc, this
1735
+ </span><span class="inferred1"><a name="line1135"></a>1135 # module should contain an actual implementation of IDNA instead of
1736
+ </span><span class="inferred0"><a name="line1136"></a>1136 # returning nil if libidn can't be used.
1737
+ </span><span class="marked1"><a name="line1137"></a>1137 module IDNA
1738
+ </span><span class="inferred0"><a name="line1138"></a>1138 # Returns the ascii representation of the label.
1739
+ </span><span class="marked1"><a name="line1139"></a>1139 def self.to_ascii(label)
1740
+ </span><span class="marked0"><a name="line1140"></a>1140 return nil if label.nil?
1741
+ </span><span class="marked1"><a name="line1141"></a>1141 if self.use_libidn?
1742
+ </span><span class="marked0"><a name="line1142"></a>1142 return IDN::Idna.toASCII(label)
1743
+ </span><span class="inferred1"><a name="line1143"></a>1143 else
1744
+ </span><span class="marked0"><a name="line1144"></a>1144 raise NotImplementedError,
1745
+ </span><span class="inferred1"><a name="line1145"></a>1145 &quot;There is no available pure-ruby implementation. &quot; +
1746
+ </span><span class="inferred0"><a name="line1146"></a>1146 &quot;Install libidn bindings.&quot;
1747
+ </span><span class="inferred1"><a name="line1147"></a>1147 end
1748
+ </span><span class="inferred0"><a name="line1148"></a>1148 end
1749
+ </span><span class="inferred1"><a name="line1149"></a>1149
1750
+ </span><span class="inferred0"><a name="line1150"></a>1150 # Returns the unicode representation of the label.
1751
+ </span><span class="marked1"><a name="line1151"></a>1151 def self.to_unicode(label)
1752
+ </span><span class="marked0"><a name="line1152"></a>1152 return nil if label.nil?
1753
+ </span><span class="marked1"><a name="line1153"></a>1153 if self.use_libidn?
1754
+ </span><span class="marked0"><a name="line1154"></a>1154 return IDN::Idna.toUnicode(label)
1755
+ </span><span class="inferred1"><a name="line1155"></a>1155 else
1756
+ </span><span class="marked0"><a name="line1156"></a>1156 raise NotImplementedError,
1757
+ </span><span class="inferred1"><a name="line1157"></a>1157 &quot;There is no available pure-ruby implementation. &quot; +
1758
+ </span><span class="inferred0"><a name="line1158"></a>1158 &quot;Install libidn bindings.&quot;
1759
+ </span><span class="inferred1"><a name="line1159"></a>1159 end
1760
+ </span><span class="inferred0"><a name="line1160"></a>1160 end
1761
+ </span><span class="inferred1"><a name="line1161"></a>1161
1762
+ </span><span class="marked0"><a name="line1162"></a>1162 private
1763
+ </span><span class="inferred1"><a name="line1163"></a>1163 # Determines if the libidn bindings are available and able to be used.
1764
+ </span><span class="marked0"><a name="line1164"></a>1164 def self.use_libidn?
1765
+ </span><span class="marked1"><a name="line1165"></a>1165 if !defined?(@use_libidn) || @use_libidn.nil?
1766
+ </span><span class="marked0"><a name="line1166"></a>1166 begin
1767
+ </span><span class="marked1"><a name="line1167"></a>1167 require 'rubygems'
1768
+ </span><span class="inferred0"><a name="line1168"></a>1168 rescue LoadError
1769
+ </span><span class="marked1"><a name="line1169"></a>1169 nil
1770
+ </span><span class="inferred0"><a name="line1170"></a>1170 end
1771
+ </span><span class="marked1"><a name="line1171"></a>1171 begin
1772
+ </span><span class="marked0"><a name="line1172"></a>1172 require 'idn'
1773
+ </span><span class="inferred1"><a name="line1173"></a>1173 rescue LoadError
1774
+ </span><span class="marked0"><a name="line1174"></a>1174 nil
1775
+ </span><span class="inferred1"><a name="line1175"></a>1175 end
1776
+ </span><span class="marked0"><a name="line1176"></a>1176 @use_libidn = !!(defined?(IDN::Idna))
1777
+ </span><span class="inferred1"><a name="line1177"></a>1177 end
1778
+ </span><span class="marked0"><a name="line1178"></a>1178 return @use_libidn
1779
+ </span><span class="inferred1"><a name="line1179"></a>1179 end
1780
+ </span><span class="inferred0"><a name="line1180"></a>1180 end
1781
+ </span><span class="inferred1"><a name="line1181"></a>1181
1782
+ </span><span class="marked0"><a name="line1182"></a>1182 private
1783
+ </span><span class="inferred1"><a name="line1183"></a>1183 # Resolves paths to their simplest form.
1784
+ </span><span class="marked0"><a name="line1184"></a>1184 def self.normalize_path(path)
1785
+ </span><span class="inferred1"><a name="line1185"></a>1185 # Section 5.2.4 of RFC 3986
1786
+ </span><span class="inferred0"><a name="line1186"></a>1186
1787
+ </span><span class="marked1"><a name="line1187"></a>1187 return nil if path.nil?
1788
+ </span><span class="marked0"><a name="line1188"></a>1188 normalized_path = path.dup
1789
+ </span><span class="marked1"><a name="line1189"></a>1189 previous_state = normalized_path.dup
1790
+ </span><span class="inferred0"><a name="line1190"></a>1190 begin
1791
+ </span><span class="marked1"><a name="line1191"></a>1191 previous_state = normalized_path.dup
1792
+ </span><span class="marked0"><a name="line1192"></a>1192 normalized_path.gsub!(/\/\.\//, &quot;/&quot;)
1793
+ </span><span class="marked1"><a name="line1193"></a>1193 normalized_path.gsub!(/\/\.$/, &quot;/&quot;)
1794
+ </span><span class="marked0"><a name="line1194"></a>1194 parent = normalized_path.scan(/\/([^\/]+)\/\.\.\//).flatten[0]
1795
+ </span><span class="marked1"><a name="line1195"></a>1195 if parent != &quot;.&quot; &amp;&amp; parent != &quot;..&quot;
1796
+ </span><span class="marked0"><a name="line1196"></a>1196 normalized_path.gsub!(/\/#{parent}\/\.\.\//, &quot;/&quot;)
1797
+ </span><span class="inferred1"><a name="line1197"></a>1197 end
1798
+ </span><span class="marked0"><a name="line1198"></a>1198 parent = normalized_path.scan(/\/([^\/]+)\/\.\.$/).flatten[0]
1799
+ </span><span class="marked1"><a name="line1199"></a>1199 if parent != &quot;.&quot; &amp;&amp; parent != &quot;..&quot;
1800
+ </span><span class="marked0"><a name="line1200"></a>1200 normalized_path.gsub!(/\/#{parent}\/\.\.$/, &quot;/&quot;)
1801
+ </span><span class="inferred1"><a name="line1201"></a>1201 end
1802
+ </span><span class="marked0"><a name="line1202"></a>1202 normalized_path.gsub!(/^\.\.?\/?/, &quot;&quot;)
1803
+ </span><span class="marked1"><a name="line1203"></a>1203 normalized_path.gsub!(/^\/\.\.?\//, &quot;/&quot;)
1804
+ </span><span class="marked0"><a name="line1204"></a>1204 end until previous_state == normalized_path
1805
+ </span><span class="marked1"><a name="line1205"></a>1205 return normalized_path
1806
+ </span><span class="inferred0"><a name="line1206"></a>1206 end
1807
+ </span><span class="inferred1"><a name="line1207"></a>1207
1808
+ </span><span class="inferred0"><a name="line1208"></a>1208 # Ensures that the URI is valid.
1809
+ </span><span class="marked1"><a name="line1209"></a>1209 def validate
1810
+ </span><span class="marked0"><a name="line1210"></a>1210 if self.scheme != nil &amp;&amp;
1811
+ </span><span class="marked1"><a name="line1211"></a>1211 (self.host == nil || self.host == &quot;&quot;) &amp;&amp;
1812
+ </span><span class="marked0"><a name="line1212"></a>1212 (self.path == nil || self.path == &quot;&quot;)
1813
+ </span><span class="marked1"><a name="line1213"></a>1213 raise InvalidURIError,
1814
+ </span><span class="inferred0"><a name="line1214"></a>1214 &quot;Absolute URI missing hierarchical segment.&quot;
1815
+ </span><span class="inferred1"><a name="line1215"></a>1215 end
1816
+ </span><span class="marked0"><a name="line1216"></a>1216 if self.host == nil
1817
+ </span><span class="marked1"><a name="line1217"></a>1217 if self.specified_port != nil ||
1818
+ </span><span class="marked0"><a name="line1218"></a>1218 self.user != nil ||
1819
+ </span><span class="marked1"><a name="line1219"></a>1219 self.password != nil
1820
+ </span><span class="marked0"><a name="line1220"></a>1220 raise InvalidURIError, &quot;Hostname not supplied.&quot;
1821
+ </span><span class="inferred1"><a name="line1221"></a>1221 end
1822
+ </span><span class="inferred0"><a name="line1222"></a>1222 end
1823
+ </span><span class="inferred1"><a name="line1223"></a>1223 end
1824
+ </span><span class="inferred0"><a name="line1224"></a>1224
1825
+ </span><span class="inferred1"><a name="line1225"></a>1225 # Replaces the internal state of self with the specified URI's state.
1826
+ </span><span class="inferred0"><a name="line1226"></a>1226 # Used in destructive operations to avoid massive code repetition.
1827
+ </span><span class="marked1"><a name="line1227"></a>1227 def replace_self(uri)
1828
+ </span><span class="inferred0"><a name="line1228"></a>1228 # Reset dependant values
1829
+ </span><span class="marked1"><a name="line1229"></a>1229 @userinfo = nil
1830
+ </span><span class="marked0"><a name="line1230"></a>1230 @authority = nil
1831
+ </span><span class="inferred1"><a name="line1231"></a>1231
1832
+ </span><span class="marked0"><a name="line1232"></a>1232 @scheme = uri.scheme
1833
+ </span><span class="marked1"><a name="line1233"></a>1233 @user = uri.user
1834
+ </span><span class="marked0"><a name="line1234"></a>1234 @password = uri.password
1835
+ </span><span class="marked1"><a name="line1235"></a>1235 @host = uri.host
1836
+ </span><span class="marked0"><a name="line1236"></a>1236 @specified_port = uri.instance_variable_get(&quot;@specified_port&quot;)
1837
+ </span><span class="marked1"><a name="line1237"></a>1237 @port = @specified_port.to_s.to_i
1838
+ </span><span class="marked0"><a name="line1238"></a>1238 @path = uri.path
1839
+ </span><span class="marked1"><a name="line1239"></a>1239 @query = uri.query
1840
+ </span><span class="marked0"><a name="line1240"></a>1240 @fragment = uri.fragment
1841
+ </span><span class="marked1"><a name="line1241"></a>1241 return self
1842
+ </span><span class="inferred0"><a name="line1242"></a>1242 end
1843
+ </span><span class="inferred1"><a name="line1243"></a>1243 end
1844
+ </span><span class="inferred0"><a name="line1244"></a>1244 end
1839
1845
  </span></pre><hr/>
1840
1846
  <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
1841
1847
  version 0.8.1.2.</p>