shoesgem 0.1424.0 → 0.1426.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. data/README.rdoc +3 -0
  2. data/shoes/CHANGELOG.txt +21 -21
  3. data/shoes/COPYING.txt +30 -30
  4. data/shoes/VERSION.txt +1 -1
  5. data/shoes/freetype6.dll +0 -0
  6. data/shoes/lib/shoes/cache.rb +54 -54
  7. data/shoes/lib/shoes/data.rb +39 -39
  8. data/shoes/lib/shoes/help.rb +421 -421
  9. data/shoes/lib/shoes/image.rb +25 -25
  10. data/shoes/lib/shoes/inspect.rb +128 -128
  11. data/shoes/lib/shoes/log.rb +48 -48
  12. data/shoes/lib/shoes/minitar.rb +986 -986
  13. data/shoes/lib/shoes/override.rb +38 -38
  14. data/shoes/lib/shoes/pack.rb +503 -503
  15. data/shoes/lib/shoes/search.rb +46 -46
  16. data/shoes/lib/shoes/setup.rb +329 -329
  17. data/shoes/lib/shoes/shy.rb +131 -131
  18. data/shoes/lib/shoes/shybuilder.rb +44 -44
  19. data/shoes/lib/shoes.rb +522 -522
  20. data/shoes/libcairo-2.dll +0 -0
  21. data/shoes/libeay32.dll +0 -0
  22. data/shoes/libexpat-1.dll +0 -0
  23. data/shoes/libfontconfig-1.dll +0 -0
  24. data/shoes/libgio-2.0-0.dll +0 -0
  25. data/shoes/libglib-2.0-0.dll +0 -0
  26. data/shoes/libgmodule-2.0-0.dll +0 -0
  27. data/shoes/libgobject-2.0-0.dll +0 -0
  28. data/shoes/libgthread-2.0-0.dll +0 -0
  29. data/shoes/libiconv2.dll +0 -0
  30. data/shoes/libjpeg-8.dll +0 -0
  31. data/shoes/libpango-1.0-0.dll +0 -0
  32. data/shoes/libpangocairo-1.0-0.dll +0 -0
  33. data/shoes/libpangoft2-1.0-0.dll +0 -0
  34. data/shoes/libpangowin32-1.0-0.dll +0 -0
  35. data/shoes/libpng14-14.dll +0 -0
  36. data/shoes/libportaudio-2.dll +0 -0
  37. data/shoes/libshoes.dll +0 -0
  38. data/shoes/libssl32.dll +0 -0
  39. data/shoes/libungif4.dll +0 -0
  40. data/shoes/msvcrt-ruby191.dll +0 -0
  41. data/shoes/nsis/base.nsi +644 -0
  42. data/shoes/nsis/installer-1.bmp +0 -0
  43. data/shoes/nsis/installer-2.bmp +0 -0
  44. data/shoes/nsis/setup.ico +0 -0
  45. data/shoes/nsis/shoes.exe.manifest +17 -0
  46. data/shoes/nsis/shoes.ico +0 -0
  47. data/shoes/nsis/shoes.nsi +644 -0
  48. data/shoes/nsis/stub-inject.c +59 -0
  49. data/shoes/nsis/stub.c +271 -0
  50. data/shoes/nsis/stub32.h +14 -0
  51. data/shoes/nsis/stub32.rc +16 -0
  52. data/shoes/readline5.dll +0 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -63
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -216
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -510
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -691
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -103
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -40
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -38
  61. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -202
  62. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -164
  63. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -838
  64. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -94
  65. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -26
  66. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -135
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -58
  69. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -354
  70. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  71. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  72. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -13
  73. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -9
  74. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -8
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -49
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -721
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -152
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -307
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -219
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -68
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -271
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -180
  83. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -231
  84. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -109
  85. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -57
  86. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -16
  87. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -1
  88. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  89. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -32
  90. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -34
  91. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -46
  92. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -16
  93. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -23
  94. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -22
  95. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -106
  96. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -46
  97. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -46
  98. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -114
  99. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -52
  100. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -75
  101. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -275
  102. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -99
  103. data/shoes/ruby/lib/ftsearch/util.rb +21 -21
  104. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  105. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  106. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  107. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  108. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  109. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  110. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  111. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  112. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  113. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  114. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  115. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  116. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  117. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  118. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  119. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  120. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  121. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  122. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  123. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  124. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  125. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  126. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  127. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  128. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  129. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  130. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  131. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  132. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  133. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  134. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  135. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  136. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  137. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  138. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  139. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  140. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  141. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  142. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  143. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  144. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  145. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  146. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  147. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  148. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  149. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  150. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  151. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  152. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  153. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +2 -2
  178. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  187. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -24
  188. data/shoes/ruby/lib/rubygems/builder.rb +88 -88
  189. data/shoes/ruby/lib/rubygems/command.rb +406 -406
  190. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -146
  191. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -53
  192. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -86
  193. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -75
  194. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -91
  195. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -74
  196. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -188
  197. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -128
  198. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -62
  199. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -57
  200. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -172
  201. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -148
  202. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -35
  203. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -110
  204. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -111
  205. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -33
  206. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -93
  207. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -233
  208. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -82
  209. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -37
  210. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -48
  211. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -152
  212. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -77
  213. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -27
  214. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -73
  215. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -95
  216. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -181
  217. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -87
  218. data/shoes/ruby/lib/rubygems/config_file.rb +266 -266
  219. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -46
  220. data/shoes/ruby/lib/rubygems/defaults.rb +89 -89
  221. data/shoes/ruby/lib/rubygems/dependency.rb +119 -119
  222. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -258
  223. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -165
  224. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +39 -39
  225. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -23
  226. data/shoes/ruby/lib/rubygems/digest/sha1.rb +16 -16
  227. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -17
  228. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -214
  229. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -84
  230. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -56
  231. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -24
  232. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -23
  233. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -27
  234. data/shoes/ruby/lib/rubygems/ext.rb +18 -18
  235. data/shoes/ruby/lib/rubygems/format.rb +87 -87
  236. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -83
  237. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -100
  238. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -58
  239. data/shoes/ruby/lib/rubygems/indexer.rb +370 -370
  240. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -113
  241. data/shoes/ruby/lib/rubygems/installer.rb +578 -578
  242. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -134
  243. data/shoes/ruby/lib/rubygems/old_format.rb +148 -148
  244. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -24
  245. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -245
  246. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -219
  247. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -143
  248. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -99
  249. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -86
  250. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -180
  251. data/shoes/ruby/lib/rubygems/package.rb +95 -95
  252. data/shoes/ruby/lib/rubygems/platform.rb +178 -178
  253. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -344
  254. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +14 -14
  255. data/shoes/ruby/lib/rubygems/requirement.rb +163 -163
  256. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -6
  257. data/shoes/ruby/lib/rubygems/security.rb +786 -786
  258. data/shoes/ruby/lib/rubygems/server.rb +629 -629
  259. data/shoes/ruby/lib/rubygems/source_index.rb +559 -559
  260. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -393
  261. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -56
  262. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -249
  263. data/shoes/ruby/lib/rubygems/specification.rb +1262 -1262
  264. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -131
  265. data/shoes/ruby/lib/rubygems/timer.rb +25 -25
  266. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -242
  267. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -360
  268. data/shoes/ruby/lib/rubygems/validator.rb +208 -208
  269. data/shoes/ruby/lib/rubygems/version.rb +167 -167
  270. data/shoes/ruby/lib/rubygems/version_option.rb +48 -48
  271. data/shoes/ruby/lib/rubygems.rb +888 -888
  272. data/shoes/ruby/lib/ubygems.rb +10 -10
  273. data/shoes/samples/class-book.rb +43 -43
  274. data/shoes/samples/class-book.yaml +387 -387
  275. data/shoes/samples/expert-definr.rb +23 -23
  276. data/shoes/samples/expert-funnies.rb +51 -51
  277. data/shoes/samples/expert-irb.rb +112 -112
  278. data/shoes/samples/expert-minesweeper.rb +267 -267
  279. data/shoes/samples/expert-othello.rb +319 -319
  280. data/shoes/samples/expert-pong.rb +62 -62
  281. data/shoes/samples/expert-tankspank.rb +385 -385
  282. data/shoes/samples/good-arc.rb +37 -37
  283. data/shoes/samples/good-clock.rb +51 -51
  284. data/shoes/samples/good-follow.rb +26 -26
  285. data/shoes/samples/good-reminder.rb +174 -174
  286. data/shoes/samples/good-vjot.rb +56 -56
  287. data/shoes/samples/simple-accordion.rb +75 -75
  288. data/shoes/samples/simple-anim-shapes.rb +17 -17
  289. data/shoes/samples/simple-anim-text.rb +13 -13
  290. data/shoes/samples/simple-arc.rb +23 -23
  291. data/shoes/samples/simple-bounce.rb +24 -24
  292. data/shoes/samples/simple-calc.rb +70 -70
  293. data/shoes/samples/simple-control-sizes.rb +24 -24
  294. data/shoes/samples/simple-curve.rb +26 -26
  295. data/shoes/samples/simple-dialogs.rb +29 -29
  296. data/shoes/samples/simple-downloader.rb +27 -27
  297. data/shoes/samples/simple-draw.rb +13 -13
  298. data/shoes/samples/simple-editor.rb +28 -28
  299. data/shoes/samples/simple-form.rb +28 -28
  300. data/shoes/samples/simple-mask.rb +21 -21
  301. data/shoes/samples/simple-menu.rb +31 -31
  302. data/shoes/samples/simple-menu1.rb +35 -35
  303. data/shoes/samples/simple-rubygems.rb +29 -29
  304. data/shoes/samples/simple-slide.rb +45 -45
  305. data/shoes/samples/simple-sphere.rb +28 -28
  306. data/shoes/samples/simple-timer.rb +13 -13
  307. data/shoes/samples/simple-video.rb +13 -13
  308. data/shoes/shoes.exe +0 -0
  309. data/shoes/sqlite3.dll +0 -0
  310. data/shoes/static/code_highlighter.js +188 -188
  311. data/shoes/static/code_highlighter_ruby.js +26 -26
  312. data/shoes/static/manual-en.txt +2783 -2783
  313. data/shoes/static/manual-ja.txt +2780 -2780
  314. data/shoes/static/manual.css +167 -167
  315. data/shoes/static/stubs/blank.run +375 -375
  316. data/shoes/static/stubs/sh-install +48 -48
  317. data/shoes/zlib.dll +0 -0
  318. data/shoes/zlib1.dll +0 -0
  319. metadata +15 -5
  320. data/shoes/static/Thumbs.db +0 -0
@@ -1,344 +1,344 @@
1
- require 'net/http'
2
- require 'stringio'
3
- require 'time'
4
- require 'uri'
5
-
6
- require 'rubygems'
7
-
8
- ##
9
- # RemoteFetcher handles the details of fetching gems and gem information from
10
- # a remote source.
11
-
12
- class Gem::RemoteFetcher
13
-
14
- include Gem::UserInteraction
15
-
16
- ##
17
- # A FetchError exception wraps up the various possible IO and HTTP failures
18
- # that could happen while downloading from the internet.
19
-
20
- class FetchError < Gem::Exception
21
-
22
- ##
23
- # The URI which was being accessed when the exception happened.
24
-
25
- attr_accessor :uri
26
-
27
- def initialize(message, uri)
28
- super message
29
- @uri = uri
30
- end
31
-
32
- def to_s # :nodoc:
33
- "#{super} (#{uri})"
34
- end
35
-
36
- end
37
-
38
- @fetcher = nil
39
-
40
- ##
41
- # Cached RemoteFetcher instance.
42
-
43
- def self.fetcher
44
- @fetcher ||= self.new Gem.configuration[:http_proxy]
45
- end
46
-
47
- ##
48
- # Initialize a remote fetcher using the source URI and possible proxy
49
- # information.
50
- #
51
- # +proxy+
52
- # * [String]: explicit specification of proxy; overrides any environment
53
- # variable setting
54
- # * nil: respect environment variables (HTTP_PROXY, HTTP_PROXY_USER,
55
- # HTTP_PROXY_PASS)
56
- # * <tt>:no_proxy</tt>: ignore environment variables and _don't_ use a proxy
57
-
58
- def initialize(proxy)
59
- Socket.do_not_reverse_lookup = true
60
-
61
- @connections = {}
62
- @requests = Hash.new 0
63
- @proxy_uri =
64
- case proxy
65
- when :no_proxy then nil
66
- when nil then get_proxy_from_env
67
- when URI::HTTP then proxy
68
- else URI.parse(proxy)
69
- end
70
- end
71
-
72
- ##
73
- # Moves the gem +spec+ from +source_uri+ to the cache dir unless it is
74
- # already there. If the source_uri is local the gem cache dir copy is
75
- # always replaced.
76
-
77
- def download(spec, source_uri, install_dir = Gem.dir)
78
- if File.writable?(install_dir)
79
- cache_dir = File.join install_dir, 'cache'
80
- else
81
- cache_dir = File.join(Gem.user_dir, 'cache')
82
- end
83
-
84
- gem_file_name = "#{spec.full_name}.gem"
85
- local_gem_path = File.join cache_dir, gem_file_name
86
-
87
- FileUtils.mkdir_p cache_dir rescue nil unless File.exist? cache_dir
88
-
89
- source_uri = URI.parse source_uri unless URI::Generic === source_uri
90
- scheme = source_uri.scheme
91
-
92
- # URI.parse gets confused by MS Windows paths with forward slashes.
93
- scheme = nil if scheme =~ /^[a-z]$/i
94
-
95
- case scheme
96
- when 'http', 'https' then
97
- unless File.exist? local_gem_path then
98
- begin
99
- say "Downloading gem #{gem_file_name}" if
100
- Gem.configuration.really_verbose
101
-
102
- remote_gem_path = source_uri + "gems/#{gem_file_name}"
103
-
104
- gem = Gem::RemoteFetcher.fetcher.fetch_path remote_gem_path
105
- rescue Gem::RemoteFetcher::FetchError
106
- raise if spec.original_platform == spec.platform
107
-
108
- alternate_name = "#{spec.original_name}.gem"
109
-
110
- say "Failed, downloading gem #{alternate_name}" if
111
- Gem.configuration.really_verbose
112
-
113
- remote_gem_path = source_uri + "gems/#{alternate_name}"
114
-
115
- gem = Gem::RemoteFetcher.fetcher.fetch_path remote_gem_path
116
- end
117
-
118
- File.open local_gem_path, 'wb' do |fp|
119
- fp.write gem
120
- end
121
- end
122
- when nil, 'file' then # TODO test for local overriding cache
123
- begin
124
- FileUtils.cp source_uri.to_s, local_gem_path
125
- rescue Errno::EACCES
126
- local_gem_path = source_uri.to_s
127
- end
128
-
129
- say "Using local gem #{local_gem_path}" if
130
- Gem.configuration.really_verbose
131
- else
132
- raise Gem::InstallError, "unsupported URI scheme #{source_uri.scheme}"
133
- end
134
-
135
- local_gem_path
136
- end
137
-
138
- ##
139
- # Downloads +uri+ and returns it as a String.
140
-
141
- def fetch_path(uri, mtime = nil, head = false)
142
- data = open_uri_or_path uri, mtime, head
143
- data = Gem.gunzip data if data and not head and uri.to_s =~ /gz$/
144
- data
145
- rescue FetchError
146
- raise
147
- rescue Timeout::Error
148
- raise FetchError.new('timed out', uri)
149
- rescue IOError, SocketError, SystemCallError => e
150
- raise FetchError.new("#{e.class}: #{e}", uri)
151
- end
152
-
153
- ##
154
- # Returns the size of +uri+ in bytes.
155
-
156
- def fetch_size(uri) # TODO: phase this out
157
- response = fetch_path(uri, nil, true)
158
-
159
- response['content-length'].to_i
160
- end
161
-
162
- def escape(str)
163
- return unless str
164
- URI.escape(str)
165
- end
166
-
167
- def unescape(str)
168
- return unless str
169
- URI.unescape(str)
170
- end
171
-
172
- ##
173
- # Returns an HTTP proxy URI if one is set in the environment variables.
174
-
175
- def get_proxy_from_env
176
- env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
177
-
178
- return nil if env_proxy.nil? or env_proxy.empty?
179
-
180
- uri = URI.parse env_proxy
181
-
182
- if uri and uri.user.nil? and uri.password.nil? then
183
- # Probably we have http_proxy_* variables?
184
- uri.user = escape(ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER'])
185
- uri.password = escape(ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS'])
186
- end
187
-
188
- uri
189
- end
190
-
191
- ##
192
- # Normalize the URI by adding "http://" if it is missing.
193
-
194
- def normalize_uri(uri)
195
- (uri =~ /^(https?|ftp|file):/) ? uri : "http://#{uri}"
196
- end
197
-
198
- ##
199
- # Creates or an HTTP connection based on +uri+, or retrieves an existing
200
- # connection, using a proxy if needed.
201
-
202
- def connection_for(uri)
203
- net_http_args = [uri.host, uri.port]
204
-
205
- if @proxy_uri then
206
- net_http_args += [
207
- @proxy_uri.host,
208
- @proxy_uri.port,
209
- @proxy_uri.user,
210
- @proxy_uri.password
211
- ]
212
- end
213
-
214
- connection_id = net_http_args.join ':'
215
- @connections[connection_id] ||= Net::HTTP.new(*net_http_args)
216
- connection = @connections[connection_id]
217
-
218
- if uri.scheme == 'https' and not connection.started? then
219
- require 'net/https'
220
- connection.use_ssl = true
221
- connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
222
- end
223
-
224
- connection.start unless connection.started?
225
-
226
- connection
227
- end
228
-
229
- ##
230
- # Read the data from the (source based) URI, but if it is a file:// URI,
231
- # read from the filesystem instead.
232
-
233
- def open_uri_or_path(uri, last_modified = nil, head = false, depth = 0)
234
- raise "block is dead" if block_given?
235
-
236
- return open(get_file_uri_path(uri)) if file_uri? uri
237
-
238
- uri = URI.parse uri unless URI::Generic === uri
239
- raise ArgumentError, 'uri is not an HTTP URI' unless URI::HTTP === uri
240
-
241
- fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get
242
- response = request uri, fetch_type, last_modified
243
-
244
- case response
245
- when Net::HTTPOK, Net::HTTPNotModified then
246
- head ? response : response.body
247
- when Net::HTTPMovedPermanently, Net::HTTPFound, Net::HTTPSeeOther,
248
- Net::HTTPTemporaryRedirect then
249
- raise FetchError.new('too many redirects', uri) if depth > 10
250
-
251
- open_uri_or_path(response['Location'], last_modified, head, depth + 1)
252
- else
253
- raise FetchError.new("bad response #{response.message} #{response.code}", uri)
254
- end
255
- end
256
-
257
- ##
258
- # Performs a Net::HTTP request of type +request_class+ on +uri+ returning
259
- # a Net::HTTP response object. request maintains a table of persistent
260
- # connections to reduce connect overhead.
261
-
262
- def request(uri, request_class, last_modified = nil)
263
- request = request_class.new uri.request_uri
264
-
265
- unless uri.nil? || uri.user.nil? || uri.user.empty? then
266
- request.basic_auth uri.user, uri.password
267
- end
268
-
269
- ua = "RubyGems/#{Gem::RubyGemsVersion} #{Gem::Platform.local}"
270
- ua << " Ruby/#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}"
271
- ua << " patchlevel #{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
272
- ua << ")"
273
-
274
- request.add_field 'User-Agent', ua
275
- request.add_field 'Connection', 'keep-alive'
276
- request.add_field 'Keep-Alive', '30'
277
-
278
- if last_modified then
279
- last_modified = last_modified.utc
280
- request.add_field 'If-Modified-Since', last_modified.rfc2822
281
- end
282
-
283
- connection = connection_for uri
284
-
285
- retried = false
286
- bad_response = false
287
-
288
- begin
289
- @requests[connection.object_id] += 1
290
- response = connection.request request
291
- say "#{request.method} #{response.code} #{response.message}: #{uri}" if
292
- Gem.configuration.really_verbose
293
- rescue Net::HTTPBadResponse
294
- reset connection
295
-
296
- raise FetchError.new('too many bad responses', uri) if bad_response
297
-
298
- bad_response = true
299
- retry
300
- # HACK work around EOFError bug in Net::HTTP
301
- # NOTE Errno::ECONNABORTED raised a lot on Windows, and make impossible
302
- # to install gems.
303
- rescue EOFError, Errno::ECONNABORTED, Errno::ECONNRESET
304
- requests = @requests[connection.object_id]
305
- say "connection reset after #{requests} requests, retrying" if
306
- Gem.configuration.really_verbose
307
-
308
- raise FetchError.new('too many connection resets', uri) if retried
309
-
310
- reset connection
311
-
312
- retried = true
313
- retry
314
- end
315
-
316
- response
317
- end
318
-
319
- ##
320
- # Resets HTTP connection +connection+.
321
-
322
- def reset(connection)
323
- @requests.delete connection.object_id
324
-
325
- connection.finish
326
- connection.start
327
- end
328
-
329
- ##
330
- # Checks if the provided string is a file:// URI.
331
-
332
- def file_uri?(uri)
333
- uri =~ %r{\Afile://}
334
- end
335
-
336
- ##
337
- # Given a file:// URI, returns its local path.
338
-
339
- def get_file_uri_path(uri)
340
- uri.sub(%r{\Afile://}, '')
341
- end
342
-
343
- end
344
-
1
+ require 'net/http'
2
+ require 'stringio'
3
+ require 'time'
4
+ require 'uri'
5
+
6
+ require 'rubygems'
7
+
8
+ ##
9
+ # RemoteFetcher handles the details of fetching gems and gem information from
10
+ # a remote source.
11
+
12
+ class Gem::RemoteFetcher
13
+
14
+ include Gem::UserInteraction
15
+
16
+ ##
17
+ # A FetchError exception wraps up the various possible IO and HTTP failures
18
+ # that could happen while downloading from the internet.
19
+
20
+ class FetchError < Gem::Exception
21
+
22
+ ##
23
+ # The URI which was being accessed when the exception happened.
24
+
25
+ attr_accessor :uri
26
+
27
+ def initialize(message, uri)
28
+ super message
29
+ @uri = uri
30
+ end
31
+
32
+ def to_s # :nodoc:
33
+ "#{super} (#{uri})"
34
+ end
35
+
36
+ end
37
+
38
+ @fetcher = nil
39
+
40
+ ##
41
+ # Cached RemoteFetcher instance.
42
+
43
+ def self.fetcher
44
+ @fetcher ||= self.new Gem.configuration[:http_proxy]
45
+ end
46
+
47
+ ##
48
+ # Initialize a remote fetcher using the source URI and possible proxy
49
+ # information.
50
+ #
51
+ # +proxy+
52
+ # * [String]: explicit specification of proxy; overrides any environment
53
+ # variable setting
54
+ # * nil: respect environment variables (HTTP_PROXY, HTTP_PROXY_USER,
55
+ # HTTP_PROXY_PASS)
56
+ # * <tt>:no_proxy</tt>: ignore environment variables and _don't_ use a proxy
57
+
58
+ def initialize(proxy)
59
+ Socket.do_not_reverse_lookup = true
60
+
61
+ @connections = {}
62
+ @requests = Hash.new 0
63
+ @proxy_uri =
64
+ case proxy
65
+ when :no_proxy then nil
66
+ when nil then get_proxy_from_env
67
+ when URI::HTTP then proxy
68
+ else URI.parse(proxy)
69
+ end
70
+ end
71
+
72
+ ##
73
+ # Moves the gem +spec+ from +source_uri+ to the cache dir unless it is
74
+ # already there. If the source_uri is local the gem cache dir copy is
75
+ # always replaced.
76
+
77
+ def download(spec, source_uri, install_dir = Gem.dir)
78
+ if File.writable?(install_dir)
79
+ cache_dir = File.join install_dir, 'cache'
80
+ else
81
+ cache_dir = File.join(Gem.user_dir, 'cache')
82
+ end
83
+
84
+ gem_file_name = "#{spec.full_name}.gem"
85
+ local_gem_path = File.join cache_dir, gem_file_name
86
+
87
+ FileUtils.mkdir_p cache_dir rescue nil unless File.exist? cache_dir
88
+
89
+ source_uri = URI.parse source_uri unless URI::Generic === source_uri
90
+ scheme = source_uri.scheme
91
+
92
+ # URI.parse gets confused by MS Windows paths with forward slashes.
93
+ scheme = nil if scheme =~ /^[a-z]$/i
94
+
95
+ case scheme
96
+ when 'http', 'https' then
97
+ unless File.exist? local_gem_path then
98
+ begin
99
+ say "Downloading gem #{gem_file_name}" if
100
+ Gem.configuration.really_verbose
101
+
102
+ remote_gem_path = source_uri + "gems/#{gem_file_name}"
103
+
104
+ gem = Gem::RemoteFetcher.fetcher.fetch_path remote_gem_path
105
+ rescue Gem::RemoteFetcher::FetchError
106
+ raise if spec.original_platform == spec.platform
107
+
108
+ alternate_name = "#{spec.original_name}.gem"
109
+
110
+ say "Failed, downloading gem #{alternate_name}" if
111
+ Gem.configuration.really_verbose
112
+
113
+ remote_gem_path = source_uri + "gems/#{alternate_name}"
114
+
115
+ gem = Gem::RemoteFetcher.fetcher.fetch_path remote_gem_path
116
+ end
117
+
118
+ File.open local_gem_path, 'wb' do |fp|
119
+ fp.write gem
120
+ end
121
+ end
122
+ when nil, 'file' then # TODO test for local overriding cache
123
+ begin
124
+ FileUtils.cp source_uri.to_s, local_gem_path
125
+ rescue Errno::EACCES
126
+ local_gem_path = source_uri.to_s
127
+ end
128
+
129
+ say "Using local gem #{local_gem_path}" if
130
+ Gem.configuration.really_verbose
131
+ else
132
+ raise Gem::InstallError, "unsupported URI scheme #{source_uri.scheme}"
133
+ end
134
+
135
+ local_gem_path
136
+ end
137
+
138
+ ##
139
+ # Downloads +uri+ and returns it as a String.
140
+
141
+ def fetch_path(uri, mtime = nil, head = false)
142
+ data = open_uri_or_path uri, mtime, head
143
+ data = Gem.gunzip data if data and not head and uri.to_s =~ /gz$/
144
+ data
145
+ rescue FetchError
146
+ raise
147
+ rescue Timeout::Error
148
+ raise FetchError.new('timed out', uri)
149
+ rescue IOError, SocketError, SystemCallError => e
150
+ raise FetchError.new("#{e.class}: #{e}", uri)
151
+ end
152
+
153
+ ##
154
+ # Returns the size of +uri+ in bytes.
155
+
156
+ def fetch_size(uri) # TODO: phase this out
157
+ response = fetch_path(uri, nil, true)
158
+
159
+ response['content-length'].to_i
160
+ end
161
+
162
+ def escape(str)
163
+ return unless str
164
+ URI.escape(str)
165
+ end
166
+
167
+ def unescape(str)
168
+ return unless str
169
+ URI.unescape(str)
170
+ end
171
+
172
+ ##
173
+ # Returns an HTTP proxy URI if one is set in the environment variables.
174
+
175
+ def get_proxy_from_env
176
+ env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
177
+
178
+ return nil if env_proxy.nil? or env_proxy.empty?
179
+
180
+ uri = URI.parse env_proxy
181
+
182
+ if uri and uri.user.nil? and uri.password.nil? then
183
+ # Probably we have http_proxy_* variables?
184
+ uri.user = escape(ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER'])
185
+ uri.password = escape(ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS'])
186
+ end
187
+
188
+ uri
189
+ end
190
+
191
+ ##
192
+ # Normalize the URI by adding "http://" if it is missing.
193
+
194
+ def normalize_uri(uri)
195
+ (uri =~ /^(https?|ftp|file):/) ? uri : "http://#{uri}"
196
+ end
197
+
198
+ ##
199
+ # Creates or an HTTP connection based on +uri+, or retrieves an existing
200
+ # connection, using a proxy if needed.
201
+
202
+ def connection_for(uri)
203
+ net_http_args = [uri.host, uri.port]
204
+
205
+ if @proxy_uri then
206
+ net_http_args += [
207
+ @proxy_uri.host,
208
+ @proxy_uri.port,
209
+ @proxy_uri.user,
210
+ @proxy_uri.password
211
+ ]
212
+ end
213
+
214
+ connection_id = net_http_args.join ':'
215
+ @connections[connection_id] ||= Net::HTTP.new(*net_http_args)
216
+ connection = @connections[connection_id]
217
+
218
+ if uri.scheme == 'https' and not connection.started? then
219
+ require 'net/https'
220
+ connection.use_ssl = true
221
+ connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
222
+ end
223
+
224
+ connection.start unless connection.started?
225
+
226
+ connection
227
+ end
228
+
229
+ ##
230
+ # Read the data from the (source based) URI, but if it is a file:// URI,
231
+ # read from the filesystem instead.
232
+
233
+ def open_uri_or_path(uri, last_modified = nil, head = false, depth = 0)
234
+ raise "block is dead" if block_given?
235
+
236
+ return open(get_file_uri_path(uri)) if file_uri? uri
237
+
238
+ uri = URI.parse uri unless URI::Generic === uri
239
+ raise ArgumentError, 'uri is not an HTTP URI' unless URI::HTTP === uri
240
+
241
+ fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get
242
+ response = request uri, fetch_type, last_modified
243
+
244
+ case response
245
+ when Net::HTTPOK, Net::HTTPNotModified then
246
+ head ? response : response.body
247
+ when Net::HTTPMovedPermanently, Net::HTTPFound, Net::HTTPSeeOther,
248
+ Net::HTTPTemporaryRedirect then
249
+ raise FetchError.new('too many redirects', uri) if depth > 10
250
+
251
+ open_uri_or_path(response['Location'], last_modified, head, depth + 1)
252
+ else
253
+ raise FetchError.new("bad response #{response.message} #{response.code}", uri)
254
+ end
255
+ end
256
+
257
+ ##
258
+ # Performs a Net::HTTP request of type +request_class+ on +uri+ returning
259
+ # a Net::HTTP response object. request maintains a table of persistent
260
+ # connections to reduce connect overhead.
261
+
262
+ def request(uri, request_class, last_modified = nil)
263
+ request = request_class.new uri.request_uri
264
+
265
+ unless uri.nil? || uri.user.nil? || uri.user.empty? then
266
+ request.basic_auth uri.user, uri.password
267
+ end
268
+
269
+ ua = "RubyGems/#{Gem::RubyGemsVersion} #{Gem::Platform.local}"
270
+ ua << " Ruby/#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}"
271
+ ua << " patchlevel #{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
272
+ ua << ")"
273
+
274
+ request.add_field 'User-Agent', ua
275
+ request.add_field 'Connection', 'keep-alive'
276
+ request.add_field 'Keep-Alive', '30'
277
+
278
+ if last_modified then
279
+ last_modified = last_modified.utc
280
+ request.add_field 'If-Modified-Since', last_modified.rfc2822
281
+ end
282
+
283
+ connection = connection_for uri
284
+
285
+ retried = false
286
+ bad_response = false
287
+
288
+ begin
289
+ @requests[connection.object_id] += 1
290
+ response = connection.request request
291
+ say "#{request.method} #{response.code} #{response.message}: #{uri}" if
292
+ Gem.configuration.really_verbose
293
+ rescue Net::HTTPBadResponse
294
+ reset connection
295
+
296
+ raise FetchError.new('too many bad responses', uri) if bad_response
297
+
298
+ bad_response = true
299
+ retry
300
+ # HACK work around EOFError bug in Net::HTTP
301
+ # NOTE Errno::ECONNABORTED raised a lot on Windows, and make impossible
302
+ # to install gems.
303
+ rescue EOFError, Errno::ECONNABORTED, Errno::ECONNRESET
304
+ requests = @requests[connection.object_id]
305
+ say "connection reset after #{requests} requests, retrying" if
306
+ Gem.configuration.really_verbose
307
+
308
+ raise FetchError.new('too many connection resets', uri) if retried
309
+
310
+ reset connection
311
+
312
+ retried = true
313
+ retry
314
+ end
315
+
316
+ response
317
+ end
318
+
319
+ ##
320
+ # Resets HTTP connection +connection+.
321
+
322
+ def reset(connection)
323
+ @requests.delete connection.object_id
324
+
325
+ connection.finish
326
+ connection.start
327
+ end
328
+
329
+ ##
330
+ # Checks if the provided string is a file:// URI.
331
+
332
+ def file_uri?(uri)
333
+ uri =~ %r{\Afile://}
334
+ end
335
+
336
+ ##
337
+ # Given a file:// URI, returns its local path.
338
+
339
+ def get_file_uri_path(uri)
340
+ uri.sub(%r{\Afile://}, '')
341
+ end
342
+
343
+ end
344
+