shoesgem 0.1424.0

Sign up to get free protection for your applications and to get access to all the features.
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,1099 @@
1
+ #
2
+ # = pathname.rb
3
+ #
4
+ # Object-Oriented Pathname Class
5
+ #
6
+ # Author:: Tanaka Akira <akr@m17n.org>
7
+ # Documentation:: Author and Gavin Sinclair
8
+ #
9
+ # For documentation, see class Pathname.
10
+ #
11
+ # <tt>pathname.rb</tt> is distributed with Ruby since 1.8.0.
12
+ #
13
+
14
+ #
15
+ # == Pathname
16
+ #
17
+ # Pathname represents a pathname which locates a file in a filesystem.
18
+ # The pathname depends on OS: Unix, Windows, etc.
19
+ # Pathname library works with pathnames of local OS.
20
+ # However non-Unix pathnames are supported experimentally.
21
+ #
22
+ # It does not represent the file itself.
23
+ # A Pathname can be relative or absolute. It's not until you try to
24
+ # reference the file that it even matters whether the file exists or not.
25
+ #
26
+ # Pathname is immutable. It has no method for destructive update.
27
+ #
28
+ # The value of this class is to manipulate file path information in a neater
29
+ # way than standard Ruby provides. The examples below demonstrate the
30
+ # difference. *All* functionality from File, FileTest, and some from Dir and
31
+ # FileUtils is included, in an unsurprising way. It is essentially a facade for
32
+ # all of these, and more.
33
+ #
34
+ # == Examples
35
+ #
36
+ # === Example 1: Using Pathname
37
+ #
38
+ # require 'pathname'
39
+ # p = Pathname.new("/usr/bin/ruby")
40
+ # size = p.size # 27662
41
+ # isdir = p.directory? # false
42
+ # dir = p.dirname # Pathname:/usr/bin
43
+ # base = p.basename # Pathname:ruby
44
+ # dir, base = p.split # [Pathname:/usr/bin, Pathname:ruby]
45
+ # data = p.read
46
+ # p.open { |f| _ }
47
+ # p.each_line { |line| _ }
48
+ #
49
+ # === Example 2: Using standard Ruby
50
+ #
51
+ # p = "/usr/bin/ruby"
52
+ # size = File.size(p) # 27662
53
+ # isdir = File.directory?(p) # false
54
+ # dir = File.dirname(p) # "/usr/bin"
55
+ # base = File.basename(p) # "ruby"
56
+ # dir, base = File.split(p) # ["/usr/bin", "ruby"]
57
+ # data = File.read(p)
58
+ # File.open(p) { |f| _ }
59
+ # File.foreach(p) { |line| _ }
60
+ #
61
+ # === Example 3: Special features
62
+ #
63
+ # p1 = Pathname.new("/usr/lib") # Pathname:/usr/lib
64
+ # p2 = p1 + "ruby/1.8" # Pathname:/usr/lib/ruby/1.8
65
+ # p3 = p1.parent # Pathname:/usr
66
+ # p4 = p2.relative_path_from(p3) # Pathname:lib/ruby/1.8
67
+ # pwd = Pathname.pwd # Pathname:/home/gavin
68
+ # pwd.absolute? # true
69
+ # p5 = Pathname.new "." # Pathname:.
70
+ # p5 = p5 + "music/../articles" # Pathname:music/../articles
71
+ # p5.cleanpath # Pathname:articles
72
+ # p5.realpath # Pathname:/home/gavin/articles
73
+ # p5.children # [Pathname:/home/gavin/articles/linux, ...]
74
+ #
75
+ # == Breakdown of functionality
76
+ #
77
+ # === Core methods
78
+ #
79
+ # These methods are effectively manipulating a String, because that's all a path
80
+ # is. Except for #mountpoint?, #children, and #realpath, they don't access the
81
+ # filesystem.
82
+ #
83
+ # - +
84
+ # - #join
85
+ # - #parent
86
+ # - #root?
87
+ # - #absolute?
88
+ # - #relative?
89
+ # - #relative_path_from
90
+ # - #each_filename
91
+ # - #cleanpath
92
+ # - #realpath
93
+ # - #children
94
+ # - #mountpoint?
95
+ #
96
+ # === File status predicate methods
97
+ #
98
+ # These methods are a facade for FileTest:
99
+ # - #blockdev?
100
+ # - #chardev?
101
+ # - #directory?
102
+ # - #executable?
103
+ # - #executable_real?
104
+ # - #exist?
105
+ # - #file?
106
+ # - #grpowned?
107
+ # - #owned?
108
+ # - #pipe?
109
+ # - #readable?
110
+ # - #world_readable?
111
+ # - #readable_real?
112
+ # - #setgid?
113
+ # - #setuid?
114
+ # - #size
115
+ # - #size?
116
+ # - #socket?
117
+ # - #sticky?
118
+ # - #symlink?
119
+ # - #writable?
120
+ # - #world_writable?
121
+ # - #writable_real?
122
+ # - #zero?
123
+ #
124
+ # === File property and manipulation methods
125
+ #
126
+ # These methods are a facade for File:
127
+ # - #atime
128
+ # - #ctime
129
+ # - #mtime
130
+ # - #chmod(mode)
131
+ # - #lchmod(mode)
132
+ # - #chown(owner, group)
133
+ # - #lchown(owner, group)
134
+ # - #fnmatch(pattern, *args)
135
+ # - #fnmatch?(pattern, *args)
136
+ # - #ftype
137
+ # - #make_link(old)
138
+ # - #open(*args, &block)
139
+ # - #readlink
140
+ # - #rename(to)
141
+ # - #stat
142
+ # - #lstat
143
+ # - #make_symlink(old)
144
+ # - #truncate(length)
145
+ # - #utime(atime, mtime)
146
+ # - #basename(*args)
147
+ # - #dirname
148
+ # - #extname
149
+ # - #expand_path(*args)
150
+ # - #split
151
+ #
152
+ # === Directory methods
153
+ #
154
+ # These methods are a facade for Dir:
155
+ # - Pathname.glob(*args)
156
+ # - Pathname.getwd / Pathname.pwd
157
+ # - #rmdir
158
+ # - #entries
159
+ # - #each_entry(&block)
160
+ # - #mkdir(*args)
161
+ # - #opendir(*args)
162
+ #
163
+ # === IO
164
+ #
165
+ # These methods are a facade for IO:
166
+ # - #each_line(*args, &block)
167
+ # - #read(*args)
168
+ # - #readlines(*args)
169
+ # - #sysopen(*args)
170
+ #
171
+ # === Utilities
172
+ #
173
+ # These methods are a mixture of Find, FileUtils, and others:
174
+ # - #find(&block)
175
+ # - #mkpath
176
+ # - #rmtree
177
+ # - #unlink / #delete
178
+ #
179
+ #
180
+ # == Method documentation
181
+ #
182
+ # As the above section shows, most of the methods in Pathname are facades. The
183
+ # documentation for these methods generally just says, for instance, "See
184
+ # FileTest.writable?", as you should be familiar with the original method
185
+ # anyway, and its documentation (e.g. through +ri+) will contain more
186
+ # information. In some cases, a brief description will follow.
187
+ #
188
+ class Pathname
189
+
190
+ # :stopdoc:
191
+ if RUBY_VERSION < "1.9"
192
+ TO_PATH = :to_str
193
+ else
194
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
195
+ TO_PATH = :to_path
196
+ end
197
+
198
+ SAME_PATHS = if File::FNM_SYSCASE
199
+ proc {|a, b| a.casecmp(b).zero?}
200
+ else
201
+ proc {|a, b| a == b}
202
+ end
203
+
204
+ # :startdoc:
205
+
206
+ #
207
+ # Create a Pathname object from the given String (or String-like object).
208
+ # If +path+ contains a NUL character (<tt>\0</tt>), an ArgumentError is raised.
209
+ #
210
+ def initialize(path)
211
+ path = path.__send__(TO_PATH) if path.respond_to? TO_PATH
212
+ @path = path.dup
213
+
214
+ if /\0/ =~ @path
215
+ raise ArgumentError, "pathname contains \\0: #{@path.inspect}"
216
+ end
217
+
218
+ self.taint if @path.tainted?
219
+ end
220
+
221
+ def freeze() super; @path.freeze; self end
222
+ def taint() super; @path.taint; self end
223
+ def untaint() super; @path.untaint; self end
224
+
225
+ #
226
+ # Compare this pathname with +other+. The comparison is string-based.
227
+ # Be aware that two different paths (<tt>foo.txt</tt> and <tt>./foo.txt</tt>)
228
+ # can refer to the same file.
229
+ #
230
+ def ==(other)
231
+ return false unless Pathname === other
232
+ other.to_s == @path
233
+ end
234
+ alias === ==
235
+ alias eql? ==
236
+
237
+ # Provides for comparing pathnames, case-sensitively.
238
+ def <=>(other)
239
+ return nil unless Pathname === other
240
+ @path.tr('/', "\0") <=> other.to_s.tr('/', "\0")
241
+ end
242
+
243
+ def hash # :nodoc:
244
+ @path.hash
245
+ end
246
+
247
+ # Return the path as a String.
248
+ def to_s
249
+ @path.dup
250
+ end
251
+
252
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
253
+ alias_method TO_PATH, :to_s
254
+
255
+ def inspect # :nodoc:
256
+ "#<#{self.class}:#{@path}>"
257
+ end
258
+
259
+ # Return a pathname which is substituted by String#sub.
260
+ def sub(pattern, *rest, &block)
261
+ if block
262
+ path = @path.sub(pattern, *rest) {|*args|
263
+ begin
264
+ old = Thread.current[:pathname_sub_matchdata]
265
+ Thread.current[:pathname_sub_matchdata] = $~
266
+ eval("$~ = Thread.current[:pathname_sub_matchdata]", block.binding)
267
+ ensure
268
+ Thread.current[:pathname_sub_matchdata] = old
269
+ end
270
+ yield *args
271
+ }
272
+ else
273
+ path = @path.sub(pattern, *rest)
274
+ end
275
+ self.class.new(path)
276
+ end
277
+
278
+ if File::ALT_SEPARATOR
279
+ SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}"
280
+ SEPARATOR_PAT = /[#{SEPARATOR_LIST}]/
281
+ else
282
+ SEPARATOR_LIST = "#{Regexp.quote File::SEPARATOR}"
283
+ SEPARATOR_PAT = /#{Regexp.quote File::SEPARATOR}/
284
+ end
285
+
286
+ # Return a pathname which the extension of the basename is substituted by
287
+ # <i>repl</i>.
288
+ #
289
+ # If self has no extension part, <i>repl</i> is appended.
290
+ def sub_ext(repl)
291
+ ext = File.extname(@path)
292
+ self.class.new(@path.chomp(ext) + repl)
293
+ end
294
+
295
+ # chop_basename(path) -> [pre-basename, basename] or nil
296
+ def chop_basename(path)
297
+ base = File.basename(path)
298
+ if /\A#{SEPARATOR_PAT}?\z/ =~ base
299
+ return nil
300
+ else
301
+ return path[0, path.rindex(base)], base
302
+ end
303
+ end
304
+ private :chop_basename
305
+
306
+ # split_names(path) -> prefix, [name, ...]
307
+ def split_names(path)
308
+ names = []
309
+ while r = chop_basename(path)
310
+ path, basename = r
311
+ names.unshift basename
312
+ end
313
+ return path, names
314
+ end
315
+ private :split_names
316
+
317
+ def prepend_prefix(prefix, relpath)
318
+ if relpath.empty?
319
+ File.dirname(prefix)
320
+ elsif /#{SEPARATOR_PAT}/ =~ prefix
321
+ prefix = File.dirname(prefix)
322
+ prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a'
323
+ prefix + relpath
324
+ else
325
+ prefix + relpath
326
+ end
327
+ end
328
+ private :prepend_prefix
329
+
330
+ # Returns clean pathname of +self+ with consecutive slashes and useless dots
331
+ # removed. The filesystem is not accessed.
332
+ #
333
+ # If +consider_symlink+ is +true+, then a more conservative algorithm is used
334
+ # to avoid breaking symbolic linkages. This may retain more <tt>..</tt>
335
+ # entries than absolutely necessary, but without accessing the filesystem,
336
+ # this can't be avoided. See #realpath.
337
+ #
338
+ def cleanpath(consider_symlink=false)
339
+ if consider_symlink
340
+ cleanpath_conservative
341
+ else
342
+ cleanpath_aggressive
343
+ end
344
+ end
345
+
346
+ #
347
+ # Clean the path simply by resolving and removing excess "." and ".." entries.
348
+ # Nothing more, nothing less.
349
+ #
350
+ def cleanpath_aggressive
351
+ path = @path
352
+ names = []
353
+ pre = path
354
+ while r = chop_basename(pre)
355
+ pre, base = r
356
+ case base
357
+ when '.'
358
+ when '..'
359
+ names.unshift base
360
+ else
361
+ if names[0] == '..'
362
+ names.shift
363
+ else
364
+ names.unshift base
365
+ end
366
+ end
367
+ end
368
+ if /#{SEPARATOR_PAT}/o =~ File.basename(pre)
369
+ names.shift while names[0] == '..'
370
+ end
371
+ self.class.new(prepend_prefix(pre, File.join(*names)))
372
+ end
373
+ private :cleanpath_aggressive
374
+
375
+ # has_trailing_separator?(path) -> bool
376
+ def has_trailing_separator?(path)
377
+ if r = chop_basename(path)
378
+ pre, basename = r
379
+ pre.length + basename.length < path.length
380
+ else
381
+ false
382
+ end
383
+ end
384
+ private :has_trailing_separator?
385
+
386
+ # add_trailing_separator(path) -> path
387
+ def add_trailing_separator(path)
388
+ if File.basename(path + 'a') == 'a'
389
+ path
390
+ else
391
+ File.join(path, "") # xxx: Is File.join is appropriate to add separator?
392
+ end
393
+ end
394
+ private :add_trailing_separator
395
+
396
+ def del_trailing_separator(path)
397
+ if r = chop_basename(path)
398
+ pre, basename = r
399
+ pre + basename
400
+ elsif /#{SEPARATOR_PAT}+\z/o =~ path
401
+ $` + File.dirname(path)[/#{SEPARATOR_PAT}*\z/o]
402
+ else
403
+ path
404
+ end
405
+ end
406
+ private :del_trailing_separator
407
+
408
+ def cleanpath_conservative
409
+ path = @path
410
+ names = []
411
+ pre = path
412
+ while r = chop_basename(pre)
413
+ pre, base = r
414
+ names.unshift base if base != '.'
415
+ end
416
+ if /#{SEPARATOR_PAT}/o =~ File.basename(pre)
417
+ names.shift while names[0] == '..'
418
+ end
419
+ if names.empty?
420
+ self.class.new(File.dirname(pre))
421
+ else
422
+ if names.last != '..' && File.basename(path) == '.'
423
+ names << '.'
424
+ end
425
+ result = prepend_prefix(pre, File.join(*names))
426
+ if /\A(?:\.|\.\.)\z/ !~ names.last && has_trailing_separator?(path)
427
+ self.class.new(add_trailing_separator(result))
428
+ else
429
+ self.class.new(result)
430
+ end
431
+ end
432
+ end
433
+ private :cleanpath_conservative
434
+
435
+ def realpath_rec(prefix, unresolved, h)
436
+ resolved = []
437
+ until unresolved.empty?
438
+ n = unresolved.shift
439
+ if n == '.'
440
+ next
441
+ elsif n == '..'
442
+ resolved.pop
443
+ else
444
+ path = prepend_prefix(prefix, File.join(*(resolved + [n])))
445
+ if h.include? path
446
+ if h[path] == :resolving
447
+ raise Errno::ELOOP.new(path)
448
+ else
449
+ prefix, *resolved = h[path]
450
+ end
451
+ else
452
+ s = File.lstat(path)
453
+ if s.symlink?
454
+ h[path] = :resolving
455
+ link_prefix, link_names = split_names(File.readlink(path))
456
+ if link_prefix == ''
457
+ prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h)
458
+ else
459
+ prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h)
460
+ end
461
+ else
462
+ resolved << n
463
+ h[path] = [prefix, *resolved]
464
+ end
465
+ end
466
+ end
467
+ end
468
+ return prefix, *resolved
469
+ end
470
+ private :realpath_rec
471
+
472
+ #
473
+ # Returns a real (absolute) pathname of +self+ in the actual filesystem.
474
+ # The real pathname doesn't contain symlinks or useless dots.
475
+ #
476
+ # No arguments should be given; the old behaviour is *obsoleted*.
477
+ #
478
+ def realpath
479
+ path = @path
480
+ prefix, names = split_names(path)
481
+ if prefix == ''
482
+ prefix, names2 = split_names(Dir.pwd)
483
+ names = names2 + names
484
+ end
485
+ prefix, *names = realpath_rec(prefix, names, {})
486
+ self.class.new(prepend_prefix(prefix, File.join(*names)))
487
+ end
488
+
489
+ # #parent returns the parent directory.
490
+ #
491
+ # This is same as <tt>self + '..'</tt>.
492
+ def parent
493
+ self + '..'
494
+ end
495
+
496
+ # #mountpoint? returns +true+ if <tt>self</tt> points to a mountpoint.
497
+ def mountpoint?
498
+ begin
499
+ stat1 = self.lstat
500
+ stat2 = self.parent.lstat
501
+ stat1.dev == stat2.dev && stat1.ino == stat2.ino ||
502
+ stat1.dev != stat2.dev
503
+ rescue Errno::ENOENT
504
+ false
505
+ end
506
+ end
507
+
508
+ #
509
+ # #root? is a predicate for root directories. I.e. it returns +true+ if the
510
+ # pathname consists of consecutive slashes.
511
+ #
512
+ # It doesn't access actual filesystem. So it may return +false+ for some
513
+ # pathnames which points to roots such as <tt>/usr/..</tt>.
514
+ #
515
+ def root?
516
+ !!(chop_basename(@path) == nil && /#{SEPARATOR_PAT}/o =~ @path)
517
+ end
518
+
519
+ # Predicate method for testing whether a path is absolute.
520
+ # It returns +true+ if the pathname begins with a slash.
521
+ def absolute?
522
+ !relative?
523
+ end
524
+
525
+ # The opposite of #absolute?
526
+ def relative?
527
+ path = @path
528
+ while r = chop_basename(path)
529
+ path, basename = r
530
+ end
531
+ path == ''
532
+ end
533
+
534
+ #
535
+ # Iterates over each component of the path.
536
+ #
537
+ # Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }
538
+ # # yields "usr", "bin", and "ruby".
539
+ #
540
+ def each_filename # :yield: filename
541
+ return to_enum(__method__) unless block_given?
542
+ prefix, names = split_names(@path)
543
+ names.each {|filename| yield filename }
544
+ nil
545
+ end
546
+
547
+ # Iterates over and yields a new Pathname object
548
+ # for each element in the given path in descending order.
549
+ #
550
+ # Pathname.new('/path/to/some/file.rb').descend {|v| p v}
551
+ # #<Pathname:/>
552
+ # #<Pathname:/path>
553
+ # #<Pathname:/path/to>
554
+ # #<Pathname:/path/to/some>
555
+ # #<Pathname:/path/to/some/file.rb>
556
+ #
557
+ # Pathname.new('path/to/some/file.rb').descend {|v| p v}
558
+ # #<Pathname:path>
559
+ # #<Pathname:path/to>
560
+ # #<Pathname:path/to/some>
561
+ # #<Pathname:path/to/some/file.rb>
562
+ #
563
+ # It doesn't access actual filesystem.
564
+ #
565
+ # This method is available since 1.8.5.
566
+ #
567
+ def descend
568
+ vs = []
569
+ ascend {|v| vs << v }
570
+ vs.reverse_each {|v| yield v }
571
+ nil
572
+ end
573
+
574
+ # Iterates over and yields a new Pathname object
575
+ # for each element in the given path in ascending order.
576
+ #
577
+ # Pathname.new('/path/to/some/file.rb').ascend {|v| p v}
578
+ # #<Pathname:/path/to/some/file.rb>
579
+ # #<Pathname:/path/to/some>
580
+ # #<Pathname:/path/to>
581
+ # #<Pathname:/path>
582
+ # #<Pathname:/>
583
+ #
584
+ # Pathname.new('path/to/some/file.rb').ascend {|v| p v}
585
+ # #<Pathname:path/to/some/file.rb>
586
+ # #<Pathname:path/to/some>
587
+ # #<Pathname:path/to>
588
+ # #<Pathname:path>
589
+ #
590
+ # It doesn't access actual filesystem.
591
+ #
592
+ # This method is available since 1.8.5.
593
+ #
594
+ def ascend
595
+ path = @path
596
+ yield self
597
+ while r = chop_basename(path)
598
+ path, name = r
599
+ break if path.empty?
600
+ yield self.class.new(del_trailing_separator(path))
601
+ end
602
+ end
603
+
604
+ #
605
+ # Pathname#+ appends a pathname fragment to this one to produce a new Pathname
606
+ # object.
607
+ #
608
+ # p1 = Pathname.new("/usr") # Pathname:/usr
609
+ # p2 = p1 + "bin/ruby" # Pathname:/usr/bin/ruby
610
+ # p3 = p1 + "/etc/passwd" # Pathname:/etc/passwd
611
+ #
612
+ # This method doesn't access the file system; it is pure string manipulation.
613
+ #
614
+ def +(other)
615
+ other = Pathname.new(other) unless Pathname === other
616
+ Pathname.new(plus(@path, other.to_s))
617
+ end
618
+
619
+ def plus(path1, path2) # -> path
620
+ prefix2 = path2
621
+ index_list2 = []
622
+ basename_list2 = []
623
+ while r2 = chop_basename(prefix2)
624
+ prefix2, basename2 = r2
625
+ index_list2.unshift prefix2.length
626
+ basename_list2.unshift basename2
627
+ end
628
+ return path2 if prefix2 != ''
629
+ prefix1 = path1
630
+ while true
631
+ while !basename_list2.empty? && basename_list2.first == '.'
632
+ index_list2.shift
633
+ basename_list2.shift
634
+ end
635
+ break unless r1 = chop_basename(prefix1)
636
+ prefix1, basename1 = r1
637
+ next if basename1 == '.'
638
+ if basename1 == '..' || basename_list2.empty? || basename_list2.first != '..'
639
+ prefix1 = prefix1 + basename1
640
+ break
641
+ end
642
+ index_list2.shift
643
+ basename_list2.shift
644
+ end
645
+ r1 = chop_basename(prefix1)
646
+ if !r1 && /#{SEPARATOR_PAT}/o =~ File.basename(prefix1)
647
+ while !basename_list2.empty? && basename_list2.first == '..'
648
+ index_list2.shift
649
+ basename_list2.shift
650
+ end
651
+ end
652
+ if !basename_list2.empty?
653
+ suffix2 = path2[index_list2.first..-1]
654
+ r1 ? File.join(prefix1, suffix2) : prefix1 + suffix2
655
+ else
656
+ r1 ? prefix1 : File.dirname(prefix1)
657
+ end
658
+ end
659
+ private :plus
660
+
661
+ #
662
+ # Pathname#join joins pathnames.
663
+ #
664
+ # <tt>path0.join(path1, ..., pathN)</tt> is the same as
665
+ # <tt>path0 + path1 + ... + pathN</tt>.
666
+ #
667
+ def join(*args)
668
+ args.unshift self
669
+ result = args.pop
670
+ result = Pathname.new(result) unless Pathname === result
671
+ return result if result.absolute?
672
+ args.reverse_each {|arg|
673
+ arg = Pathname.new(arg) unless Pathname === arg
674
+ result = arg + result
675
+ return result if result.absolute?
676
+ }
677
+ result
678
+ end
679
+
680
+ #
681
+ # Returns the children of the directory (files and subdirectories, not
682
+ # recursive) as an array of Pathname objects. By default, the returned
683
+ # pathnames will have enough information to access the files. If you set
684
+ # +with_directory+ to +false+, then the returned pathnames will contain the
685
+ # filename only.
686
+ #
687
+ # For example:
688
+ # p = Pathname("/usr/lib/ruby/1.8")
689
+ # p.children
690
+ # # -> [ Pathname:/usr/lib/ruby/1.8/English.rb,
691
+ # Pathname:/usr/lib/ruby/1.8/Env.rb,
692
+ # Pathname:/usr/lib/ruby/1.8/abbrev.rb, ... ]
693
+ # p.children(false)
694
+ # # -> [ Pathname:English.rb, Pathname:Env.rb, Pathname:abbrev.rb, ... ]
695
+ #
696
+ # Note that the result never contain the entries <tt>.</tt> and <tt>..</tt> in
697
+ # the directory because they are not children.
698
+ #
699
+ # This method has existed since 1.8.1.
700
+ #
701
+ def children(with_directory=true)
702
+ with_directory = false if @path == '.'
703
+ result = []
704
+ Dir.foreach(@path) {|e|
705
+ next if e == '.' || e == '..'
706
+ if with_directory
707
+ result << self.class.new(File.join(@path, e))
708
+ else
709
+ result << self.class.new(e)
710
+ end
711
+ }
712
+ result
713
+ end
714
+
715
+ #
716
+ # #relative_path_from returns a relative path from the argument to the
717
+ # receiver. If +self+ is absolute, the argument must be absolute too. If
718
+ # +self+ is relative, the argument must be relative too.
719
+ #
720
+ # #relative_path_from doesn't access the filesystem. It assumes no symlinks.
721
+ #
722
+ # ArgumentError is raised when it cannot find a relative path.
723
+ #
724
+ # This method has existed since 1.8.1.
725
+ #
726
+ def relative_path_from(base_directory)
727
+ dest_directory = self.cleanpath.to_s
728
+ base_directory = base_directory.cleanpath.to_s
729
+ dest_prefix = dest_directory
730
+ dest_names = []
731
+ while r = chop_basename(dest_prefix)
732
+ dest_prefix, basename = r
733
+ dest_names.unshift basename if basename != '.'
734
+ end
735
+ base_prefix = base_directory
736
+ base_names = []
737
+ while r = chop_basename(base_prefix)
738
+ base_prefix, basename = r
739
+ base_names.unshift basename if basename != '.'
740
+ end
741
+ unless SAME_PATHS[dest_prefix, base_prefix]
742
+ raise ArgumentError, "different prefix: #{dest_prefix.inspect} and #{base_directory.inspect}"
743
+ end
744
+ while !dest_names.empty? &&
745
+ !base_names.empty? &&
746
+ SAME_PATHS[dest_names.first, base_names.first]
747
+ dest_names.shift
748
+ base_names.shift
749
+ end
750
+ if base_names.include? '..'
751
+ raise ArgumentError, "base_directory has ..: #{base_directory.inspect}"
752
+ end
753
+ base_names.fill('..')
754
+ relpath_names = base_names + dest_names
755
+ if relpath_names.empty?
756
+ Pathname.new('.')
757
+ else
758
+ Pathname.new(File.join(*relpath_names))
759
+ end
760
+ end
761
+ end
762
+
763
+ class Pathname # * IO *
764
+ #
765
+ # #each_line iterates over the line in the file. It yields a String object
766
+ # for each line.
767
+ #
768
+ # This method has existed since 1.8.1.
769
+ #
770
+ def each_line(*args, &block) # :yield: line
771
+ IO.foreach(@path, *args, &block)
772
+ end
773
+
774
+ # Pathname#foreachline is *obsoleted* at 1.8.1. Use #each_line.
775
+ def foreachline(*args, &block)
776
+ warn "Pathname#foreachline is obsoleted. Use Pathname#each_line."
777
+ each_line(*args, &block)
778
+ end
779
+
780
+ # See <tt>IO.read</tt>. Returns all the bytes from the file, or the first +N+
781
+ # if specified.
782
+ def read(*args) IO.read(@path, *args) end
783
+
784
+ # See <tt>IO.readlines</tt>. Returns all the lines from the file.
785
+ def readlines(*args) IO.readlines(@path, *args) end
786
+
787
+ # See <tt>IO.sysopen</tt>.
788
+ def sysopen(*args) IO.sysopen(@path, *args) end
789
+ end
790
+
791
+
792
+ class Pathname # * File *
793
+
794
+ # See <tt>File.atime</tt>. Returns last access time.
795
+ def atime() File.atime(@path) end
796
+
797
+ # See <tt>File.ctime</tt>. Returns last (directory entry, not file) change time.
798
+ def ctime() File.ctime(@path) end
799
+
800
+ # See <tt>File.mtime</tt>. Returns last modification time.
801
+ def mtime() File.mtime(@path) end
802
+
803
+ # See <tt>File.chmod</tt>. Changes permissions.
804
+ def chmod(mode) File.chmod(mode, @path) end
805
+
806
+ # See <tt>File.lchmod</tt>.
807
+ def lchmod(mode) File.lchmod(mode, @path) end
808
+
809
+ # See <tt>File.chown</tt>. Change owner and group of file.
810
+ def chown(owner, group) File.chown(owner, group, @path) end
811
+
812
+ # See <tt>File.lchown</tt>.
813
+ def lchown(owner, group) File.lchown(owner, group, @path) end
814
+
815
+ # See <tt>File.fnmatch</tt>. Return +true+ if the receiver matches the given
816
+ # pattern.
817
+ def fnmatch(pattern, *args) File.fnmatch(pattern, @path, *args) end
818
+
819
+ # See <tt>File.fnmatch?</tt> (same as #fnmatch).
820
+ def fnmatch?(pattern, *args) File.fnmatch?(pattern, @path, *args) end
821
+
822
+ # See <tt>File.ftype</tt>. Returns "type" of file ("file", "directory",
823
+ # etc).
824
+ def ftype() File.ftype(@path) end
825
+
826
+ # See <tt>File.link</tt>. Creates a hard link.
827
+ def make_link(old) File.link(old, @path) end
828
+
829
+ # See <tt>File.open</tt>. Opens the file for reading or writing.
830
+ def open(*args, &block) # :yield: file
831
+ File.open(@path, *args, &block)
832
+ end
833
+
834
+ # See <tt>File.readlink</tt>. Read symbolic link.
835
+ def readlink() self.class.new(File.readlink(@path)) end
836
+
837
+ # See <tt>File.rename</tt>. Rename the file.
838
+ def rename(to) File.rename(@path, to) end
839
+
840
+ # See <tt>File.stat</tt>. Returns a <tt>File::Stat</tt> object.
841
+ def stat() File.stat(@path) end
842
+
843
+ # See <tt>File.lstat</tt>.
844
+ def lstat() File.lstat(@path) end
845
+
846
+ # See <tt>File.symlink</tt>. Creates a symbolic link.
847
+ def make_symlink(old) File.symlink(old, @path) end
848
+
849
+ # See <tt>File.truncate</tt>. Truncate the file to +length+ bytes.
850
+ def truncate(length) File.truncate(@path, length) end
851
+
852
+ # See <tt>File.utime</tt>. Update the access and modification times.
853
+ def utime(atime, mtime) File.utime(atime, mtime, @path) end
854
+
855
+ # See <tt>File.basename</tt>. Returns the last component of the path.
856
+ def basename(*args) self.class.new(File.basename(@path, *args)) end
857
+
858
+ # See <tt>File.dirname</tt>. Returns all but the last component of the path.
859
+ def dirname() self.class.new(File.dirname(@path)) end
860
+
861
+ # See <tt>File.extname</tt>. Returns the file's extension.
862
+ def extname() File.extname(@path) end
863
+
864
+ # See <tt>File.expand_path</tt>.
865
+ def expand_path(*args) self.class.new(File.expand_path(@path, *args)) end
866
+
867
+ # See <tt>File.split</tt>. Returns the #dirname and the #basename in an
868
+ # Array.
869
+ def split() File.split(@path).map {|f| self.class.new(f) } end
870
+
871
+ # Pathname#link is confusing and *obsoleted* because the receiver/argument
872
+ # order is inverted to corresponding system call.
873
+ def link(old)
874
+ warn 'Pathname#link is obsoleted. Use Pathname#make_link.'
875
+ File.link(old, @path)
876
+ end
877
+
878
+ # Pathname#symlink is confusing and *obsoleted* because the receiver/argument
879
+ # order is inverted to corresponding system call.
880
+ def symlink(old)
881
+ warn 'Pathname#symlink is obsoleted. Use Pathname#make_symlink.'
882
+ File.symlink(old, @path)
883
+ end
884
+ end
885
+
886
+
887
+ class Pathname # * FileTest *
888
+
889
+ # See <tt>FileTest.blockdev?</tt>.
890
+ def blockdev?() FileTest.blockdev?(@path) end
891
+
892
+ # See <tt>FileTest.chardev?</tt>.
893
+ def chardev?() FileTest.chardev?(@path) end
894
+
895
+ # See <tt>FileTest.executable?</tt>.
896
+ def executable?() FileTest.executable?(@path) end
897
+
898
+ # See <tt>FileTest.executable_real?</tt>.
899
+ def executable_real?() FileTest.executable_real?(@path) end
900
+
901
+ # See <tt>FileTest.exist?</tt>.
902
+ def exist?() FileTest.exist?(@path) end
903
+
904
+ # See <tt>FileTest.grpowned?</tt>.
905
+ def grpowned?() FileTest.grpowned?(@path) end
906
+
907
+ # See <tt>FileTest.directory?</tt>.
908
+ def directory?() FileTest.directory?(@path) end
909
+
910
+ # See <tt>FileTest.file?</tt>.
911
+ def file?() FileTest.file?(@path) end
912
+
913
+ # See <tt>FileTest.pipe?</tt>.
914
+ def pipe?() FileTest.pipe?(@path) end
915
+
916
+ # See <tt>FileTest.socket?</tt>.
917
+ def socket?() FileTest.socket?(@path) end
918
+
919
+ # See <tt>FileTest.owned?</tt>.
920
+ def owned?() FileTest.owned?(@path) end
921
+
922
+ # See <tt>FileTest.readable?</tt>.
923
+ def readable?() FileTest.readable?(@path) end
924
+
925
+ # See <tt>FileTest.world_readable?</tt>.
926
+ def world_readable?() FileTest.world_readable?(@path) end
927
+
928
+ # See <tt>FileTest.readable_real?</tt>.
929
+ def readable_real?() FileTest.readable_real?(@path) end
930
+
931
+ # See <tt>FileTest.setuid?</tt>.
932
+ def setuid?() FileTest.setuid?(@path) end
933
+
934
+ # See <tt>FileTest.setgid?</tt>.
935
+ def setgid?() FileTest.setgid?(@path) end
936
+
937
+ # See <tt>FileTest.size</tt>.
938
+ def size() FileTest.size(@path) end
939
+
940
+ # See <tt>FileTest.size?</tt>.
941
+ def size?() FileTest.size?(@path) end
942
+
943
+ # See <tt>FileTest.sticky?</tt>.
944
+ def sticky?() FileTest.sticky?(@path) end
945
+
946
+ # See <tt>FileTest.symlink?</tt>.
947
+ def symlink?() FileTest.symlink?(@path) end
948
+
949
+ # See <tt>FileTest.writable?</tt>.
950
+ def writable?() FileTest.writable?(@path) end
951
+
952
+ # See <tt>FileTest.world_writable?</tt>.
953
+ def world_writable?() FileTest.world_writable?(@path) end
954
+
955
+ # See <tt>FileTest.writable_real?</tt>.
956
+ def writable_real?() FileTest.writable_real?(@path) end
957
+
958
+ # See <tt>FileTest.zero?</tt>.
959
+ def zero?() FileTest.zero?(@path) end
960
+ end
961
+
962
+
963
+ class Pathname # * Dir *
964
+ # See <tt>Dir.glob</tt>. Returns or yields Pathname objects.
965
+ def Pathname.glob(*args) # :yield: p
966
+ if block_given?
967
+ Dir.glob(*args) {|f| yield self.new(f) }
968
+ else
969
+ Dir.glob(*args).map {|f| self.new(f) }
970
+ end
971
+ end
972
+
973
+ # See <tt>Dir.getwd</tt>. Returns the current working directory as a Pathname.
974
+ def Pathname.getwd() self.new(Dir.getwd) end
975
+ class << self; alias pwd getwd end
976
+
977
+ # Pathname#chdir is *obsoleted* at 1.8.1.
978
+ def chdir(&block)
979
+ warn "Pathname#chdir is obsoleted. Use Dir.chdir."
980
+ Dir.chdir(@path, &block)
981
+ end
982
+
983
+ # Pathname#chroot is *obsoleted* at 1.8.1.
984
+ def chroot
985
+ warn "Pathname#chroot is obsoleted. Use Dir.chroot."
986
+ Dir.chroot(@path)
987
+ end
988
+
989
+ # Return the entries (files and subdirectories) in the directory, each as a
990
+ # Pathname object.
991
+ def entries() Dir.entries(@path).map {|f| self.class.new(f) } end
992
+
993
+ # Iterates over the entries (files and subdirectories) in the directory. It
994
+ # yields a Pathname object for each entry.
995
+ #
996
+ # This method has existed since 1.8.1.
997
+ def each_entry(&block) # :yield: p
998
+ Dir.foreach(@path) {|f| yield self.class.new(f) }
999
+ end
1000
+
1001
+ # Pathname#dir_foreach is *obsoleted* at 1.8.1.
1002
+ def dir_foreach(*args, &block)
1003
+ warn "Pathname#dir_foreach is obsoleted. Use Pathname#each_entry."
1004
+ each_entry(*args, &block)
1005
+ end
1006
+
1007
+ # See <tt>Dir.mkdir</tt>. Create the referenced directory.
1008
+ def mkdir(*args) Dir.mkdir(@path, *args) end
1009
+
1010
+ # See <tt>Dir.rmdir</tt>. Remove the referenced directory.
1011
+ def rmdir() Dir.rmdir(@path) end
1012
+
1013
+ # See <tt>Dir.open</tt>.
1014
+ def opendir(&block) # :yield: dir
1015
+ Dir.open(@path, &block)
1016
+ end
1017
+ end
1018
+
1019
+
1020
+ class Pathname # * Find *
1021
+ #
1022
+ # Pathname#find is an iterator to traverse a directory tree in a depth first
1023
+ # manner. It yields a Pathname for each file under "this" directory.
1024
+ #
1025
+ # Since it is implemented by <tt>find.rb</tt>, <tt>Find.prune</tt> can be used
1026
+ # to control the traverse.
1027
+ #
1028
+ # If +self+ is <tt>.</tt>, yielded pathnames begin with a filename in the
1029
+ # current directory, not <tt>./</tt>.
1030
+ #
1031
+ def find(&block) # :yield: p
1032
+ require 'find'
1033
+ if @path == '.'
1034
+ Find.find(@path) {|f| yield self.class.new(f.sub(%r{\A\./}, '')) }
1035
+ else
1036
+ Find.find(@path) {|f| yield self.class.new(f) }
1037
+ end
1038
+ end
1039
+ end
1040
+
1041
+
1042
+ class Pathname # * FileUtils *
1043
+ # See <tt>FileUtils.mkpath</tt>. Creates a full path, including any
1044
+ # intermediate directories that don't yet exist.
1045
+ def mkpath
1046
+ require 'fileutils'
1047
+ FileUtils.mkpath(@path)
1048
+ nil
1049
+ end
1050
+
1051
+ # See <tt>FileUtils.rm_r</tt>. Deletes a directory and all beneath it.
1052
+ def rmtree
1053
+ # The name "rmtree" is borrowed from File::Path of Perl.
1054
+ # File::Path provides "mkpath" and "rmtree".
1055
+ require 'fileutils'
1056
+ FileUtils.rm_r(@path)
1057
+ nil
1058
+ end
1059
+ end
1060
+
1061
+
1062
+ class Pathname # * mixed *
1063
+ # Removes a file or directory, using <tt>File.unlink</tt> or
1064
+ # <tt>Dir.unlink</tt> as necessary.
1065
+ def unlink()
1066
+ begin
1067
+ Dir.unlink @path
1068
+ rescue Errno::ENOTDIR
1069
+ File.unlink @path
1070
+ end
1071
+ end
1072
+ alias delete unlink
1073
+
1074
+ # This method is *obsoleted* at 1.8.1. Use #each_line or #each_entry.
1075
+ def foreach(*args, &block)
1076
+ warn "Pathname#foreach is obsoleted. Use each_line or each_entry."
1077
+ if FileTest.directory? @path
1078
+ # For polymorphism between Dir.foreach and IO.foreach,
1079
+ # Pathname#foreach doesn't yield Pathname object.
1080
+ Dir.foreach(@path, *args, &block)
1081
+ else
1082
+ IO.foreach(@path, *args, &block)
1083
+ end
1084
+ end
1085
+ end
1086
+
1087
+ class Pathname
1088
+ undef =~
1089
+ end
1090
+
1091
+ module Kernel
1092
+ # create a pathname object.
1093
+ #
1094
+ # This method is available since 1.8.5.
1095
+ def Pathname(path) # :doc:
1096
+ Pathname.new(path)
1097
+ end
1098
+ private :Pathname
1099
+ end