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,559 +1,559 @@
1
- #--
2
- # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
- # All rights reserved.
4
- # See LICENSE.txt for permissions.
5
- #++
6
-
7
- require 'rubygems'
8
- require 'rubygems/user_interaction'
9
- require 'rubygems/specification'
10
- module Gem
11
- autoload(:SpecFetcher, 'rubygems/spec_fetcher')
12
- end
13
-
14
- ##
15
- # The SourceIndex object indexes all the gems available from a
16
- # particular source (e.g. a list of gem directories, or a remote
17
- # source). A SourceIndex maps a gem full name to a gem
18
- # specification.
19
- #
20
- # NOTE:: The class used to be named Cache, but that became
21
- # confusing when cached source fetchers where introduced. The
22
- # constant Gem::Cache is an alias for this class to allow old
23
- # YAMLized source index objects to load properly.
24
-
25
- class Gem::SourceIndex
26
-
27
- include Enumerable
28
-
29
- include Gem::UserInteraction
30
-
31
- attr_reader :gems # :nodoc:
32
-
33
- ##
34
- # Directories to use to refresh this SourceIndex when calling refresh!
35
-
36
- attr_accessor :spec_dirs
37
-
38
- class << self
39
- include Gem::UserInteraction
40
-
41
- ##
42
- # Factory method to construct a source index instance for a given
43
- # path.
44
- #
45
- # deprecated::
46
- # If supplied, from_installed_gems will act just like
47
- # +from_gems_in+. This argument is deprecated and is provided
48
- # just for backwards compatibility, and should not generally
49
- # be used.
50
- #
51
- # return::
52
- # SourceIndex instance
53
-
54
- def from_installed_gems(*deprecated)
55
- if deprecated.empty?
56
- from_gems_in(*installed_spec_directories)
57
- else
58
- from_gems_in(*deprecated) # HACK warn
59
- end
60
- end
61
-
62
- ##
63
- # Returns a list of directories from Gem.path that contain specifications.
64
-
65
- def installed_spec_directories
66
- Gem.path.collect { |dir| File.join(dir, "specifications") }
67
- end
68
-
69
- ##
70
- # Creates a new SourceIndex from the ruby format gem specifications in
71
- # +spec_dirs+.
72
-
73
- def from_gems_in(*spec_dirs)
74
- source_index = new
75
- source_index.spec_dirs = spec_dirs
76
- source_index.refresh!
77
- end
78
-
79
- ##
80
- # Loads a ruby-format specification from +file_name+ and returns the
81
- # loaded spec.
82
-
83
- def load_specification(file_name)
84
- begin
85
- spec_code = if RUBY_VERSION < '1.9' then
86
- File.read file_name
87
- else
88
- File.read file_name, :encoding => 'UTF-8'
89
- end.untaint
90
-
91
- gemspec = eval spec_code, binding, file_name
92
-
93
- if gemspec.is_a?(Gem::Specification)
94
- gemspec.loaded_from = file_name
95
- return gemspec
96
- end
97
- alert_warning "File '#{file_name}' does not evaluate to a gem specification"
98
- rescue SignalException, SystemExit
99
- raise
100
- rescue SyntaxError => e
101
- alert_warning e
102
- alert_warning spec_code
103
- rescue Exception => e
104
- alert_warning "#{e.inspect}\n#{spec_code}"
105
- alert_warning "Invalid .gemspec format in '#{file_name}'"
106
- end
107
- return nil
108
- end
109
-
110
- end
111
-
112
- ##
113
- # Constructs a source index instance from the provided
114
- # specifications
115
- #
116
- # specifications::
117
- # [Hash] hash of [Gem name, Gem::Specification] pairs
118
-
119
- def initialize(specifications={})
120
- @gems = specifications
121
- @spec_dirs = nil
122
- end
123
-
124
- ##
125
- # Reconstruct the source index from the specifications in +spec_dirs+.
126
-
127
- def load_gems_in(*spec_dirs)
128
- @gems.clear
129
-
130
- spec_dirs.reverse_each do |spec_dir|
131
- spec_files = Dir.glob File.join(spec_dir, '*.gemspec')
132
-
133
- spec_files.each do |spec_file|
134
- gemspec = self.class.load_specification spec_file.untaint
135
- add_spec gemspec if gemspec
136
- end
137
- end
138
-
139
- self
140
- end
141
-
142
- ##
143
- # Returns an Array specifications for the latest versions of each gem in
144
- # this index.
145
-
146
- def latest_specs
147
- result = Hash.new { |h,k| h[k] = [] }
148
- latest = {}
149
-
150
- sort.each do |_, spec|
151
- name = spec.name
152
- curr_ver = spec.version
153
- prev_ver = latest.key?(name) ? latest[name].version : nil
154
-
155
- next unless prev_ver.nil? or curr_ver >= prev_ver or
156
- latest[name].platform != Gem::Platform::RUBY
157
-
158
- if prev_ver.nil? or
159
- (curr_ver > prev_ver and spec.platform == Gem::Platform::RUBY) then
160
- result[name].clear
161
- latest[name] = spec
162
- end
163
-
164
- if spec.platform != Gem::Platform::RUBY then
165
- result[name].delete_if do |result_spec|
166
- result_spec.platform == spec.platform
167
- end
168
- end
169
-
170
- result[name] << spec
171
- end
172
-
173
- result.values.flatten
174
- end
175
-
176
- ##
177
- # Add a gem specification to the source index.
178
-
179
- def add_spec(gem_spec)
180
- @gems[gem_spec.full_name] = gem_spec
181
- end
182
-
183
- ##
184
- # Add gem specifications to the source index.
185
-
186
- def add_specs(*gem_specs)
187
- gem_specs.each do |spec|
188
- add_spec spec
189
- end
190
- end
191
-
192
- ##
193
- # Remove a gem specification named +full_name+.
194
-
195
- def remove_spec(full_name)
196
- @gems.delete(full_name)
197
- end
198
-
199
- ##
200
- # Iterate over the specifications in the source index.
201
-
202
- def each(&block) # :yields: gem.full_name, gem
203
- @gems.each(&block)
204
- end
205
-
206
- ##
207
- # The gem specification given a full gem spec name.
208
-
209
- def specification(full_name)
210
- @gems[full_name]
211
- end
212
-
213
- ##
214
- # The signature for the source index. Changes in the signature indicate a
215
- # change in the index.
216
-
217
- def index_signature
218
- require 'rubygems/digest/sha2'
219
-
220
- Gem::SHA256.new.hexdigest(@gems.keys.sort.join(',')).to_s
221
- end
222
-
223
- ##
224
- # The signature for the given gem specification.
225
-
226
- def gem_signature(gem_full_name)
227
- require 'rubygems/digest/sha2'
228
-
229
- Gem::SHA256.new.hexdigest(@gems[gem_full_name].to_yaml).to_s
230
- end
231
-
232
- def size
233
- @gems.size
234
- end
235
- alias length size
236
-
237
- ##
238
- # Find a gem by an exact match on the short name.
239
-
240
- def find_name(gem_name, version_requirement = Gem::Requirement.default)
241
- dep = Gem::Dependency.new(/^#{gem_name}$/, version_requirement)
242
- search dep
243
- end
244
-
245
- ##
246
- # Search for a gem by Gem::Dependency +gem_pattern+. If +only_platform+
247
- # is true, only gems matching Gem::Platform.local will be returned. An
248
- # Array of matching Gem::Specification objects is returned.
249
- #
250
- # For backwards compatibility, a String or Regexp pattern may be passed as
251
- # +gem_pattern+, and a Gem::Requirement for +platform_only+. This
252
- # behavior is deprecated and will be removed.
253
-
254
- def search(gem_pattern, platform_only = false)
255
- version_requirement = nil
256
- only_platform = false
257
-
258
- # TODO - Remove support and warning for legacy arguments after 2008/11
259
- unless Gem::Dependency === gem_pattern
260
- warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated"
261
- end
262
-
263
- case gem_pattern
264
- when Regexp then
265
- version_requirement = platform_only || Gem::Requirement.default
266
- when Gem::Dependency then
267
- only_platform = platform_only
268
- version_requirement = gem_pattern.version_requirements
269
- gem_pattern = if Regexp === gem_pattern.name then
270
- gem_pattern.name
271
- elsif gem_pattern.name.empty? then
272
- //
273
- else
274
- /^#{Regexp.escape gem_pattern.name}$/
275
- end
276
- else
277
- version_requirement = platform_only || Gem::Requirement.default
278
- gem_pattern = /#{gem_pattern}/i
279
- end
280
-
281
- unless Gem::Requirement === version_requirement then
282
- version_requirement = Gem::Requirement.create version_requirement
283
- end
284
-
285
- specs = @gems.values.select do |spec|
286
- spec.name =~ gem_pattern and
287
- version_requirement.satisfied_by? spec.version
288
- end
289
-
290
- if only_platform then
291
- specs = specs.select do |spec|
292
- Gem::Platform.match spec.platform
293
- end
294
- end
295
-
296
- specs.sort_by { |s| s.sort_obj }
297
- end
298
-
299
- ##
300
- # Replaces the gems in the source index from specifications in the
301
- # directories this source index was created from. Raises an exception if
302
- # this source index wasn't created from a directory (via from_gems_in or
303
- # from_installed_gems, or having spec_dirs set).
304
-
305
- def refresh!
306
- raise 'source index not created from disk' if @spec_dirs.nil?
307
- load_gems_in(*@spec_dirs)
308
- end
309
-
310
- ##
311
- # Returns an Array of Gem::Specifications that are not up to date.
312
-
313
- def outdated
314
- outdateds = []
315
-
316
- latest_specs.each do |local|
317
- dependency = Gem::Dependency.new local.name, ">= #{local.version}"
318
-
319
- begin
320
- fetcher = Gem::SpecFetcher.fetcher
321
- remotes = fetcher.find_matching dependency
322
- remotes = remotes.map { |(name, version,_),_| version }
323
- rescue Gem::RemoteFetcher::FetchError => e
324
- raise unless fetcher.warn_legacy e do
325
- require 'rubygems/source_info_cache'
326
-
327
- specs = Gem::SourceInfoCache.search_with_source dependency, true
328
-
329
- remotes = specs.map { |spec,| spec.version }
330
- end
331
- end
332
-
333
- latest = remotes.sort.last
334
-
335
- outdateds << local.name if latest and local.version < latest
336
- end
337
-
338
- outdateds
339
- end
340
-
341
- ##
342
- # Updates this SourceIndex from +source_uri+. If +all+ is false, only the
343
- # latest gems are fetched.
344
-
345
- def update(source_uri, all)
346
- source_uri = URI.parse source_uri unless URI::Generic === source_uri
347
- source_uri.path += '/' unless source_uri.path =~ /\/$/
348
-
349
- use_incremental = false
350
-
351
- begin
352
- gem_names = fetch_quick_index source_uri, all
353
- remove_extra gem_names
354
- missing_gems = find_missing gem_names
355
-
356
- return false if missing_gems.size.zero?
357
-
358
- say "Missing metadata for #{missing_gems.size} gems" if
359
- missing_gems.size > 0 and Gem.configuration.really_verbose
360
-
361
- use_incremental = missing_gems.size <= Gem.configuration.bulk_threshold
362
- rescue Gem::OperationNotSupportedError => ex
363
- alert_error "Falling back to bulk fetch: #{ex.message}" if
364
- Gem.configuration.really_verbose
365
- use_incremental = false
366
- end
367
-
368
- if use_incremental then
369
- update_with_missing(source_uri, missing_gems)
370
- else
371
- new_index = fetch_bulk_index(source_uri)
372
- @gems.replace(new_index.gems)
373
- end
374
-
375
- true
376
- end
377
-
378
- def ==(other) # :nodoc:
379
- self.class === other and @gems == other.gems
380
- end
381
-
382
- def dump
383
- Marshal.dump(self)
384
- end
385
-
386
- private
387
-
388
- def fetcher
389
- require 'rubygems/remote_fetcher'
390
-
391
- Gem::RemoteFetcher.fetcher
392
- end
393
-
394
- def fetch_index_from(source_uri)
395
- @fetch_error = nil
396
-
397
- indexes = %W[
398
- Marshal.#{Gem.marshal_version}.Z
399
- Marshal.#{Gem.marshal_version}
400
- yaml.Z
401
- yaml
402
- ]
403
-
404
- indexes.each do |name|
405
- spec_data = nil
406
- index = source_uri + name
407
- begin
408
- spec_data = fetcher.fetch_path index
409
- spec_data = unzip(spec_data) if name =~ /\.Z$/
410
-
411
- if name =~ /Marshal/ then
412
- return Marshal.load(spec_data)
413
- else
414
- return YAML.load(spec_data)
415
- end
416
- rescue => e
417
- if Gem.configuration.really_verbose then
418
- alert_error "Unable to fetch #{name}: #{e.message}"
419
- end
420
-
421
- @fetch_error = e
422
- end
423
- end
424
-
425
- nil
426
- end
427
-
428
- def fetch_bulk_index(source_uri)
429
- say "Bulk updating Gem source index for: #{source_uri}" if
430
- Gem.configuration.verbose
431
-
432
- index = fetch_index_from(source_uri)
433
- if index.nil? then
434
- raise Gem::RemoteSourceException,
435
- "Error fetching remote gem cache: #{@fetch_error}"
436
- end
437
- @fetch_error = nil
438
- index
439
- end
440
-
441
- ##
442
- # Get the quick index needed for incremental updates.
443
-
444
- def fetch_quick_index(source_uri, all)
445
- index = all ? 'index' : 'latest_index'
446
-
447
- zipped_index = fetcher.fetch_path source_uri + "quick/#{index}.rz"
448
-
449
- unzip(zipped_index).split("\n")
450
- rescue ::Exception => e
451
- unless all then
452
- say "Latest index not found, using quick index" if
453
- Gem.configuration.really_verbose
454
-
455
- fetch_quick_index source_uri, true
456
- else
457
- raise Gem::OperationNotSupportedError,
458
- "No quick index found: #{e.message}"
459
- end
460
- end
461
-
462
- ##
463
- # Make a list of full names for all the missing gemspecs.
464
-
465
- def find_missing(spec_names)
466
- unless defined? @originals then
467
- @originals = {}
468
- each do |full_name, spec|
469
- @originals[spec.original_name] = spec
470
- end
471
- end
472
-
473
- spec_names.find_all { |full_name|
474
- @originals[full_name].nil?
475
- }
476
- end
477
-
478
- def remove_extra(spec_names)
479
- dictionary = spec_names.inject({}) { |h, k| h[k] = true; h }
480
- each do |name, spec|
481
- remove_spec name unless dictionary.include? spec.original_name
482
- end
483
- end
484
-
485
- ##
486
- # Unzip the given string.
487
-
488
- def unzip(string)
489
- require 'zlib'
490
- Gem.inflate string
491
- end
492
-
493
- ##
494
- # Tries to fetch Marshal representation first, then YAML
495
-
496
- def fetch_single_spec(source_uri, spec_name)
497
- @fetch_error = nil
498
-
499
- begin
500
- marshal_uri = source_uri + "quick/Marshal.#{Gem.marshal_version}/#{spec_name}.gemspec.rz"
501
- zipped = fetcher.fetch_path marshal_uri
502
- return Marshal.load(unzip(zipped))
503
- rescue => ex
504
- @fetch_error = ex
505
-
506
- if Gem.configuration.really_verbose then
507
- say "unable to fetch marshal gemspec #{marshal_uri}: #{ex.class} - #{ex}"
508
- end
509
- end
510
-
511
- begin
512
- yaml_uri = source_uri + "quick/#{spec_name}.gemspec.rz"
513
- zipped = fetcher.fetch_path yaml_uri
514
- return YAML.load(unzip(zipped))
515
- rescue => ex
516
- @fetch_error = ex
517
- if Gem.configuration.really_verbose then
518
- say "unable to fetch YAML gemspec #{yaml_uri}: #{ex.class} - #{ex}"
519
- end
520
- end
521
-
522
- nil
523
- end
524
-
525
- ##
526
- # Update the cached source index with the missing names.
527
-
528
- def update_with_missing(source_uri, missing_names)
529
- progress = ui.progress_reporter(missing_names.size,
530
- "Updating metadata for #{missing_names.size} gems from #{source_uri}")
531
- missing_names.each do |spec_name|
532
- gemspec = fetch_single_spec(source_uri, spec_name)
533
- if gemspec.nil? then
534
- ui.say "Failed to download spec #{spec_name} from #{source_uri}:\n" \
535
- "\t#{@fetch_error.message}"
536
- else
537
- add_spec gemspec
538
- progress.updated spec_name
539
- end
540
- @fetch_error = nil
541
- end
542
- progress.done
543
- progress.count
544
- end
545
-
546
- end
547
-
548
- module Gem
549
-
550
- # :stopdoc:
551
-
552
- # Cache is an alias for SourceIndex to allow older YAMLized source index
553
- # objects to load properly.
554
- Cache = SourceIndex
555
-
556
- # :startdoc:
557
-
558
- end
559
-
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'rubygems'
8
+ require 'rubygems/user_interaction'
9
+ require 'rubygems/specification'
10
+ module Gem
11
+ autoload(:SpecFetcher, 'rubygems/spec_fetcher')
12
+ end
13
+
14
+ ##
15
+ # The SourceIndex object indexes all the gems available from a
16
+ # particular source (e.g. a list of gem directories, or a remote
17
+ # source). A SourceIndex maps a gem full name to a gem
18
+ # specification.
19
+ #
20
+ # NOTE:: The class used to be named Cache, but that became
21
+ # confusing when cached source fetchers where introduced. The
22
+ # constant Gem::Cache is an alias for this class to allow old
23
+ # YAMLized source index objects to load properly.
24
+
25
+ class Gem::SourceIndex
26
+
27
+ include Enumerable
28
+
29
+ include Gem::UserInteraction
30
+
31
+ attr_reader :gems # :nodoc:
32
+
33
+ ##
34
+ # Directories to use to refresh this SourceIndex when calling refresh!
35
+
36
+ attr_accessor :spec_dirs
37
+
38
+ class << self
39
+ include Gem::UserInteraction
40
+
41
+ ##
42
+ # Factory method to construct a source index instance for a given
43
+ # path.
44
+ #
45
+ # deprecated::
46
+ # If supplied, from_installed_gems will act just like
47
+ # +from_gems_in+. This argument is deprecated and is provided
48
+ # just for backwards compatibility, and should not generally
49
+ # be used.
50
+ #
51
+ # return::
52
+ # SourceIndex instance
53
+
54
+ def from_installed_gems(*deprecated)
55
+ if deprecated.empty?
56
+ from_gems_in(*installed_spec_directories)
57
+ else
58
+ from_gems_in(*deprecated) # HACK warn
59
+ end
60
+ end
61
+
62
+ ##
63
+ # Returns a list of directories from Gem.path that contain specifications.
64
+
65
+ def installed_spec_directories
66
+ Gem.path.collect { |dir| File.join(dir, "specifications") }
67
+ end
68
+
69
+ ##
70
+ # Creates a new SourceIndex from the ruby format gem specifications in
71
+ # +spec_dirs+.
72
+
73
+ def from_gems_in(*spec_dirs)
74
+ source_index = new
75
+ source_index.spec_dirs = spec_dirs
76
+ source_index.refresh!
77
+ end
78
+
79
+ ##
80
+ # Loads a ruby-format specification from +file_name+ and returns the
81
+ # loaded spec.
82
+
83
+ def load_specification(file_name)
84
+ begin
85
+ spec_code = if RUBY_VERSION < '1.9' then
86
+ File.read file_name
87
+ else
88
+ File.read file_name, :encoding => 'UTF-8'
89
+ end.untaint
90
+
91
+ gemspec = eval spec_code, binding, file_name
92
+
93
+ if gemspec.is_a?(Gem::Specification)
94
+ gemspec.loaded_from = file_name
95
+ return gemspec
96
+ end
97
+ alert_warning "File '#{file_name}' does not evaluate to a gem specification"
98
+ rescue SignalException, SystemExit
99
+ raise
100
+ rescue SyntaxError => e
101
+ alert_warning e
102
+ alert_warning spec_code
103
+ rescue Exception => e
104
+ alert_warning "#{e.inspect}\n#{spec_code}"
105
+ alert_warning "Invalid .gemspec format in '#{file_name}'"
106
+ end
107
+ return nil
108
+ end
109
+
110
+ end
111
+
112
+ ##
113
+ # Constructs a source index instance from the provided
114
+ # specifications
115
+ #
116
+ # specifications::
117
+ # [Hash] hash of [Gem name, Gem::Specification] pairs
118
+
119
+ def initialize(specifications={})
120
+ @gems = specifications
121
+ @spec_dirs = nil
122
+ end
123
+
124
+ ##
125
+ # Reconstruct the source index from the specifications in +spec_dirs+.
126
+
127
+ def load_gems_in(*spec_dirs)
128
+ @gems.clear
129
+
130
+ spec_dirs.reverse_each do |spec_dir|
131
+ spec_files = Dir.glob File.join(spec_dir, '*.gemspec')
132
+
133
+ spec_files.each do |spec_file|
134
+ gemspec = self.class.load_specification spec_file.untaint
135
+ add_spec gemspec if gemspec
136
+ end
137
+ end
138
+
139
+ self
140
+ end
141
+
142
+ ##
143
+ # Returns an Array specifications for the latest versions of each gem in
144
+ # this index.
145
+
146
+ def latest_specs
147
+ result = Hash.new { |h,k| h[k] = [] }
148
+ latest = {}
149
+
150
+ sort.each do |_, spec|
151
+ name = spec.name
152
+ curr_ver = spec.version
153
+ prev_ver = latest.key?(name) ? latest[name].version : nil
154
+
155
+ next unless prev_ver.nil? or curr_ver >= prev_ver or
156
+ latest[name].platform != Gem::Platform::RUBY
157
+
158
+ if prev_ver.nil? or
159
+ (curr_ver > prev_ver and spec.platform == Gem::Platform::RUBY) then
160
+ result[name].clear
161
+ latest[name] = spec
162
+ end
163
+
164
+ if spec.platform != Gem::Platform::RUBY then
165
+ result[name].delete_if do |result_spec|
166
+ result_spec.platform == spec.platform
167
+ end
168
+ end
169
+
170
+ result[name] << spec
171
+ end
172
+
173
+ result.values.flatten
174
+ end
175
+
176
+ ##
177
+ # Add a gem specification to the source index.
178
+
179
+ def add_spec(gem_spec)
180
+ @gems[gem_spec.full_name] = gem_spec
181
+ end
182
+
183
+ ##
184
+ # Add gem specifications to the source index.
185
+
186
+ def add_specs(*gem_specs)
187
+ gem_specs.each do |spec|
188
+ add_spec spec
189
+ end
190
+ end
191
+
192
+ ##
193
+ # Remove a gem specification named +full_name+.
194
+
195
+ def remove_spec(full_name)
196
+ @gems.delete(full_name)
197
+ end
198
+
199
+ ##
200
+ # Iterate over the specifications in the source index.
201
+
202
+ def each(&block) # :yields: gem.full_name, gem
203
+ @gems.each(&block)
204
+ end
205
+
206
+ ##
207
+ # The gem specification given a full gem spec name.
208
+
209
+ def specification(full_name)
210
+ @gems[full_name]
211
+ end
212
+
213
+ ##
214
+ # The signature for the source index. Changes in the signature indicate a
215
+ # change in the index.
216
+
217
+ def index_signature
218
+ require 'rubygems/digest/sha2'
219
+
220
+ Gem::SHA256.new.hexdigest(@gems.keys.sort.join(',')).to_s
221
+ end
222
+
223
+ ##
224
+ # The signature for the given gem specification.
225
+
226
+ def gem_signature(gem_full_name)
227
+ require 'rubygems/digest/sha2'
228
+
229
+ Gem::SHA256.new.hexdigest(@gems[gem_full_name].to_yaml).to_s
230
+ end
231
+
232
+ def size
233
+ @gems.size
234
+ end
235
+ alias length size
236
+
237
+ ##
238
+ # Find a gem by an exact match on the short name.
239
+
240
+ def find_name(gem_name, version_requirement = Gem::Requirement.default)
241
+ dep = Gem::Dependency.new(/^#{gem_name}$/, version_requirement)
242
+ search dep
243
+ end
244
+
245
+ ##
246
+ # Search for a gem by Gem::Dependency +gem_pattern+. If +only_platform+
247
+ # is true, only gems matching Gem::Platform.local will be returned. An
248
+ # Array of matching Gem::Specification objects is returned.
249
+ #
250
+ # For backwards compatibility, a String or Regexp pattern may be passed as
251
+ # +gem_pattern+, and a Gem::Requirement for +platform_only+. This
252
+ # behavior is deprecated and will be removed.
253
+
254
+ def search(gem_pattern, platform_only = false)
255
+ version_requirement = nil
256
+ only_platform = false
257
+
258
+ # TODO - Remove support and warning for legacy arguments after 2008/11
259
+ unless Gem::Dependency === gem_pattern
260
+ warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated"
261
+ end
262
+
263
+ case gem_pattern
264
+ when Regexp then
265
+ version_requirement = platform_only || Gem::Requirement.default
266
+ when Gem::Dependency then
267
+ only_platform = platform_only
268
+ version_requirement = gem_pattern.version_requirements
269
+ gem_pattern = if Regexp === gem_pattern.name then
270
+ gem_pattern.name
271
+ elsif gem_pattern.name.empty? then
272
+ //
273
+ else
274
+ /^#{Regexp.escape gem_pattern.name}$/
275
+ end
276
+ else
277
+ version_requirement = platform_only || Gem::Requirement.default
278
+ gem_pattern = /#{gem_pattern}/i
279
+ end
280
+
281
+ unless Gem::Requirement === version_requirement then
282
+ version_requirement = Gem::Requirement.create version_requirement
283
+ end
284
+
285
+ specs = @gems.values.select do |spec|
286
+ spec.name =~ gem_pattern and
287
+ version_requirement.satisfied_by? spec.version
288
+ end
289
+
290
+ if only_platform then
291
+ specs = specs.select do |spec|
292
+ Gem::Platform.match spec.platform
293
+ end
294
+ end
295
+
296
+ specs.sort_by { |s| s.sort_obj }
297
+ end
298
+
299
+ ##
300
+ # Replaces the gems in the source index from specifications in the
301
+ # directories this source index was created from. Raises an exception if
302
+ # this source index wasn't created from a directory (via from_gems_in or
303
+ # from_installed_gems, or having spec_dirs set).
304
+
305
+ def refresh!
306
+ raise 'source index not created from disk' if @spec_dirs.nil?
307
+ load_gems_in(*@spec_dirs)
308
+ end
309
+
310
+ ##
311
+ # Returns an Array of Gem::Specifications that are not up to date.
312
+
313
+ def outdated
314
+ outdateds = []
315
+
316
+ latest_specs.each do |local|
317
+ dependency = Gem::Dependency.new local.name, ">= #{local.version}"
318
+
319
+ begin
320
+ fetcher = Gem::SpecFetcher.fetcher
321
+ remotes = fetcher.find_matching dependency
322
+ remotes = remotes.map { |(name, version,_),_| version }
323
+ rescue Gem::RemoteFetcher::FetchError => e
324
+ raise unless fetcher.warn_legacy e do
325
+ require 'rubygems/source_info_cache'
326
+
327
+ specs = Gem::SourceInfoCache.search_with_source dependency, true
328
+
329
+ remotes = specs.map { |spec,| spec.version }
330
+ end
331
+ end
332
+
333
+ latest = remotes.sort.last
334
+
335
+ outdateds << local.name if latest and local.version < latest
336
+ end
337
+
338
+ outdateds
339
+ end
340
+
341
+ ##
342
+ # Updates this SourceIndex from +source_uri+. If +all+ is false, only the
343
+ # latest gems are fetched.
344
+
345
+ def update(source_uri, all)
346
+ source_uri = URI.parse source_uri unless URI::Generic === source_uri
347
+ source_uri.path += '/' unless source_uri.path =~ /\/$/
348
+
349
+ use_incremental = false
350
+
351
+ begin
352
+ gem_names = fetch_quick_index source_uri, all
353
+ remove_extra gem_names
354
+ missing_gems = find_missing gem_names
355
+
356
+ return false if missing_gems.size.zero?
357
+
358
+ say "Missing metadata for #{missing_gems.size} gems" if
359
+ missing_gems.size > 0 and Gem.configuration.really_verbose
360
+
361
+ use_incremental = missing_gems.size <= Gem.configuration.bulk_threshold
362
+ rescue Gem::OperationNotSupportedError => ex
363
+ alert_error "Falling back to bulk fetch: #{ex.message}" if
364
+ Gem.configuration.really_verbose
365
+ use_incremental = false
366
+ end
367
+
368
+ if use_incremental then
369
+ update_with_missing(source_uri, missing_gems)
370
+ else
371
+ new_index = fetch_bulk_index(source_uri)
372
+ @gems.replace(new_index.gems)
373
+ end
374
+
375
+ true
376
+ end
377
+
378
+ def ==(other) # :nodoc:
379
+ self.class === other and @gems == other.gems
380
+ end
381
+
382
+ def dump
383
+ Marshal.dump(self)
384
+ end
385
+
386
+ private
387
+
388
+ def fetcher
389
+ require 'rubygems/remote_fetcher'
390
+
391
+ Gem::RemoteFetcher.fetcher
392
+ end
393
+
394
+ def fetch_index_from(source_uri)
395
+ @fetch_error = nil
396
+
397
+ indexes = %W[
398
+ Marshal.#{Gem.marshal_version}.Z
399
+ Marshal.#{Gem.marshal_version}
400
+ yaml.Z
401
+ yaml
402
+ ]
403
+
404
+ indexes.each do |name|
405
+ spec_data = nil
406
+ index = source_uri + name
407
+ begin
408
+ spec_data = fetcher.fetch_path index
409
+ spec_data = unzip(spec_data) if name =~ /\.Z$/
410
+
411
+ if name =~ /Marshal/ then
412
+ return Marshal.load(spec_data)
413
+ else
414
+ return YAML.load(spec_data)
415
+ end
416
+ rescue => e
417
+ if Gem.configuration.really_verbose then
418
+ alert_error "Unable to fetch #{name}: #{e.message}"
419
+ end
420
+
421
+ @fetch_error = e
422
+ end
423
+ end
424
+
425
+ nil
426
+ end
427
+
428
+ def fetch_bulk_index(source_uri)
429
+ say "Bulk updating Gem source index for: #{source_uri}" if
430
+ Gem.configuration.verbose
431
+
432
+ index = fetch_index_from(source_uri)
433
+ if index.nil? then
434
+ raise Gem::RemoteSourceException,
435
+ "Error fetching remote gem cache: #{@fetch_error}"
436
+ end
437
+ @fetch_error = nil
438
+ index
439
+ end
440
+
441
+ ##
442
+ # Get the quick index needed for incremental updates.
443
+
444
+ def fetch_quick_index(source_uri, all)
445
+ index = all ? 'index' : 'latest_index'
446
+
447
+ zipped_index = fetcher.fetch_path source_uri + "quick/#{index}.rz"
448
+
449
+ unzip(zipped_index).split("\n")
450
+ rescue ::Exception => e
451
+ unless all then
452
+ say "Latest index not found, using quick index" if
453
+ Gem.configuration.really_verbose
454
+
455
+ fetch_quick_index source_uri, true
456
+ else
457
+ raise Gem::OperationNotSupportedError,
458
+ "No quick index found: #{e.message}"
459
+ end
460
+ end
461
+
462
+ ##
463
+ # Make a list of full names for all the missing gemspecs.
464
+
465
+ def find_missing(spec_names)
466
+ unless defined? @originals then
467
+ @originals = {}
468
+ each do |full_name, spec|
469
+ @originals[spec.original_name] = spec
470
+ end
471
+ end
472
+
473
+ spec_names.find_all { |full_name|
474
+ @originals[full_name].nil?
475
+ }
476
+ end
477
+
478
+ def remove_extra(spec_names)
479
+ dictionary = spec_names.inject({}) { |h, k| h[k] = true; h }
480
+ each do |name, spec|
481
+ remove_spec name unless dictionary.include? spec.original_name
482
+ end
483
+ end
484
+
485
+ ##
486
+ # Unzip the given string.
487
+
488
+ def unzip(string)
489
+ require 'zlib'
490
+ Gem.inflate string
491
+ end
492
+
493
+ ##
494
+ # Tries to fetch Marshal representation first, then YAML
495
+
496
+ def fetch_single_spec(source_uri, spec_name)
497
+ @fetch_error = nil
498
+
499
+ begin
500
+ marshal_uri = source_uri + "quick/Marshal.#{Gem.marshal_version}/#{spec_name}.gemspec.rz"
501
+ zipped = fetcher.fetch_path marshal_uri
502
+ return Marshal.load(unzip(zipped))
503
+ rescue => ex
504
+ @fetch_error = ex
505
+
506
+ if Gem.configuration.really_verbose then
507
+ say "unable to fetch marshal gemspec #{marshal_uri}: #{ex.class} - #{ex}"
508
+ end
509
+ end
510
+
511
+ begin
512
+ yaml_uri = source_uri + "quick/#{spec_name}.gemspec.rz"
513
+ zipped = fetcher.fetch_path yaml_uri
514
+ return YAML.load(unzip(zipped))
515
+ rescue => ex
516
+ @fetch_error = ex
517
+ if Gem.configuration.really_verbose then
518
+ say "unable to fetch YAML gemspec #{yaml_uri}: #{ex.class} - #{ex}"
519
+ end
520
+ end
521
+
522
+ nil
523
+ end
524
+
525
+ ##
526
+ # Update the cached source index with the missing names.
527
+
528
+ def update_with_missing(source_uri, missing_names)
529
+ progress = ui.progress_reporter(missing_names.size,
530
+ "Updating metadata for #{missing_names.size} gems from #{source_uri}")
531
+ missing_names.each do |spec_name|
532
+ gemspec = fetch_single_spec(source_uri, spec_name)
533
+ if gemspec.nil? then
534
+ ui.say "Failed to download spec #{spec_name} from #{source_uri}:\n" \
535
+ "\t#{@fetch_error.message}"
536
+ else
537
+ add_spec gemspec
538
+ progress.updated spec_name
539
+ end
540
+ @fetch_error = nil
541
+ end
542
+ progress.done
543
+ progress.count
544
+ end
545
+
546
+ end
547
+
548
+ module Gem
549
+
550
+ # :stopdoc:
551
+
552
+ # Cache is an alias for SourceIndex to allow older YAMLized source index
553
+ # objects to load properly.
554
+ Cache = SourceIndex
555
+
556
+ # :startdoc:
557
+
558
+ end
559
+