shoesgem 0.1424.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (808) hide show
  1. data/LICENSE +30 -0
  2. data/README.rdoc +31 -0
  3. data/lib/shoes.rb +4 -0
  4. data/shoes/CHANGELOG.txt +21 -0
  5. data/shoes/COPYING.txt +30 -0
  6. data/shoes/README.txt +117 -0
  7. data/shoes/VERSION.txt +1 -0
  8. data/shoes/fonts/Coolvetica.ttf +0 -0
  9. data/shoes/fonts/Lacuna.ttf +0 -0
  10. data/shoes/freetype6.dll +0 -0
  11. data/shoes/lib/shoes/cache.rb +54 -0
  12. data/shoes/lib/shoes/data.rb +39 -0
  13. data/shoes/lib/shoes/help.rb +421 -0
  14. data/shoes/lib/shoes/image.rb +25 -0
  15. data/shoes/lib/shoes/inspect.rb +128 -0
  16. data/shoes/lib/shoes/log.rb +48 -0
  17. data/shoes/lib/shoes/minitar.rb +986 -0
  18. data/shoes/lib/shoes/override.rb +38 -0
  19. data/shoes/lib/shoes/pack.rb +503 -0
  20. data/shoes/lib/shoes/search.rb +46 -0
  21. data/shoes/lib/shoes/setup.rb +329 -0
  22. data/shoes/lib/shoes/shy.rb +131 -0
  23. data/shoes/lib/shoes/shybuilder.rb +44 -0
  24. data/shoes/lib/shoes.rb +522 -0
  25. data/shoes/libcairo-2.dll +0 -0
  26. data/shoes/libeay32.dll +0 -0
  27. data/shoes/libexpat-1.dll +0 -0
  28. data/shoes/libfontconfig-1.dll +0 -0
  29. data/shoes/libgio-2.0-0.dll +0 -0
  30. data/shoes/libglib-2.0-0.dll +0 -0
  31. data/shoes/libgmodule-2.0-0.dll +0 -0
  32. data/shoes/libgobject-2.0-0.dll +0 -0
  33. data/shoes/libgthread-2.0-0.dll +0 -0
  34. data/shoes/libiconv2.dll +0 -0
  35. data/shoes/libjpeg-8.dll +0 -0
  36. data/shoes/libpango-1.0-0.dll +0 -0
  37. data/shoes/libpangocairo-1.0-0.dll +0 -0
  38. data/shoes/libpangoft2-1.0-0.dll +0 -0
  39. data/shoes/libpangowin32-1.0-0.dll +0 -0
  40. data/shoes/libpng14-14.dll +0 -0
  41. data/shoes/libportaudio-2.dll +0 -0
  42. data/shoes/libshoes.dll +0 -0
  43. data/shoes/libssl32.dll +0 -0
  44. data/shoes/libungif4.dll +0 -0
  45. data/shoes/msvcrt-ruby191.dll +0 -0
  46. data/shoes/readline5.dll +0 -0
  47. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  48. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -0
  49. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -0
  50. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -0
  51. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -0
  52. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -0
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -0
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -0
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -0
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -0
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -0
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  61. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -0
  62. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -0
  63. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -0
  64. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  65. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  66. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -0
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -0
  69. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -0
  70. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -0
  71. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -0
  72. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -0
  73. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -0
  74. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -0
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -0
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -0
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -0
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -0
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -0
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -0
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -0
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  83. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -0
  84. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -0
  85. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -0
  86. data/shoes/ruby/lib/English.rb +155 -0
  87. data/shoes/ruby/lib/Win32API.rb +28 -0
  88. data/shoes/ruby/lib/abbrev.rb +103 -0
  89. data/shoes/ruby/lib/base64.rb +91 -0
  90. data/shoes/ruby/lib/benchmark.rb +573 -0
  91. data/shoes/ruby/lib/bigdecimal/jacobian.rb +85 -0
  92. data/shoes/ruby/lib/bigdecimal/ludcmp.rb +86 -0
  93. data/shoes/ruby/lib/bigdecimal/math.rb +237 -0
  94. data/shoes/ruby/lib/bigdecimal/newton.rb +77 -0
  95. data/shoes/ruby/lib/bigdecimal/util.rb +53 -0
  96. data/shoes/ruby/lib/cgi/cookie.rb +144 -0
  97. data/shoes/ruby/lib/cgi/core.rb +786 -0
  98. data/shoes/ruby/lib/cgi/html.rb +1021 -0
  99. data/shoes/ruby/lib/cgi/session/pstore.rb +111 -0
  100. data/shoes/ruby/lib/cgi/session.rb +537 -0
  101. data/shoes/ruby/lib/cgi/util.rb +181 -0
  102. data/shoes/ruby/lib/cgi.rb +274 -0
  103. data/shoes/ruby/lib/cmath.rb +233 -0
  104. data/shoes/ruby/lib/complex.rb +24 -0
  105. data/shoes/ruby/lib/csv.rb +2320 -0
  106. data/shoes/ruby/lib/date/format.rb +1313 -0
  107. data/shoes/ruby/lib/date.rb +1834 -0
  108. data/shoes/ruby/lib/debug.rb +907 -0
  109. data/shoes/ruby/lib/delegate.rb +311 -0
  110. data/shoes/ruby/lib/digest/hmac.rb +274 -0
  111. data/shoes/ruby/lib/digest/sha2.rb +74 -0
  112. data/shoes/ruby/lib/digest.rb +50 -0
  113. data/shoes/ruby/lib/dl/callback.rb +69 -0
  114. data/shoes/ruby/lib/dl/cparser.rb +109 -0
  115. data/shoes/ruby/lib/dl/func.rb +153 -0
  116. data/shoes/ruby/lib/dl/import.rb +215 -0
  117. data/shoes/ruby/lib/dl/pack.rb +173 -0
  118. data/shoes/ruby/lib/dl/stack.rb +146 -0
  119. data/shoes/ruby/lib/dl/struct.rb +213 -0
  120. data/shoes/ruby/lib/dl/types.rb +40 -0
  121. data/shoes/ruby/lib/dl/value.rb +112 -0
  122. data/shoes/ruby/lib/drb/acl.rb +146 -0
  123. data/shoes/ruby/lib/drb/drb.rb +1778 -0
  124. data/shoes/ruby/lib/drb/eq.rb +16 -0
  125. data/shoes/ruby/lib/drb/extserv.rb +71 -0
  126. data/shoes/ruby/lib/drb/extservm.rb +85 -0
  127. data/shoes/ruby/lib/drb/gw.rb +122 -0
  128. data/shoes/ruby/lib/drb/invokemethod.rb +34 -0
  129. data/shoes/ruby/lib/drb/observer.rb +22 -0
  130. data/shoes/ruby/lib/drb/ssl.rb +190 -0
  131. data/shoes/ruby/lib/drb/timeridconv.rb +91 -0
  132. data/shoes/ruby/lib/drb/unix.rb +108 -0
  133. data/shoes/ruby/lib/drb.rb +2 -0
  134. data/shoes/ruby/lib/e2mmap.rb +172 -0
  135. data/shoes/ruby/lib/erb.rb +902 -0
  136. data/shoes/ruby/lib/fileutils.rb +1592 -0
  137. data/shoes/ruby/lib/find.rb +81 -0
  138. data/shoes/ruby/lib/forwardable.rb +270 -0
  139. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -0
  140. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -0
  141. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -0
  142. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -0
  143. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -0
  144. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -0
  145. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -0
  146. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -0
  147. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -0
  148. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -0
  149. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -0
  150. data/shoes/ruby/lib/ftsearch/util.rb +21 -0
  151. data/shoes/ruby/lib/getoptlong.rb +610 -0
  152. data/shoes/ruby/lib/gserver.rb +253 -0
  153. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  178. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  187. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  188. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  189. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  190. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  191. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  192. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  193. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  194. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  195. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  196. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  197. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  198. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  199. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  200. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  201. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  202. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  203. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  204. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  205. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  206. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  207. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  208. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  209. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  210. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  211. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  212. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  213. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  214. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  215. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  216. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  217. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  218. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  219. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  220. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  221. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  222. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  223. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  224. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  225. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  226. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +196 -0
  227. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  228. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  229. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  230. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  231. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  232. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  233. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  234. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  235. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  236. data/shoes/ruby/lib/io/nonblock.rb +23 -0
  237. data/shoes/ruby/lib/ipaddr.rb +813 -0
  238. data/shoes/ruby/lib/irb/cmd/chws.rb +32 -0
  239. data/shoes/ruby/lib/irb/cmd/fork.rb +38 -0
  240. data/shoes/ruby/lib/irb/cmd/help.rb +36 -0
  241. data/shoes/ruby/lib/irb/cmd/load.rb +66 -0
  242. data/shoes/ruby/lib/irb/cmd/nop.rb +38 -0
  243. data/shoes/ruby/lib/irb/cmd/pushws.rb +38 -0
  244. data/shoes/ruby/lib/irb/cmd/subirb.rb +42 -0
  245. data/shoes/ruby/lib/irb/completion.rb +207 -0
  246. data/shoes/ruby/lib/irb/context.rb +255 -0
  247. data/shoes/ruby/lib/irb/ext/change-ws.rb +61 -0
  248. data/shoes/ruby/lib/irb/ext/history.rb +109 -0
  249. data/shoes/ruby/lib/irb/ext/loader.rb +119 -0
  250. data/shoes/ruby/lib/irb/ext/math-mode.rb +36 -0
  251. data/shoes/ruby/lib/irb/ext/multi-irb.rb +240 -0
  252. data/shoes/ruby/lib/irb/ext/save-history.rb +100 -0
  253. data/shoes/ruby/lib/irb/ext/tracer.rb +60 -0
  254. data/shoes/ruby/lib/irb/ext/use-loader.rb +64 -0
  255. data/shoes/ruby/lib/irb/ext/workspaces.rb +55 -0
  256. data/shoes/ruby/lib/irb/extend-command.rb +272 -0
  257. data/shoes/ruby/lib/irb/frame.rb +66 -0
  258. data/shoes/ruby/lib/irb/help.rb +35 -0
  259. data/shoes/ruby/lib/irb/init.rb +288 -0
  260. data/shoes/ruby/lib/irb/input-method.rb +142 -0
  261. data/shoes/ruby/lib/irb/lc/error.rb +29 -0
  262. data/shoes/ruby/lib/irb/lc/help-message +38 -0
  263. data/shoes/ruby/lib/irb/lc/ja/encoding_aliases.rb +8 -0
  264. data/shoes/ruby/lib/irb/lc/ja/error.rb +27 -0
  265. data/shoes/ruby/lib/irb/lc/ja/help-message +39 -0
  266. data/shoes/ruby/lib/irb/locale.rb +195 -0
  267. data/shoes/ruby/lib/irb/magic-file.rb +36 -0
  268. data/shoes/ruby/lib/irb/notifier.rb +144 -0
  269. data/shoes/ruby/lib/irb/output-method.rb +69 -0
  270. data/shoes/ruby/lib/irb/ruby-lex.rb +1188 -0
  271. data/shoes/ruby/lib/irb/ruby-token.rb +270 -0
  272. data/shoes/ruby/lib/irb/slex.rb +282 -0
  273. data/shoes/ruby/lib/irb/src_encoding.rb +4 -0
  274. data/shoes/ruby/lib/irb/version.rb +15 -0
  275. data/shoes/ruby/lib/irb/workspace.rb +108 -0
  276. data/shoes/ruby/lib/irb/ws-for-case-2.rb +14 -0
  277. data/shoes/ruby/lib/irb/xmp.rb +97 -0
  278. data/shoes/ruby/lib/irb.rb +354 -0
  279. data/shoes/ruby/lib/json/add/core.rb +135 -0
  280. data/shoes/ruby/lib/json/add/rails.rb +58 -0
  281. data/shoes/ruby/lib/json/common.rb +354 -0
  282. data/shoes/ruby/lib/json/editor.rb +1371 -0
  283. data/shoes/ruby/lib/json/ext.rb +15 -0
  284. data/shoes/ruby/lib/json/version.rb +9 -0
  285. data/shoes/ruby/lib/json.rb +297 -0
  286. data/shoes/ruby/lib/kconv.rb +282 -0
  287. data/shoes/ruby/lib/logger.rb +732 -0
  288. data/shoes/ruby/lib/mathn.rb +206 -0
  289. data/shoes/ruby/lib/matrix.rb +1381 -0
  290. data/shoes/ruby/lib/minitest/autorun.rb +9 -0
  291. data/shoes/ruby/lib/minitest/mock.rb +37 -0
  292. data/shoes/ruby/lib/minitest/spec.rb +89 -0
  293. data/shoes/ruby/lib/minitest/unit.rb +497 -0
  294. data/shoes/ruby/lib/mkmf.rb +1958 -0
  295. data/shoes/ruby/lib/monitor.rb +265 -0
  296. data/shoes/ruby/lib/mutex_m.rb +91 -0
  297. data/shoes/ruby/lib/net/ftp.rb +981 -0
  298. data/shoes/ruby/lib/net/http.rb +2399 -0
  299. data/shoes/ruby/lib/net/https.rb +136 -0
  300. data/shoes/ruby/lib/net/imap.rb +3500 -0
  301. data/shoes/ruby/lib/net/pop.rb +1000 -0
  302. data/shoes/ruby/lib/net/protocol.rb +382 -0
  303. data/shoes/ruby/lib/net/smtp.rb +1014 -0
  304. data/shoes/ruby/lib/net/telnet.rb +759 -0
  305. data/shoes/ruby/lib/observer.rb +193 -0
  306. data/shoes/ruby/lib/open-uri.rb +832 -0
  307. data/shoes/ruby/lib/open3.rb +98 -0
  308. data/shoes/ruby/lib/openssl/bn.rb +35 -0
  309. data/shoes/ruby/lib/openssl/buffering.rb +242 -0
  310. data/shoes/ruby/lib/openssl/cipher.rb +65 -0
  311. data/shoes/ruby/lib/openssl/digest.rb +61 -0
  312. data/shoes/ruby/lib/openssl/ssl.rb +178 -0
  313. data/shoes/ruby/lib/openssl/x509.rb +155 -0
  314. data/shoes/ruby/lib/openssl.rb +24 -0
  315. data/shoes/ruby/lib/optparse/date.rb +17 -0
  316. data/shoes/ruby/lib/optparse/shellwords.rb +6 -0
  317. data/shoes/ruby/lib/optparse/time.rb +10 -0
  318. data/shoes/ruby/lib/optparse/uri.rb +6 -0
  319. data/shoes/ruby/lib/optparse/version.rb +70 -0
  320. data/shoes/ruby/lib/optparse.rb +1810 -0
  321. data/shoes/ruby/lib/ostruct.rb +145 -0
  322. data/shoes/ruby/lib/pathname.rb +1099 -0
  323. data/shoes/ruby/lib/pp.rb +532 -0
  324. data/shoes/ruby/lib/prettyprint.rb +896 -0
  325. data/shoes/ruby/lib/prime.rb +471 -0
  326. data/shoes/ruby/lib/profile.rb +10 -0
  327. data/shoes/ruby/lib/profiler.rb +59 -0
  328. data/shoes/ruby/lib/pstore.rb +543 -0
  329. data/shoes/ruby/lib/racc/parser.rb +441 -0
  330. data/shoes/ruby/lib/rake/classic_namespace.rb +8 -0
  331. data/shoes/ruby/lib/rake/clean.rb +33 -0
  332. data/shoes/ruby/lib/rake/gempackagetask.rb +97 -0
  333. data/shoes/ruby/lib/rake/loaders/makefile.rb +35 -0
  334. data/shoes/ruby/lib/rake/packagetask.rb +185 -0
  335. data/shoes/ruby/lib/rake/rake_test_loader.rb +5 -0
  336. data/shoes/ruby/lib/rake/rdoctask.rb +147 -0
  337. data/shoes/ruby/lib/rake/runtest.rb +23 -0
  338. data/shoes/ruby/lib/rake/tasklib.rb +23 -0
  339. data/shoes/ruby/lib/rake/testtask.rb +161 -0
  340. data/shoes/ruby/lib/rake/win32.rb +34 -0
  341. data/shoes/ruby/lib/rake.rb +2465 -0
  342. data/shoes/ruby/lib/rational.rb +19 -0
  343. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -0
  344. data/shoes/ruby/lib/rdoc/code_objects.rb +1061 -0
  345. data/shoes/ruby/lib/rdoc/diagram.rb +340 -0
  346. data/shoes/ruby/lib/rdoc/dot.rb +249 -0
  347. data/shoes/ruby/lib/rdoc/generator/chm/chm.rb +100 -0
  348. data/shoes/ruby/lib/rdoc/generator/chm.rb +113 -0
  349. data/shoes/ruby/lib/rdoc/generator/html/common.rb +24 -0
  350. data/shoes/ruby/lib/rdoc/generator/html/frameless.rb +92 -0
  351. data/shoes/ruby/lib/rdoc/generator/html/hefss.rb +150 -0
  352. data/shoes/ruby/lib/rdoc/generator/html/html.rb +769 -0
  353. data/shoes/ruby/lib/rdoc/generator/html/kilmer.rb +151 -0
  354. data/shoes/ruby/lib/rdoc/generator/html/kilmerfactory.rb +427 -0
  355. data/shoes/ruby/lib/rdoc/generator/html/one_page_html.rb +122 -0
  356. data/shoes/ruby/lib/rdoc/generator/html.rb +445 -0
  357. data/shoes/ruby/lib/rdoc/generator/ri.rb +226 -0
  358. data/shoes/ruby/lib/rdoc/generator/texinfo/class.texinfo.erb +44 -0
  359. data/shoes/ruby/lib/rdoc/generator/texinfo/file.texinfo.erb +6 -0
  360. data/shoes/ruby/lib/rdoc/generator/texinfo/method.texinfo.erb +6 -0
  361. data/shoes/ruby/lib/rdoc/generator/texinfo/texinfo.erb +28 -0
  362. data/shoes/ruby/lib/rdoc/generator/texinfo.rb +81 -0
  363. data/shoes/ruby/lib/rdoc/generator/xml/rdf.rb +113 -0
  364. data/shoes/ruby/lib/rdoc/generator/xml/xml.rb +123 -0
  365. data/shoes/ruby/lib/rdoc/generator/xml.rb +117 -0
  366. data/shoes/ruby/lib/rdoc/generator.rb +1082 -0
  367. data/shoes/ruby/lib/rdoc/known_classes.rb +68 -0
  368. data/shoes/ruby/lib/rdoc/markup/attribute_manager.rb +265 -0
  369. data/shoes/ruby/lib/rdoc/markup/formatter.rb +14 -0
  370. data/shoes/ruby/lib/rdoc/markup/fragments.rb +337 -0
  371. data/shoes/ruby/lib/rdoc/markup/inline.rb +101 -0
  372. data/shoes/ruby/lib/rdoc/markup/lines.rb +152 -0
  373. data/shoes/ruby/lib/rdoc/markup/preprocess.rb +75 -0
  374. data/shoes/ruby/lib/rdoc/markup/to_flow.rb +185 -0
  375. data/shoes/ruby/lib/rdoc/markup/to_html.rb +403 -0
  376. data/shoes/ruby/lib/rdoc/markup/to_html_crossref.rb +148 -0
  377. data/shoes/ruby/lib/rdoc/markup/to_latex.rb +328 -0
  378. data/shoes/ruby/lib/rdoc/markup/to_test.rb +50 -0
  379. data/shoes/ruby/lib/rdoc/markup/to_texinfo.rb +69 -0
  380. data/shoes/ruby/lib/rdoc/markup.rb +378 -0
  381. data/shoes/ruby/lib/rdoc/options.rb +638 -0
  382. data/shoes/ruby/lib/rdoc/parser/c.rb +661 -0
  383. data/shoes/ruby/lib/rdoc/parser/f95.rb +1835 -0
  384. data/shoes/ruby/lib/rdoc/parser/perl.rb +165 -0
  385. data/shoes/ruby/lib/rdoc/parser/ruby.rb +2829 -0
  386. data/shoes/ruby/lib/rdoc/parser/simple.rb +38 -0
  387. data/shoes/ruby/lib/rdoc/parser.rb +142 -0
  388. data/shoes/ruby/lib/rdoc/rdoc.rb +293 -0
  389. data/shoes/ruby/lib/rdoc/ri/cache.rb +187 -0
  390. data/shoes/ruby/lib/rdoc/ri/descriptions.rb +156 -0
  391. data/shoes/ruby/lib/rdoc/ri/display.rb +392 -0
  392. data/shoes/ruby/lib/rdoc/ri/driver.rb +669 -0
  393. data/shoes/ruby/lib/rdoc/ri/formatter.rb +616 -0
  394. data/shoes/ruby/lib/rdoc/ri/paths.rb +99 -0
  395. data/shoes/ruby/lib/rdoc/ri/reader.rb +106 -0
  396. data/shoes/ruby/lib/rdoc/ri/util.rb +79 -0
  397. data/shoes/ruby/lib/rdoc/ri/writer.rb +68 -0
  398. data/shoes/ruby/lib/rdoc/ri.rb +8 -0
  399. data/shoes/ruby/lib/rdoc/stats.rb +115 -0
  400. data/shoes/ruby/lib/rdoc/template.rb +64 -0
  401. data/shoes/ruby/lib/rdoc/tokenstream.rb +33 -0
  402. data/shoes/ruby/lib/rdoc.rb +395 -0
  403. data/shoes/ruby/lib/resolv-replace.rb +63 -0
  404. data/shoes/ruby/lib/resolv.rb +2262 -0
  405. data/shoes/ruby/lib/rexml/attlistdecl.rb +62 -0
  406. data/shoes/ruby/lib/rexml/attribute.rb +188 -0
  407. data/shoes/ruby/lib/rexml/cdata.rb +67 -0
  408. data/shoes/ruby/lib/rexml/child.rb +96 -0
  409. data/shoes/ruby/lib/rexml/comment.rb +80 -0
  410. data/shoes/ruby/lib/rexml/doctype.rb +270 -0
  411. data/shoes/ruby/lib/rexml/document.rb +231 -0
  412. data/shoes/ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
  413. data/shoes/ruby/lib/rexml/dtd/dtd.rb +51 -0
  414. data/shoes/ruby/lib/rexml/dtd/elementdecl.rb +17 -0
  415. data/shoes/ruby/lib/rexml/dtd/entitydecl.rb +56 -0
  416. data/shoes/ruby/lib/rexml/dtd/notationdecl.rb +39 -0
  417. data/shoes/ruby/lib/rexml/element.rb +1246 -0
  418. data/shoes/ruby/lib/rexml/encoding.rb +71 -0
  419. data/shoes/ruby/lib/rexml/encodings/CP-1252.rb +103 -0
  420. data/shoes/ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
  421. data/shoes/ruby/lib/rexml/encodings/ICONV.rb +22 -0
  422. data/shoes/ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
  423. data/shoes/ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
  424. data/shoes/ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
  425. data/shoes/ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
  426. data/shoes/ruby/lib/rexml/encodings/UNILE.rb +34 -0
  427. data/shoes/ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
  428. data/shoes/ruby/lib/rexml/encodings/UTF-16.rb +35 -0
  429. data/shoes/ruby/lib/rexml/encodings/UTF-8.rb +18 -0
  430. data/shoes/ruby/lib/rexml/entity.rb +166 -0
  431. data/shoes/ruby/lib/rexml/formatters/default.rb +109 -0
  432. data/shoes/ruby/lib/rexml/formatters/pretty.rb +139 -0
  433. data/shoes/ruby/lib/rexml/formatters/transitive.rb +58 -0
  434. data/shoes/ruby/lib/rexml/functions.rb +388 -0
  435. data/shoes/ruby/lib/rexml/instruction.rb +70 -0
  436. data/shoes/ruby/lib/rexml/light/node.rb +196 -0
  437. data/shoes/ruby/lib/rexml/namespace.rb +47 -0
  438. data/shoes/ruby/lib/rexml/node.rb +75 -0
  439. data/shoes/ruby/lib/rexml/output.rb +24 -0
  440. data/shoes/ruby/lib/rexml/parent.rb +166 -0
  441. data/shoes/ruby/lib/rexml/parseexception.rb +51 -0
  442. data/shoes/ruby/lib/rexml/parsers/baseparser.rb +530 -0
  443. data/shoes/ruby/lib/rexml/parsers/lightparser.rb +58 -0
  444. data/shoes/ruby/lib/rexml/parsers/pullparser.rb +196 -0
  445. data/shoes/ruby/lib/rexml/parsers/sax2parser.rb +247 -0
  446. data/shoes/ruby/lib/rexml/parsers/streamparser.rb +46 -0
  447. data/shoes/ruby/lib/rexml/parsers/treeparser.rb +100 -0
  448. data/shoes/ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
  449. data/shoes/ruby/lib/rexml/parsers/xpathparser.rb +698 -0
  450. data/shoes/ruby/lib/rexml/quickpath.rb +263 -0
  451. data/shoes/ruby/lib/rexml/rexml.rb +31 -0
  452. data/shoes/ruby/lib/rexml/sax2listener.rb +97 -0
  453. data/shoes/ruby/lib/rexml/source.rb +258 -0
  454. data/shoes/ruby/lib/rexml/streamlistener.rb +92 -0
  455. data/shoes/ruby/lib/rexml/syncenumerator.rb +32 -0
  456. data/shoes/ruby/lib/rexml/text.rb +404 -0
  457. data/shoes/ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
  458. data/shoes/ruby/lib/rexml/validation/relaxng.rb +559 -0
  459. data/shoes/ruby/lib/rexml/validation/validation.rb +155 -0
  460. data/shoes/ruby/lib/rexml/validation/validationexception.rb +9 -0
  461. data/shoes/ruby/lib/rexml/xmldecl.rb +119 -0
  462. data/shoes/ruby/lib/rexml/xmltokens.rb +18 -0
  463. data/shoes/ruby/lib/rexml/xpath.rb +77 -0
  464. data/shoes/ruby/lib/rexml/xpath_parser.rb +792 -0
  465. data/shoes/ruby/lib/rinda/rinda.rb +283 -0
  466. data/shoes/ruby/lib/rinda/ring.rb +271 -0
  467. data/shoes/ruby/lib/rinda/tuplespace.rb +642 -0
  468. data/shoes/ruby/lib/ripper/core.rb +70 -0
  469. data/shoes/ruby/lib/ripper/filter.rb +70 -0
  470. data/shoes/ruby/lib/ripper/lexer.rb +179 -0
  471. data/shoes/ruby/lib/ripper/sexp.rb +99 -0
  472. data/shoes/ruby/lib/ripper.rb +4 -0
  473. data/shoes/ruby/lib/rss/0.9.rb +427 -0
  474. data/shoes/ruby/lib/rss/1.0.rb +452 -0
  475. data/shoes/ruby/lib/rss/2.0.rb +111 -0
  476. data/shoes/ruby/lib/rss/atom.rb +748 -0
  477. data/shoes/ruby/lib/rss/content/1.0.rb +10 -0
  478. data/shoes/ruby/lib/rss/content/2.0.rb +12 -0
  479. data/shoes/ruby/lib/rss/content.rb +31 -0
  480. data/shoes/ruby/lib/rss/converter.rb +170 -0
  481. data/shoes/ruby/lib/rss/dublincore/1.0.rb +13 -0
  482. data/shoes/ruby/lib/rss/dublincore/2.0.rb +13 -0
  483. data/shoes/ruby/lib/rss/dublincore/atom.rb +17 -0
  484. data/shoes/ruby/lib/rss/dublincore.rb +161 -0
  485. data/shoes/ruby/lib/rss/image.rb +193 -0
  486. data/shoes/ruby/lib/rss/itunes.rb +410 -0
  487. data/shoes/ruby/lib/rss/maker/0.9.rb +467 -0
  488. data/shoes/ruby/lib/rss/maker/1.0.rb +434 -0
  489. data/shoes/ruby/lib/rss/maker/2.0.rb +223 -0
  490. data/shoes/ruby/lib/rss/maker/atom.rb +172 -0
  491. data/shoes/ruby/lib/rss/maker/base.rb +880 -0
  492. data/shoes/ruby/lib/rss/maker/content.rb +21 -0
  493. data/shoes/ruby/lib/rss/maker/dublincore.rb +124 -0
  494. data/shoes/ruby/lib/rss/maker/entry.rb +163 -0
  495. data/shoes/ruby/lib/rss/maker/feed.rb +430 -0
  496. data/shoes/ruby/lib/rss/maker/image.rb +111 -0
  497. data/shoes/ruby/lib/rss/maker/itunes.rb +242 -0
  498. data/shoes/ruby/lib/rss/maker/slash.rb +33 -0
  499. data/shoes/ruby/lib/rss/maker/syndication.rb +18 -0
  500. data/shoes/ruby/lib/rss/maker/taxonomy.rb +118 -0
  501. data/shoes/ruby/lib/rss/maker/trackback.rb +61 -0
  502. data/shoes/ruby/lib/rss/maker.rb +44 -0
  503. data/shoes/ruby/lib/rss/parser.rb +568 -0
  504. data/shoes/ruby/lib/rss/rexmlparser.rb +54 -0
  505. data/shoes/ruby/lib/rss/rss.rb +1313 -0
  506. data/shoes/ruby/lib/rss/slash.rb +49 -0
  507. data/shoes/ruby/lib/rss/syndication.rb +67 -0
  508. data/shoes/ruby/lib/rss/taxonomy.rb +145 -0
  509. data/shoes/ruby/lib/rss/trackback.rb +288 -0
  510. data/shoes/ruby/lib/rss/utils.rb +111 -0
  511. data/shoes/ruby/lib/rss/xml-stylesheet.rb +105 -0
  512. data/shoes/ruby/lib/rss/xml.rb +71 -0
  513. data/shoes/ruby/lib/rss/xmlparser.rb +93 -0
  514. data/shoes/ruby/lib/rss/xmlscanner.rb +121 -0
  515. data/shoes/ruby/lib/rss.rb +19 -0
  516. data/shoes/ruby/lib/rubygems/builder.rb +88 -0
  517. data/shoes/ruby/lib/rubygems/command.rb +406 -0
  518. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -0
  519. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -0
  520. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -0
  521. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -0
  522. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -0
  523. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -0
  524. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -0
  525. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -0
  526. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -0
  527. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -0
  528. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -0
  529. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -0
  530. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -0
  531. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -0
  532. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -0
  533. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -0
  534. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -0
  535. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -0
  536. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -0
  537. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -0
  538. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -0
  539. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -0
  540. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -0
  541. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -0
  542. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -0
  543. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -0
  544. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -0
  545. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -0
  546. data/shoes/ruby/lib/rubygems/config_file.rb +266 -0
  547. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -0
  548. data/shoes/ruby/lib/rubygems/defaults.rb +89 -0
  549. data/shoes/ruby/lib/rubygems/dependency.rb +119 -0
  550. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -0
  551. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -0
  552. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +40 -0
  553. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -0
  554. data/shoes/ruby/lib/rubygems/digest/sha1.rb +17 -0
  555. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -0
  556. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -0
  557. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -0
  558. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -0
  559. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -0
  560. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -0
  561. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -0
  562. data/shoes/ruby/lib/rubygems/ext.rb +18 -0
  563. data/shoes/ruby/lib/rubygems/format.rb +87 -0
  564. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -0
  565. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -0
  566. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -0
  567. data/shoes/ruby/lib/rubygems/indexer/abstract_index_builder.rb +88 -0
  568. data/shoes/ruby/lib/rubygems/indexer/latest_index_builder.rb +35 -0
  569. data/shoes/ruby/lib/rubygems/indexer/marshal_index_builder.rb +17 -0
  570. data/shoes/ruby/lib/rubygems/indexer/master_index_builder.rb +54 -0
  571. data/shoes/ruby/lib/rubygems/indexer/quick_index_builder.rb +50 -0
  572. data/shoes/ruby/lib/rubygems/indexer.rb +370 -0
  573. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -0
  574. data/shoes/ruby/lib/rubygems/installer.rb +578 -0
  575. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -0
  576. data/shoes/ruby/lib/rubygems/old_format.rb +148 -0
  577. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -0
  578. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -0
  579. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -0
  580. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -0
  581. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -0
  582. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -0
  583. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -0
  584. data/shoes/ruby/lib/rubygems/package.rb +95 -0
  585. data/shoes/ruby/lib/rubygems/platform.rb +178 -0
  586. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -0
  587. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +15 -0
  588. data/shoes/ruby/lib/rubygems/requirement.rb +163 -0
  589. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -0
  590. data/shoes/ruby/lib/rubygems/security.rb +786 -0
  591. data/shoes/ruby/lib/rubygems/server.rb +629 -0
  592. data/shoes/ruby/lib/rubygems/source_index.rb +559 -0
  593. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -0
  594. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -0
  595. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -0
  596. data/shoes/ruby/lib/rubygems/specification.rb +1262 -0
  597. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -0
  598. data/shoes/ruby/lib/rubygems/timer.rb +25 -0
  599. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -0
  600. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -0
  601. data/shoes/ruby/lib/rubygems/validator.rb +208 -0
  602. data/shoes/ruby/lib/rubygems/version.rb +167 -0
  603. data/shoes/ruby/lib/rubygems/version_option.rb +48 -0
  604. data/shoes/ruby/lib/rubygems.rb +888 -0
  605. data/shoes/ruby/lib/scanf.rb +703 -0
  606. data/shoes/ruby/lib/securerandom.rb +182 -0
  607. data/shoes/ruby/lib/set.rb +1274 -0
  608. data/shoes/ruby/lib/shell/builtin-command.rb +160 -0
  609. data/shoes/ruby/lib/shell/command-processor.rb +593 -0
  610. data/shoes/ruby/lib/shell/error.rb +25 -0
  611. data/shoes/ruby/lib/shell/filter.rb +109 -0
  612. data/shoes/ruby/lib/shell/process-controller.rb +319 -0
  613. data/shoes/ruby/lib/shell/system-command.rb +159 -0
  614. data/shoes/ruby/lib/shell/version.rb +15 -0
  615. data/shoes/ruby/lib/shell.rb +300 -0
  616. data/shoes/ruby/lib/shellwords.rb +156 -0
  617. data/shoes/ruby/lib/singleton.rb +313 -0
  618. data/shoes/ruby/lib/sync.rb +307 -0
  619. data/shoes/ruby/lib/tempfile.rb +218 -0
  620. data/shoes/ruby/lib/test/unit/assertions.rb +122 -0
  621. data/shoes/ruby/lib/test/unit/testcase.rb +12 -0
  622. data/shoes/ruby/lib/test/unit.rb +66 -0
  623. data/shoes/ruby/lib/thread.rb +367 -0
  624. data/shoes/ruby/lib/thwait.rb +168 -0
  625. data/shoes/ruby/lib/time.rb +869 -0
  626. data/shoes/ruby/lib/timeout.rb +108 -0
  627. data/shoes/ruby/lib/tmpdir.rb +138 -0
  628. data/shoes/ruby/lib/tracer.rb +166 -0
  629. data/shoes/ruby/lib/tsort.rb +290 -0
  630. data/shoes/ruby/lib/ubygems.rb +10 -0
  631. data/shoes/ruby/lib/un.rb +304 -0
  632. data/shoes/ruby/lib/uri/common.rb +727 -0
  633. data/shoes/ruby/lib/uri/ftp.rb +198 -0
  634. data/shoes/ruby/lib/uri/generic.rb +1128 -0
  635. data/shoes/ruby/lib/uri/http.rb +100 -0
  636. data/shoes/ruby/lib/uri/https.rb +20 -0
  637. data/shoes/ruby/lib/uri/ldap.rb +190 -0
  638. data/shoes/ruby/lib/uri/ldaps.rb +12 -0
  639. data/shoes/ruby/lib/uri/mailto.rb +266 -0
  640. data/shoes/ruby/lib/uri.rb +29 -0
  641. data/shoes/ruby/lib/weakref.rb +80 -0
  642. data/shoes/ruby/lib/webrick/accesslog.rb +75 -0
  643. data/shoes/ruby/lib/webrick/cgi.rb +260 -0
  644. data/shoes/ruby/lib/webrick/compat.rb +15 -0
  645. data/shoes/ruby/lib/webrick/config.rb +100 -0
  646. data/shoes/ruby/lib/webrick/cookie.rb +110 -0
  647. data/shoes/ruby/lib/webrick/htmlutils.rb +25 -0
  648. data/shoes/ruby/lib/webrick/httpauth/authenticator.rb +79 -0
  649. data/shoes/ruby/lib/webrick/httpauth/basicauth.rb +65 -0
  650. data/shoes/ruby/lib/webrick/httpauth/digestauth.rb +344 -0
  651. data/shoes/ruby/lib/webrick/httpauth/htdigest.rb +91 -0
  652. data/shoes/ruby/lib/webrick/httpauth/htgroup.rb +61 -0
  653. data/shoes/ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
  654. data/shoes/ruby/lib/webrick/httpauth/userdb.rb +29 -0
  655. data/shoes/ruby/lib/webrick/httpauth.rb +45 -0
  656. data/shoes/ruby/lib/webrick/httpproxy.rb +288 -0
  657. data/shoes/ruby/lib/webrick/httprequest.rb +402 -0
  658. data/shoes/ruby/lib/webrick/httpresponse.rb +326 -0
  659. data/shoes/ruby/lib/webrick/https.rb +63 -0
  660. data/shoes/ruby/lib/webrick/httpserver.rb +217 -0
  661. data/shoes/ruby/lib/webrick/httpservlet/abstract.rb +70 -0
  662. data/shoes/ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  663. data/shoes/ruby/lib/webrick/httpservlet/cgihandler.rb +110 -0
  664. data/shoes/ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
  665. data/shoes/ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
  666. data/shoes/ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
  667. data/shoes/ruby/lib/webrick/httpservlet.rb +22 -0
  668. data/shoes/ruby/lib/webrick/httpstatus.rb +132 -0
  669. data/shoes/ruby/lib/webrick/httputils.rb +392 -0
  670. data/shoes/ruby/lib/webrick/httpversion.rb +49 -0
  671. data/shoes/ruby/lib/webrick/log.rb +88 -0
  672. data/shoes/ruby/lib/webrick/server.rb +210 -0
  673. data/shoes/ruby/lib/webrick/ssl.rb +126 -0
  674. data/shoes/ruby/lib/webrick/utils.rb +175 -0
  675. data/shoes/ruby/lib/webrick/version.rb +13 -0
  676. data/shoes/ruby/lib/webrick.rb +29 -0
  677. data/shoes/ruby/lib/win32/registry.rb +832 -0
  678. data/shoes/ruby/lib/win32/resolv.rb +370 -0
  679. data/shoes/ruby/lib/win32/sspi.rb +330 -0
  680. data/shoes/ruby/lib/win32ole/property.rb +16 -0
  681. data/shoes/ruby/lib/xmlrpc/base64.rb +81 -0
  682. data/shoes/ruby/lib/xmlrpc/client.rb +625 -0
  683. data/shoes/ruby/lib/xmlrpc/config.rb +40 -0
  684. data/shoes/ruby/lib/xmlrpc/create.rb +290 -0
  685. data/shoes/ruby/lib/xmlrpc/datetime.rb +142 -0
  686. data/shoes/ruby/lib/xmlrpc/httpserver.rb +178 -0
  687. data/shoes/ruby/lib/xmlrpc/marshal.rb +76 -0
  688. data/shoes/ruby/lib/xmlrpc/parser.rb +813 -0
  689. data/shoes/ruby/lib/xmlrpc/server.rb +778 -0
  690. data/shoes/ruby/lib/xmlrpc/utils.rb +165 -0
  691. data/shoes/ruby/lib/yaml/baseemitter.rb +242 -0
  692. data/shoes/ruby/lib/yaml/basenode.rb +216 -0
  693. data/shoes/ruby/lib/yaml/constants.rb +45 -0
  694. data/shoes/ruby/lib/yaml/dbm.rb +111 -0
  695. data/shoes/ruby/lib/yaml/encoding.rb +33 -0
  696. data/shoes/ruby/lib/yaml/error.rb +34 -0
  697. data/shoes/ruby/lib/yaml/loader.rb +14 -0
  698. data/shoes/ruby/lib/yaml/rubytypes.rb +446 -0
  699. data/shoes/ruby/lib/yaml/store.rb +43 -0
  700. data/shoes/ruby/lib/yaml/stream.rb +40 -0
  701. data/shoes/ruby/lib/yaml/stringio.rb +83 -0
  702. data/shoes/ruby/lib/yaml/syck.rb +19 -0
  703. data/shoes/ruby/lib/yaml/tag.rb +91 -0
  704. data/shoes/ruby/lib/yaml/types.rb +192 -0
  705. data/shoes/ruby/lib/yaml/yamlnode.rb +54 -0
  706. data/shoes/ruby/lib/yaml/ypath.rb +52 -0
  707. data/shoes/ruby/lib/yaml.rb +440 -0
  708. data/shoes/samples/class-book.rb +43 -0
  709. data/shoes/samples/class-book.yaml +387 -0
  710. data/shoes/samples/expert-definr.rb +23 -0
  711. data/shoes/samples/expert-funnies.rb +51 -0
  712. data/shoes/samples/expert-irb.rb +112 -0
  713. data/shoes/samples/expert-minesweeper.rb +267 -0
  714. data/shoes/samples/expert-othello.rb +319 -0
  715. data/shoes/samples/expert-pong.rb +62 -0
  716. data/shoes/samples/expert-tankspank.rb +385 -0
  717. data/shoes/samples/good-arc.rb +37 -0
  718. data/shoes/samples/good-clock.rb +51 -0
  719. data/shoes/samples/good-follow.rb +26 -0
  720. data/shoes/samples/good-reminder.rb +174 -0
  721. data/shoes/samples/good-vjot.rb +56 -0
  722. data/shoes/samples/simple-accordion.rb +75 -0
  723. data/shoes/samples/simple-anim-shapes.rb +17 -0
  724. data/shoes/samples/simple-anim-text.rb +13 -0
  725. data/shoes/samples/simple-arc.rb +23 -0
  726. data/shoes/samples/simple-bounce.rb +24 -0
  727. data/shoes/samples/simple-calc.rb +70 -0
  728. data/shoes/samples/simple-control-sizes.rb +24 -0
  729. data/shoes/samples/simple-curve.rb +26 -0
  730. data/shoes/samples/simple-dialogs.rb +29 -0
  731. data/shoes/samples/simple-downloader.rb +27 -0
  732. data/shoes/samples/simple-draw.rb +13 -0
  733. data/shoes/samples/simple-editor.rb +28 -0
  734. data/shoes/samples/simple-form.rb +28 -0
  735. data/shoes/samples/simple-form.shy +0 -0
  736. data/shoes/samples/simple-mask.rb +21 -0
  737. data/shoes/samples/simple-menu.rb +31 -0
  738. data/shoes/samples/simple-menu1.rb +35 -0
  739. data/shoes/samples/simple-rubygems.rb +29 -0
  740. data/shoes/samples/simple-slide.rb +45 -0
  741. data/shoes/samples/simple-sphere.rb +28 -0
  742. data/shoes/samples/simple-timer.rb +13 -0
  743. data/shoes/samples/simple-video.rb +13 -0
  744. data/shoes/shoes +21 -0
  745. data/shoes/shoes.exe +0 -0
  746. data/shoes/shoes.exe.manifest +17 -0
  747. data/shoes/sqlite3.dll +0 -0
  748. data/shoes/static/Shoes.icns +0 -0
  749. data/shoes/static/Thumbs.db +0 -0
  750. data/shoes/static/app-icon.png +0 -0
  751. data/shoes/static/avatar.png +0 -0
  752. data/shoes/static/code_highlighter.js +188 -0
  753. data/shoes/static/code_highlighter_ruby.js +26 -0
  754. data/shoes/static/icon-debug.png +0 -0
  755. data/shoes/static/icon-error.png +0 -0
  756. data/shoes/static/icon-info.png +0 -0
  757. data/shoes/static/icon-warn.png +0 -0
  758. data/shoes/static/listbox_button1.png +0 -0
  759. data/shoes/static/listbox_button2.png +0 -0
  760. data/shoes/static/man-app.png +0 -0
  761. data/shoes/static/man-builds.png +0 -0
  762. data/shoes/static/man-editor-notepad.png +0 -0
  763. data/shoes/static/man-editor-osx.png +0 -0
  764. data/shoes/static/man-ele-background.png +0 -0
  765. data/shoes/static/man-ele-border.png +0 -0
  766. data/shoes/static/man-ele-button.png +0 -0
  767. data/shoes/static/man-ele-check.png +0 -0
  768. data/shoes/static/man-ele-editbox.png +0 -0
  769. data/shoes/static/man-ele-editline.png +0 -0
  770. data/shoes/static/man-ele-image.png +0 -0
  771. data/shoes/static/man-ele-listbox.png +0 -0
  772. data/shoes/static/man-ele-progress.png +0 -0
  773. data/shoes/static/man-ele-radio.png +0 -0
  774. data/shoes/static/man-ele-shape.png +0 -0
  775. data/shoes/static/man-ele-textblock.png +0 -0
  776. data/shoes/static/man-ele-video.png +0 -0
  777. data/shoes/static/man-intro-dmg.png +0 -0
  778. data/shoes/static/man-intro-exe.png +0 -0
  779. data/shoes/static/man-look-tiger.png +0 -0
  780. data/shoes/static/man-look-ubuntu.png +0 -0
  781. data/shoes/static/man-look-vista.png +0 -0
  782. data/shoes/static/man-run-osx.png +0 -0
  783. data/shoes/static/man-run-vista.png +0 -0
  784. data/shoes/static/man-run-xp.png +0 -0
  785. data/shoes/static/man-shot1.png +0 -0
  786. data/shoes/static/manual-en.txt +2783 -0
  787. data/shoes/static/manual-ja.txt +2780 -0
  788. data/shoes/static/manual.css +167 -0
  789. data/shoes/static/menu-corner1.png +0 -0
  790. data/shoes/static/menu-corner2.png +0 -0
  791. data/shoes/static/menu-gray.png +0 -0
  792. data/shoes/static/menu-left.png +0 -0
  793. data/shoes/static/menu-right.png +0 -0
  794. data/shoes/static/menu-top.png +0 -0
  795. data/shoes/static/shoes-dmg.jpg +0 -0
  796. data/shoes/static/shoes-icon-blue.png +0 -0
  797. data/shoes/static/shoes-icon.png +0 -0
  798. data/shoes/static/shoes-manual-apps.gif +0 -0
  799. data/shoes/static/stripe.png +0 -0
  800. data/shoes/static/stubs/blank.exe +0 -0
  801. data/shoes/static/stubs/blank.hfz +0 -0
  802. data/shoes/static/stubs/blank.run +375 -0
  803. data/shoes/static/stubs/cocoa-install +0 -0
  804. data/shoes/static/stubs/sh-install +48 -0
  805. data/shoes/static/tutor-back.png +0 -0
  806. data/shoes/zlib.dll +0 -0
  807. data/shoes/zlib1.dll +0 -0
  808. metadata +887 -0
@@ -0,0 +1,1274 @@
1
+ #!/usr/bin/env ruby
2
+ #--
3
+ # set.rb - defines the Set class
4
+ #++
5
+ # Copyright (c) 2002-2008 Akinori MUSHA <knu@iDaemons.org>
6
+ #
7
+ # Documentation by Akinori MUSHA and Gavin Sinclair.
8
+ #
9
+ # All rights reserved. You can redistribute and/or modify it under the same
10
+ # terms as Ruby.
11
+ #
12
+ # $Id: set.rb 18571 2008-08-13 08:03:30Z knu $
13
+ #
14
+ # == Overview
15
+ #
16
+ # This library provides the Set class, which deals with a collection
17
+ # of unordered values with no duplicates. It is a hybrid of Array's
18
+ # intuitive inter-operation facilities and Hash's fast lookup. If you
19
+ # need to keep values ordered, use the SortedSet class.
20
+ #
21
+ # The method +to_set+ is added to Enumerable for convenience.
22
+ #
23
+ # See the Set class for an example of usage.
24
+
25
+
26
+ #
27
+ # Set implements a collection of unordered values with no duplicates.
28
+ # This is a hybrid of Array's intuitive inter-operation facilities and
29
+ # Hash's fast lookup.
30
+ #
31
+ # The equality of each couple of elements is determined according to
32
+ # Object#eql? and Object#hash, since Set uses Hash as storage.
33
+ #
34
+ # Set is easy to use with Enumerable objects (implementing +each+).
35
+ # Most of the initializer methods and binary operators accept generic
36
+ # Enumerable objects besides sets and arrays. An Enumerable object
37
+ # can be converted to Set using the +to_set+ method.
38
+ #
39
+ # == Example
40
+ #
41
+ # require 'set'
42
+ # s1 = Set.new [1, 2] # -> #<Set: {1, 2}>
43
+ # s2 = [1, 2].to_set # -> #<Set: {1, 2}>
44
+ # s1 == s2 # -> true
45
+ # s1.add("foo") # -> #<Set: {1, 2, "foo"}>
46
+ # s1.merge([2, 6]) # -> #<Set: {6, 1, 2, "foo"}>
47
+ # s1.subset? s2 # -> false
48
+ # s2.subset? s1 # -> true
49
+ #
50
+ # == Contact
51
+ #
52
+ # - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
53
+ #
54
+ class Set
55
+ include Enumerable
56
+
57
+ # Creates a new set containing the given objects.
58
+ def self.[](*ary)
59
+ new(ary)
60
+ end
61
+
62
+ # Creates a new set containing the elements of the given enumerable
63
+ # object.
64
+ #
65
+ # If a block is given, the elements of enum are preprocessed by the
66
+ # given block.
67
+ def initialize(enum = nil, &block) # :yields: o
68
+ @hash ||= Hash.new
69
+
70
+ enum.nil? and return
71
+
72
+ if block
73
+ enum.each { |o| add(block[o]) }
74
+ else
75
+ merge(enum)
76
+ end
77
+ end
78
+
79
+ # Copy internal hash.
80
+ def initialize_copy(orig)
81
+ @hash = orig.instance_eval{@hash}.dup
82
+ end
83
+
84
+ def freeze # :nodoc:
85
+ super
86
+ @hash.freeze
87
+ self
88
+ end
89
+
90
+ def taint # :nodoc:
91
+ super
92
+ @hash.taint
93
+ self
94
+ end
95
+
96
+ def untaint # :nodoc:
97
+ super
98
+ @hash.untaint
99
+ self
100
+ end
101
+
102
+ # Returns the number of elements.
103
+ def size
104
+ @hash.size
105
+ end
106
+ alias length size
107
+
108
+ # Returns true if the set contains no elements.
109
+ def empty?
110
+ @hash.empty?
111
+ end
112
+
113
+ # Removes all elements and returns self.
114
+ def clear
115
+ @hash.clear
116
+ self
117
+ end
118
+
119
+ # Replaces the contents of the set with the contents of the given
120
+ # enumerable object and returns self.
121
+ def replace(enum)
122
+ if enum.class == self.class
123
+ @hash.replace(enum.instance_eval { @hash })
124
+ else
125
+ clear
126
+ enum.each { |o| add(o) }
127
+ end
128
+
129
+ self
130
+ end
131
+
132
+ # Converts the set to an array. The order of elements is uncertain.
133
+ def to_a
134
+ @hash.keys
135
+ end
136
+
137
+ def flatten_merge(set, seen = Set.new)
138
+ set.each { |e|
139
+ if e.is_a?(Set)
140
+ if seen.include?(e_id = e.object_id)
141
+ raise ArgumentError, "tried to flatten recursive Set"
142
+ end
143
+
144
+ seen.add(e_id)
145
+ flatten_merge(e, seen)
146
+ seen.delete(e_id)
147
+ else
148
+ add(e)
149
+ end
150
+ }
151
+
152
+ self
153
+ end
154
+ protected :flatten_merge
155
+
156
+ # Returns a new set that is a copy of the set, flattening each
157
+ # containing set recursively.
158
+ def flatten
159
+ self.class.new.flatten_merge(self)
160
+ end
161
+
162
+ # Equivalent to Set#flatten, but replaces the receiver with the
163
+ # result in place. Returns nil if no modifications were made.
164
+ def flatten!
165
+ if detect { |e| e.is_a?(Set) }
166
+ replace(flatten())
167
+ else
168
+ nil
169
+ end
170
+ end
171
+
172
+ # Returns true if the set contains the given object.
173
+ def include?(o)
174
+ @hash.include?(o)
175
+ end
176
+ alias member? include?
177
+
178
+ # Returns true if the set is a superset of the given set.
179
+ def superset?(set)
180
+ set.is_a?(Set) or raise ArgumentError, "value must be a set"
181
+ return false if size < set.size
182
+ set.all? { |o| include?(o) }
183
+ end
184
+
185
+ # Returns true if the set is a proper superset of the given set.
186
+ def proper_superset?(set)
187
+ set.is_a?(Set) or raise ArgumentError, "value must be a set"
188
+ return false if size <= set.size
189
+ set.all? { |o| include?(o) }
190
+ end
191
+
192
+ # Returns true if the set is a subset of the given set.
193
+ def subset?(set)
194
+ set.is_a?(Set) or raise ArgumentError, "value must be a set"
195
+ return false if set.size < size
196
+ all? { |o| set.include?(o) }
197
+ end
198
+
199
+ # Returns true if the set is a proper subset of the given set.
200
+ def proper_subset?(set)
201
+ set.is_a?(Set) or raise ArgumentError, "value must be a set"
202
+ return false if set.size <= size
203
+ all? { |o| set.include?(o) }
204
+ end
205
+
206
+ # Calls the given block once for each element in the set, passing
207
+ # the element as parameter. Returns an enumerator if no block is
208
+ # given.
209
+ def each
210
+ block_given? or return enum_for(__method__)
211
+ @hash.each_key { |o| yield(o) }
212
+ self
213
+ end
214
+
215
+ # Adds the given object to the set and returns self. Use +merge+ to
216
+ # add many elements at once.
217
+ def add(o)
218
+ @hash[o] = true
219
+ self
220
+ end
221
+ alias << add
222
+
223
+ # Adds the given object to the set and returns self. If the
224
+ # object is already in the set, returns nil.
225
+ def add?(o)
226
+ if include?(o)
227
+ nil
228
+ else
229
+ add(o)
230
+ end
231
+ end
232
+
233
+ # Deletes the given object from the set and returns self. Use +subtract+ to
234
+ # delete many items at once.
235
+ def delete(o)
236
+ @hash.delete(o)
237
+ self
238
+ end
239
+
240
+ # Deletes the given object from the set and returns self. If the
241
+ # object is not in the set, returns nil.
242
+ def delete?(o)
243
+ if include?(o)
244
+ delete(o)
245
+ else
246
+ nil
247
+ end
248
+ end
249
+
250
+ # Deletes every element of the set for which block evaluates to
251
+ # true, and returns self.
252
+ def delete_if
253
+ block_given? or return enum_for(__method__)
254
+ to_a.each { |o| @hash.delete(o) if yield(o) }
255
+ self
256
+ end
257
+
258
+ # Replaces the elements with ones returned by collect().
259
+ def collect!
260
+ block_given? or return enum_for(__method__)
261
+ set = self.class.new
262
+ each { |o| set << yield(o) }
263
+ replace(set)
264
+ end
265
+ alias map! collect!
266
+
267
+ # Equivalent to Set#delete_if, but returns nil if no changes were
268
+ # made.
269
+ def reject!
270
+ block_given? or return enum_for(__method__)
271
+ n = size
272
+ delete_if { |o| yield(o) }
273
+ size == n ? nil : self
274
+ end
275
+
276
+ # Merges the elements of the given enumerable object to the set and
277
+ # returns self.
278
+ def merge(enum)
279
+ if enum.is_a?(Set)
280
+ @hash.update(enum.instance_eval { @hash })
281
+ else
282
+ enum.each { |o| add(o) }
283
+ end
284
+
285
+ self
286
+ end
287
+
288
+ # Deletes every element that appears in the given enumerable object
289
+ # and returns self.
290
+ def subtract(enum)
291
+ enum.each { |o| delete(o) }
292
+ self
293
+ end
294
+
295
+ # Returns a new set built by merging the set and the elements of the
296
+ # given enumerable object.
297
+ def |(enum)
298
+ dup.merge(enum)
299
+ end
300
+ alias + | ##
301
+ alias union | ##
302
+
303
+ # Returns a new set built by duplicating the set, removing every
304
+ # element that appears in the given enumerable object.
305
+ def -(enum)
306
+ dup.subtract(enum)
307
+ end
308
+ alias difference - ##
309
+
310
+ # Returns a new set containing elements common to the set and the
311
+ # given enumerable object.
312
+ def &(enum)
313
+ n = self.class.new
314
+ enum.each { |o| n.add(o) if include?(o) }
315
+ n
316
+ end
317
+ alias intersection & ##
318
+
319
+ # Returns a new set containing elements exclusive between the set
320
+ # and the given enumerable object. (set ^ enum) is equivalent to
321
+ # ((set | enum) - (set & enum)).
322
+ def ^(enum)
323
+ n = Set.new(enum)
324
+ each { |o| if n.include?(o) then n.delete(o) else n.add(o) end }
325
+ n
326
+ end
327
+
328
+ # Returns true if two sets are equal. The equality of each couple
329
+ # of elements is defined according to Object#eql?.
330
+ def ==(set)
331
+ equal?(set) and return true
332
+
333
+ set.is_a?(Set) && size == set.size or return false
334
+
335
+ hash = @hash.dup
336
+ set.all? { |o| hash.include?(o) }
337
+ end
338
+
339
+ def hash # :nodoc:
340
+ @hash.hash
341
+ end
342
+
343
+ def eql?(o) # :nodoc:
344
+ return false unless o.is_a?(Set)
345
+ @hash.eql?(o.instance_eval{@hash})
346
+ end
347
+
348
+ # Classifies the set by the return value of the given block and
349
+ # returns a hash of {value => set of elements} pairs. The block is
350
+ # called once for each element of the set, passing the element as
351
+ # parameter.
352
+ #
353
+ # e.g.:
354
+ #
355
+ # require 'set'
356
+ # files = Set.new(Dir.glob("*.rb"))
357
+ # hash = files.classify { |f| File.mtime(f).year }
358
+ # p hash # => {2000=>#<Set: {"a.rb", "b.rb"}>,
359
+ # # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
360
+ # # 2002=>#<Set: {"f.rb"}>}
361
+ def classify # :yields: o
362
+ block_given? or return enum_for(__method__)
363
+
364
+ h = {}
365
+
366
+ each { |i|
367
+ x = yield(i)
368
+ (h[x] ||= self.class.new).add(i)
369
+ }
370
+
371
+ h
372
+ end
373
+
374
+ # Divides the set into a set of subsets according to the commonality
375
+ # defined by the given block.
376
+ #
377
+ # If the arity of the block is 2, elements o1 and o2 are in common
378
+ # if block.call(o1, o2) is true. Otherwise, elements o1 and o2 are
379
+ # in common if block.call(o1) == block.call(o2).
380
+ #
381
+ # e.g.:
382
+ #
383
+ # require 'set'
384
+ # numbers = Set[1, 3, 4, 6, 9, 10, 11]
385
+ # set = numbers.divide { |i,j| (i - j).abs == 1 }
386
+ # p set # => #<Set: {#<Set: {1}>,
387
+ # # #<Set: {11, 9, 10}>,
388
+ # # #<Set: {3, 4}>,
389
+ # # #<Set: {6}>}>
390
+ def divide(&func)
391
+ func or return enum_for(__method__)
392
+
393
+ if func.arity == 2
394
+ require 'tsort'
395
+
396
+ class << dig = {} # :nodoc:
397
+ include TSort
398
+
399
+ alias tsort_each_node each_key
400
+ def tsort_each_child(node, &block)
401
+ fetch(node).each(&block)
402
+ end
403
+ end
404
+
405
+ each { |u|
406
+ dig[u] = a = []
407
+ each{ |v| func.call(u, v) and a << v }
408
+ }
409
+
410
+ set = Set.new()
411
+ dig.each_strongly_connected_component { |css|
412
+ set.add(self.class.new(css))
413
+ }
414
+ set
415
+ else
416
+ Set.new(classify(&func).values)
417
+ end
418
+ end
419
+
420
+ InspectKey = :__inspect_key__ # :nodoc:
421
+
422
+ # Returns a string containing a human-readable representation of the
423
+ # set. ("#<Set: {element1, element2, ...}>")
424
+ def inspect
425
+ ids = (Thread.current[InspectKey] ||= [])
426
+
427
+ if ids.include?(object_id)
428
+ return sprintf('#<%s: {...}>', self.class.name)
429
+ end
430
+
431
+ begin
432
+ ids << object_id
433
+ return sprintf('#<%s: {%s}>', self.class, to_a.inspect[1..-2])
434
+ ensure
435
+ ids.pop
436
+ end
437
+ end
438
+
439
+ def pretty_print(pp) # :nodoc:
440
+ pp.text sprintf('#<%s: {', self.class.name)
441
+ pp.nest(1) {
442
+ pp.seplist(self) { |o|
443
+ pp.pp o
444
+ }
445
+ }
446
+ pp.text "}>"
447
+ end
448
+
449
+ def pretty_print_cycle(pp) # :nodoc:
450
+ pp.text sprintf('#<%s: {%s}>', self.class.name, empty? ? '' : '...')
451
+ end
452
+ end
453
+
454
+ # SortedSet implements a set which elements are sorted in order. See Set.
455
+ class SortedSet < Set
456
+ @@setup = false
457
+
458
+ class << self
459
+ def [](*ary) # :nodoc:
460
+ new(ary)
461
+ end
462
+
463
+ def setup # :nodoc:
464
+ @@setup and return
465
+
466
+ module_eval {
467
+ # a hack to shut up warning
468
+ alias old_init initialize
469
+ remove_method :old_init
470
+ }
471
+ begin
472
+ require 'rbtree'
473
+
474
+ module_eval %{
475
+ def initialize(*args, &block)
476
+ @hash = RBTree.new
477
+ super
478
+ end
479
+ }
480
+ rescue LoadError
481
+ module_eval %{
482
+ def initialize(*args, &block)
483
+ @keys = nil
484
+ super
485
+ end
486
+
487
+ def clear
488
+ @keys = nil
489
+ super
490
+ end
491
+
492
+ def replace(enum)
493
+ @keys = nil
494
+ super
495
+ end
496
+
497
+ def add(o)
498
+ @keys = nil
499
+ @hash[o] = true
500
+ self
501
+ end
502
+ alias << add
503
+
504
+ def delete(o)
505
+ @keys = nil
506
+ @hash.delete(o)
507
+ self
508
+ end
509
+
510
+ def delete_if
511
+ block_given? or return enum_for(__method__)
512
+ n = @hash.size
513
+ super
514
+ @keys = nil if @hash.size != n
515
+ self
516
+ end
517
+
518
+ def merge(enum)
519
+ @keys = nil
520
+ super
521
+ end
522
+
523
+ def each
524
+ block_given? or return enum_for(__method__)
525
+ to_a.each { |o| yield(o) }
526
+ self
527
+ end
528
+
529
+ def to_a
530
+ (@keys = @hash.keys).sort! unless @keys
531
+ @keys
532
+ end
533
+ }
534
+ end
535
+
536
+ @@setup = true
537
+ end
538
+ end
539
+
540
+ def initialize(*args, &block) # :nodoc:
541
+ SortedSet.setup
542
+ initialize(*args, &block)
543
+ end
544
+ end
545
+
546
+ module Enumerable
547
+ # Makes a set from the enumerable object with given arguments.
548
+ # Needs to +require "set"+ to use this method.
549
+ def to_set(klass = Set, *args, &block)
550
+ klass.new(self, *args, &block)
551
+ end
552
+ end
553
+
554
+ # =begin
555
+ # == RestricedSet class
556
+ # RestricedSet implements a set with restrictions defined by a given
557
+ # block.
558
+ #
559
+ # === Super class
560
+ # Set
561
+ #
562
+ # === Class Methods
563
+ # --- RestricedSet::new(enum = nil) { |o| ... }
564
+ # --- RestricedSet::new(enum = nil) { |rset, o| ... }
565
+ # Creates a new restricted set containing the elements of the given
566
+ # enumerable object. Restrictions are defined by the given block.
567
+ #
568
+ # If the block's arity is 2, it is called with the RestrictedSet
569
+ # itself and an object to see if the object is allowed to be put in
570
+ # the set.
571
+ #
572
+ # Otherwise, the block is called with an object to see if the object
573
+ # is allowed to be put in the set.
574
+ #
575
+ # === Instance Methods
576
+ # --- restriction_proc
577
+ # Returns the restriction procedure of the set.
578
+ #
579
+ # =end
580
+ #
581
+ # class RestricedSet < Set
582
+ # def initialize(*args, &block)
583
+ # @proc = block or raise ArgumentError, "missing a block"
584
+ #
585
+ # if @proc.arity == 2
586
+ # instance_eval %{
587
+ # def add(o)
588
+ # @hash[o] = true if @proc.call(self, o)
589
+ # self
590
+ # end
591
+ # alias << add
592
+ #
593
+ # def add?(o)
594
+ # if include?(o) || !@proc.call(self, o)
595
+ # nil
596
+ # else
597
+ # @hash[o] = true
598
+ # self
599
+ # end
600
+ # end
601
+ #
602
+ # def replace(enum)
603
+ # clear
604
+ # enum.each { |o| add(o) }
605
+ #
606
+ # self
607
+ # end
608
+ #
609
+ # def merge(enum)
610
+ # enum.each { |o| add(o) }
611
+ #
612
+ # self
613
+ # end
614
+ # }
615
+ # else
616
+ # instance_eval %{
617
+ # def add(o)
618
+ # if @proc.call(o)
619
+ # @hash[o] = true
620
+ # end
621
+ # self
622
+ # end
623
+ # alias << add
624
+ #
625
+ # def add?(o)
626
+ # if include?(o) || !@proc.call(o)
627
+ # nil
628
+ # else
629
+ # @hash[o] = true
630
+ # self
631
+ # end
632
+ # end
633
+ # }
634
+ # end
635
+ #
636
+ # super(*args)
637
+ # end
638
+ #
639
+ # def restriction_proc
640
+ # @proc
641
+ # end
642
+ # end
643
+
644
+ if $0 == __FILE__
645
+ eval DATA.read, nil, $0, __LINE__+4
646
+ end
647
+
648
+ __END__
649
+
650
+ require 'test/unit'
651
+
652
+ class TC_Set < Test::Unit::TestCase
653
+ def test_aref
654
+ assert_nothing_raised {
655
+ Set[]
656
+ Set[nil]
657
+ Set[1,2,3]
658
+ }
659
+
660
+ assert_equal(0, Set[].size)
661
+ assert_equal(1, Set[nil].size)
662
+ assert_equal(1, Set[[]].size)
663
+ assert_equal(1, Set[[nil]].size)
664
+
665
+ set = Set[2,4,6,4]
666
+ assert_equal(Set.new([2,4,6]), set)
667
+ end
668
+
669
+ def test_s_new
670
+ assert_nothing_raised {
671
+ Set.new()
672
+ Set.new(nil)
673
+ Set.new([])
674
+ Set.new([1,2])
675
+ Set.new('a'..'c')
676
+ }
677
+ assert_raises(NoMethodError) {
678
+ Set.new(false)
679
+ }
680
+ assert_raises(NoMethodError) {
681
+ Set.new(1)
682
+ }
683
+ assert_raises(ArgumentError) {
684
+ Set.new(1,2)
685
+ }
686
+
687
+ assert_equal(0, Set.new().size)
688
+ assert_equal(0, Set.new(nil).size)
689
+ assert_equal(0, Set.new([]).size)
690
+ assert_equal(1, Set.new([nil]).size)
691
+
692
+ ary = [2,4,6,4]
693
+ set = Set.new(ary)
694
+ ary.clear
695
+ assert_equal(false, set.empty?)
696
+ assert_equal(3, set.size)
697
+
698
+ ary = [1,2,3]
699
+
700
+ s = Set.new(ary) { |o| o * 2 }
701
+ assert_equal([2,4,6], s.sort)
702
+ end
703
+
704
+ def test_clone
705
+ set1 = Set.new
706
+ set2 = set1.clone
707
+ set1 << 'abc'
708
+ assert_equal(Set.new, set2)
709
+ end
710
+
711
+ def test_dup
712
+ set1 = Set[1,2]
713
+ set2 = set1.dup
714
+
715
+ assert_not_same(set1, set2)
716
+
717
+ assert_equal(set1, set2)
718
+
719
+ set1.add(3)
720
+
721
+ assert_not_equal(set1, set2)
722
+ end
723
+
724
+ def test_size
725
+ assert_equal(0, Set[].size)
726
+ assert_equal(2, Set[1,2].size)
727
+ assert_equal(2, Set[1,2,1].size)
728
+ end
729
+
730
+ def test_empty?
731
+ assert_equal(true, Set[].empty?)
732
+ assert_equal(false, Set[1, 2].empty?)
733
+ end
734
+
735
+ def test_clear
736
+ set = Set[1,2]
737
+ ret = set.clear
738
+
739
+ assert_same(set, ret)
740
+ assert_equal(true, set.empty?)
741
+ end
742
+
743
+ def test_replace
744
+ set = Set[1,2]
745
+ ret = set.replace('a'..'c')
746
+
747
+ assert_same(set, ret)
748
+ assert_equal(Set['a','b','c'], set)
749
+ end
750
+
751
+ def test_to_a
752
+ set = Set[1,2,3,2]
753
+ ary = set.to_a
754
+
755
+ assert_equal([1,2,3], ary.sort)
756
+ end
757
+
758
+ def test_flatten
759
+ # test1
760
+ set1 = Set[
761
+ 1,
762
+ Set[
763
+ 5,
764
+ Set[7,
765
+ Set[0]
766
+ ],
767
+ Set[6,2],
768
+ 1
769
+ ],
770
+ 3,
771
+ Set[3,4]
772
+ ]
773
+
774
+ set2 = set1.flatten
775
+ set3 = Set.new(0..7)
776
+
777
+ assert_not_same(set2, set1)
778
+ assert_equal(set3, set2)
779
+
780
+ # test2; destructive
781
+ orig_set1 = set1
782
+ set1.flatten!
783
+
784
+ assert_same(orig_set1, set1)
785
+ assert_equal(set3, set1)
786
+
787
+ # test3; multiple occurrences of a set in an set
788
+ set1 = Set[1, 2]
789
+ set2 = Set[set1, Set[set1, 4], 3]
790
+
791
+ assert_nothing_raised {
792
+ set2.flatten!
793
+ }
794
+
795
+ assert_equal(Set.new(1..4), set2)
796
+
797
+ # test4; recursion
798
+ set2 = Set[]
799
+ set1 = Set[1, set2]
800
+ set2.add(set1)
801
+
802
+ assert_raises(ArgumentError) {
803
+ set1.flatten!
804
+ }
805
+
806
+ # test5; miscellaneous
807
+ empty = Set[]
808
+ set = Set[Set[empty, "a"],Set[empty, "b"]]
809
+
810
+ assert_nothing_raised {
811
+ set.flatten
812
+ }
813
+
814
+ set1 = empty.merge(Set["no_more", set])
815
+
816
+ assert_nil(Set.new(0..31).flatten!)
817
+
818
+ x = Set[Set[],Set[1,2]].flatten!
819
+ y = Set[1,2]
820
+
821
+ assert_equal(x, y)
822
+ end
823
+
824
+ def test_include?
825
+ set = Set[1,2,3]
826
+
827
+ assert_equal(true, set.include?(1))
828
+ assert_equal(true, set.include?(2))
829
+ assert_equal(true, set.include?(3))
830
+ assert_equal(false, set.include?(0))
831
+ assert_equal(false, set.include?(nil))
832
+
833
+ set = Set["1",nil,"2",nil,"0","1",false]
834
+ assert_equal(true, set.include?(nil))
835
+ assert_equal(true, set.include?(false))
836
+ assert_equal(true, set.include?("1"))
837
+ assert_equal(false, set.include?(0))
838
+ assert_equal(false, set.include?(true))
839
+ end
840
+
841
+ def test_superset?
842
+ set = Set[1,2,3]
843
+
844
+ assert_raises(ArgumentError) {
845
+ set.superset?()
846
+ }
847
+
848
+ assert_raises(ArgumentError) {
849
+ set.superset?(2)
850
+ }
851
+
852
+ assert_raises(ArgumentError) {
853
+ set.superset?([2])
854
+ }
855
+
856
+ assert_equal(true, set.superset?(Set[]))
857
+ assert_equal(true, set.superset?(Set[1,2]))
858
+ assert_equal(true, set.superset?(Set[1,2,3]))
859
+ assert_equal(false, set.superset?(Set[1,2,3,4]))
860
+ assert_equal(false, set.superset?(Set[1,4]))
861
+
862
+ assert_equal(true, Set[].superset?(Set[]))
863
+ end
864
+
865
+ def test_proper_superset?
866
+ set = Set[1,2,3]
867
+
868
+ assert_raises(ArgumentError) {
869
+ set.proper_superset?()
870
+ }
871
+
872
+ assert_raises(ArgumentError) {
873
+ set.proper_superset?(2)
874
+ }
875
+
876
+ assert_raises(ArgumentError) {
877
+ set.proper_superset?([2])
878
+ }
879
+
880
+ assert_equal(true, set.proper_superset?(Set[]))
881
+ assert_equal(true, set.proper_superset?(Set[1,2]))
882
+ assert_equal(false, set.proper_superset?(Set[1,2,3]))
883
+ assert_equal(false, set.proper_superset?(Set[1,2,3,4]))
884
+ assert_equal(false, set.proper_superset?(Set[1,4]))
885
+
886
+ assert_equal(false, Set[].proper_superset?(Set[]))
887
+ end
888
+
889
+ def test_subset?
890
+ set = Set[1,2,3]
891
+
892
+ assert_raises(ArgumentError) {
893
+ set.subset?()
894
+ }
895
+
896
+ assert_raises(ArgumentError) {
897
+ set.subset?(2)
898
+ }
899
+
900
+ assert_raises(ArgumentError) {
901
+ set.subset?([2])
902
+ }
903
+
904
+ assert_equal(true, set.subset?(Set[1,2,3,4]))
905
+ assert_equal(true, set.subset?(Set[1,2,3]))
906
+ assert_equal(false, set.subset?(Set[1,2]))
907
+ assert_equal(false, set.subset?(Set[]))
908
+
909
+ assert_equal(true, Set[].subset?(Set[1]))
910
+ assert_equal(true, Set[].subset?(Set[]))
911
+ end
912
+
913
+ def test_proper_subset?
914
+ set = Set[1,2,3]
915
+
916
+ assert_raises(ArgumentError) {
917
+ set.proper_subset?()
918
+ }
919
+
920
+ assert_raises(ArgumentError) {
921
+ set.proper_subset?(2)
922
+ }
923
+
924
+ assert_raises(ArgumentError) {
925
+ set.proper_subset?([2])
926
+ }
927
+
928
+ assert_equal(true, set.proper_subset?(Set[1,2,3,4]))
929
+ assert_equal(false, set.proper_subset?(Set[1,2,3]))
930
+ assert_equal(false, set.proper_subset?(Set[1,2]))
931
+ assert_equal(false, set.proper_subset?(Set[]))
932
+
933
+ assert_equal(false, Set[].proper_subset?(Set[]))
934
+ end
935
+
936
+ def test_each
937
+ ary = [1,3,5,7,10,20]
938
+ set = Set.new(ary)
939
+
940
+ ret = set.each { |o| }
941
+ assert_same(set, ret)
942
+
943
+ e = set.each
944
+ assert_instance_of(Enumerator, e)
945
+
946
+ assert_nothing_raised {
947
+ set.each { |o|
948
+ ary.delete(o) or raise "unexpected element: #{o}"
949
+ }
950
+
951
+ ary.empty? or raise "forgotten elements: #{ary.join(', ')}"
952
+ }
953
+ end
954
+
955
+ def test_add
956
+ set = Set[1,2,3]
957
+
958
+ ret = set.add(2)
959
+ assert_same(set, ret)
960
+ assert_equal(Set[1,2,3], set)
961
+
962
+ ret = set.add?(2)
963
+ assert_nil(ret)
964
+ assert_equal(Set[1,2,3], set)
965
+
966
+ ret = set.add(4)
967
+ assert_same(set, ret)
968
+ assert_equal(Set[1,2,3,4], set)
969
+
970
+ ret = set.add?(5)
971
+ assert_same(set, ret)
972
+ assert_equal(Set[1,2,3,4,5], set)
973
+ end
974
+
975
+ def test_delete
976
+ set = Set[1,2,3]
977
+
978
+ ret = set.delete(4)
979
+ assert_same(set, ret)
980
+ assert_equal(Set[1,2,3], set)
981
+
982
+ ret = set.delete?(4)
983
+ assert_nil(ret)
984
+ assert_equal(Set[1,2,3], set)
985
+
986
+ ret = set.delete(2)
987
+ assert_equal(set, ret)
988
+ assert_equal(Set[1,3], set)
989
+
990
+ ret = set.delete?(1)
991
+ assert_equal(set, ret)
992
+ assert_equal(Set[3], set)
993
+ end
994
+
995
+ def test_delete_if
996
+ set = Set.new(1..10)
997
+ ret = set.delete_if { |i| i > 10 }
998
+ assert_same(set, ret)
999
+ assert_equal(Set.new(1..10), set)
1000
+
1001
+ set = Set.new(1..10)
1002
+ ret = set.delete_if { |i| i % 3 == 0 }
1003
+ assert_same(set, ret)
1004
+ assert_equal(Set[1,2,4,5,7,8,10], set)
1005
+ end
1006
+
1007
+ def test_collect!
1008
+ set = Set[1,2,3,'a','b','c',-1..1,2..4]
1009
+
1010
+ ret = set.collect! { |i|
1011
+ case i
1012
+ when Numeric
1013
+ i * 2
1014
+ when String
1015
+ i.upcase
1016
+ else
1017
+ nil
1018
+ end
1019
+ }
1020
+
1021
+ assert_same(set, ret)
1022
+ assert_equal(Set[2,4,6,'A','B','C',nil], set)
1023
+ end
1024
+
1025
+ def test_reject!
1026
+ set = Set.new(1..10)
1027
+
1028
+ ret = set.reject! { |i| i > 10 }
1029
+ assert_nil(ret)
1030
+ assert_equal(Set.new(1..10), set)
1031
+
1032
+ ret = set.reject! { |i| i % 3 == 0 }
1033
+ assert_same(set, ret)
1034
+ assert_equal(Set[1,2,4,5,7,8,10], set)
1035
+ end
1036
+
1037
+ def test_merge
1038
+ set = Set[1,2,3]
1039
+
1040
+ ret = set.merge([2,4,6])
1041
+ assert_same(set, ret)
1042
+ assert_equal(Set[1,2,3,4,6], set)
1043
+ end
1044
+
1045
+ def test_subtract
1046
+ set = Set[1,2,3]
1047
+
1048
+ ret = set.subtract([2,4,6])
1049
+ assert_same(set, ret)
1050
+ assert_equal(Set[1,3], set)
1051
+ end
1052
+
1053
+ def test_plus
1054
+ set = Set[1,2,3]
1055
+
1056
+ ret = set + [2,4,6]
1057
+ assert_not_same(set, ret)
1058
+ assert_equal(Set[1,2,3,4,6], ret)
1059
+ end
1060
+
1061
+ def test_minus
1062
+ set = Set[1,2,3]
1063
+
1064
+ ret = set - [2,4,6]
1065
+ assert_not_same(set, ret)
1066
+ assert_equal(Set[1,3], ret)
1067
+ end
1068
+
1069
+ def test_and
1070
+ set = Set[1,2,3,4]
1071
+
1072
+ ret = set & [2,4,6]
1073
+ assert_not_same(set, ret)
1074
+ assert_equal(Set[2,4], ret)
1075
+ end
1076
+
1077
+ def test_xor
1078
+ set = Set[1,2,3,4]
1079
+ ret = set ^ [2,4,5,5]
1080
+ assert_not_same(set, ret)
1081
+ assert_equal(Set[1,3,5], ret)
1082
+ end
1083
+
1084
+ def test_eq
1085
+ set1 = Set[2,3,1]
1086
+ set2 = Set[1,2,3]
1087
+
1088
+ assert_equal(set1, set1)
1089
+ assert_equal(set1, set2)
1090
+ assert_not_equal(Set[1], [1])
1091
+
1092
+ set1 = Class.new(Set)["a", "b"]
1093
+ set2 = Set["a", "b", set1]
1094
+ set1 = set1.add(set1.clone)
1095
+
1096
+ # assert_equal(set1, set2)
1097
+ # assert_equal(set2, set1)
1098
+ assert_equal(set2, set2.clone)
1099
+ assert_equal(set1.clone, set1)
1100
+
1101
+ assert_not_equal(Set[Exception.new,nil], Set[Exception.new,Exception.new], "[ruby-dev:26127]")
1102
+ end
1103
+
1104
+ # def test_hash
1105
+ # end
1106
+
1107
+ # def test_eql?
1108
+ # end
1109
+
1110
+ def test_classify
1111
+ set = Set.new(1..10)
1112
+ ret = set.classify { |i| i % 3 }
1113
+
1114
+ assert_equal(3, ret.size)
1115
+ assert_instance_of(Hash, ret)
1116
+ ret.each_value { |value| assert_instance_of(Set, value) }
1117
+ assert_equal(Set[3,6,9], ret[0])
1118
+ assert_equal(Set[1,4,7,10], ret[1])
1119
+ assert_equal(Set[2,5,8], ret[2])
1120
+ end
1121
+
1122
+ def test_divide
1123
+ set = Set.new(1..10)
1124
+ ret = set.divide { |i| i % 3 }
1125
+
1126
+ assert_equal(3, ret.size)
1127
+ n = 0
1128
+ ret.each { |s| n += s.size }
1129
+ assert_equal(set.size, n)
1130
+ assert_equal(set, ret.flatten)
1131
+
1132
+ set = Set[7,10,5,11,1,3,4,9,0]
1133
+ ret = set.divide { |a,b| (a - b).abs == 1 }
1134
+
1135
+ assert_equal(4, ret.size)
1136
+ n = 0
1137
+ ret.each { |s| n += s.size }
1138
+ assert_equal(set.size, n)
1139
+ assert_equal(set, ret.flatten)
1140
+ ret.each { |s|
1141
+ if s.include?(0)
1142
+ assert_equal(Set[0,1], s)
1143
+ elsif s.include?(3)
1144
+ assert_equal(Set[3,4,5], s)
1145
+ elsif s.include?(7)
1146
+ assert_equal(Set[7], s)
1147
+ elsif s.include?(9)
1148
+ assert_equal(Set[9,10,11], s)
1149
+ else
1150
+ raise "unexpected group: #{s.inspect}"
1151
+ end
1152
+ }
1153
+ end
1154
+
1155
+ def test_inspect
1156
+ set1 = Set[1]
1157
+
1158
+ assert_equal('#<Set: {1}>', set1.inspect)
1159
+
1160
+ set2 = Set[Set[0], 1, 2, set1]
1161
+ assert_equal(false, set2.inspect.include?('#<Set: {...}>'))
1162
+
1163
+ set1.add(set2)
1164
+ assert_equal(true, set1.inspect.include?('#<Set: {...}>'))
1165
+ end
1166
+
1167
+ # def test_pretty_print
1168
+ # end
1169
+
1170
+ # def test_pretty_print_cycle
1171
+ # end
1172
+ end
1173
+
1174
+ class TC_SortedSet < Test::Unit::TestCase
1175
+ def test_sortedset
1176
+ s = SortedSet[4,5,3,1,2]
1177
+
1178
+ assert_equal([1,2,3,4,5], s.to_a)
1179
+
1180
+ prev = nil
1181
+ s.each { |o| assert(prev < o) if prev; prev = o }
1182
+ assert_not_nil(prev)
1183
+
1184
+ s.map! { |o| -2 * o }
1185
+
1186
+ assert_equal([-10,-8,-6,-4,-2], s.to_a)
1187
+
1188
+ prev = nil
1189
+ ret = s.each { |o| assert(prev < o) if prev; prev = o }
1190
+ assert_not_nil(prev)
1191
+ assert_same(s, ret)
1192
+
1193
+ s = SortedSet.new([2,1,3]) { |o| o * -2 }
1194
+ assert_equal([-6,-4,-2], s.to_a)
1195
+
1196
+ s = SortedSet.new(['one', 'two', 'three', 'four'])
1197
+ a = []
1198
+ ret = s.delete_if { |o| a << o; o.start_with?('t') }
1199
+ assert_same(s, ret)
1200
+ assert_equal(['four', 'one'], s.to_a)
1201
+ assert_equal(['four', 'one', 'three', 'two'], a)
1202
+
1203
+ s = SortedSet.new(['one', 'two', 'three', 'four'])
1204
+ a = []
1205
+ ret = s.reject! { |o| a << o; o.start_with?('t') }
1206
+ assert_same(s, ret)
1207
+ assert_equal(['four', 'one'], s.to_a)
1208
+ assert_equal(['four', 'one', 'three', 'two'], a)
1209
+
1210
+ s = SortedSet.new(['one', 'two', 'three', 'four'])
1211
+ a = []
1212
+ ret = s.reject! { |o| a << o; false }
1213
+ assert_same(nil, ret)
1214
+ assert_equal(['four', 'one', 'three', 'two'], s.to_a)
1215
+ assert_equal(['four', 'one', 'three', 'two'], a)
1216
+ end
1217
+ end
1218
+
1219
+ class TC_Enumerable < Test::Unit::TestCase
1220
+ def test_to_set
1221
+ ary = [2,5,4,3,2,1,3]
1222
+
1223
+ set = ary.to_set
1224
+ assert_instance_of(Set, set)
1225
+ assert_equal([1,2,3,4,5], set.sort)
1226
+
1227
+ set = ary.to_set { |o| o * -2 }
1228
+ assert_instance_of(Set, set)
1229
+ assert_equal([-10,-8,-6,-4,-2], set.sort)
1230
+
1231
+ set = ary.to_set(SortedSet)
1232
+ assert_instance_of(SortedSet, set)
1233
+ assert_equal([1,2,3,4,5], set.to_a)
1234
+
1235
+ set = ary.to_set(SortedSet) { |o| o * -2 }
1236
+ assert_instance_of(SortedSet, set)
1237
+ assert_equal([-10,-8,-6,-4,-2], set.sort)
1238
+ end
1239
+ end
1240
+
1241
+ # class TC_RestricedSet < Test::Unit::TestCase
1242
+ # def test_s_new
1243
+ # assert_raises(ArgumentError) { RestricedSet.new }
1244
+ #
1245
+ # s = RestricedSet.new([-1,2,3]) { |o| o > 0 }
1246
+ # assert_equal([2,3], s.sort)
1247
+ # end
1248
+ #
1249
+ # def test_restriction_proc
1250
+ # s = RestricedSet.new([-1,2,3]) { |o| o > 0 }
1251
+ #
1252
+ # f = s.restriction_proc
1253
+ # assert_instance_of(Proc, f)
1254
+ # assert(f[1])
1255
+ # assert(!f[0])
1256
+ # end
1257
+ #
1258
+ # def test_replace
1259
+ # s = RestricedSet.new(-3..3) { |o| o > 0 }
1260
+ # assert_equal([1,2,3], s.sort)
1261
+ #
1262
+ # s.replace([-2,0,3,4,5])
1263
+ # assert_equal([3,4,5], s.sort)
1264
+ # end
1265
+ #
1266
+ # def test_merge
1267
+ # s = RestricedSet.new { |o| o > 0 }
1268
+ # s.merge(-5..5)
1269
+ # assert_equal([1,2,3,4,5], s.sort)
1270
+ #
1271
+ # s.merge([10,-10,-8,8])
1272
+ # assert_equal([1,2,3,4,5,8,10], s.sort)
1273
+ # end
1274
+ # end