addressable 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>