ruby_on_ruby 0.0.1

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 (493) hide show
  1. data/.gitignore +18 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +22 -0
  5. data/README.md +66 -0
  6. data/Rakefile +1 -0
  7. data/lib/ruby_on_ruby.rb +5 -0
  8. data/lib/ruby_on_ruby/console.rb +7 -0
  9. data/lib/ruby_on_ruby/context.rb +33 -0
  10. data/lib/ruby_on_ruby/file_loader.rb +31 -0
  11. data/lib/ruby_on_ruby/ruby_stream.rb +27 -0
  12. data/lib/ruby_on_ruby/version.rb +3 -0
  13. data/lib/rubyonruby.rb +1 -0
  14. data/ruby_in_ruby.gemspec +19 -0
  15. data/vendor/javascripts/emscripted-ruby/lib/.document +106 -0
  16. data/vendor/javascripts/emscripted-ruby/lib/English.rb +155 -0
  17. data/vendor/javascripts/emscripted-ruby/lib/Env.rb +18 -0
  18. data/vendor/javascripts/emscripted-ruby/lib/README +96 -0
  19. data/vendor/javascripts/emscripted-ruby/lib/abbrev.rb +103 -0
  20. data/vendor/javascripts/emscripted-ruby/lib/base64.rb +133 -0
  21. data/vendor/javascripts/emscripted-ruby/lib/benchmark.rb +572 -0
  22. data/vendor/javascripts/emscripted-ruby/lib/cgi-lib.rb +272 -0
  23. data/vendor/javascripts/emscripted-ruby/lib/cgi.rb +2308 -0
  24. data/vendor/javascripts/emscripted-ruby/lib/cgi/.document +2 -0
  25. data/vendor/javascripts/emscripted-ruby/lib/cgi/session.rb +498 -0
  26. data/vendor/javascripts/emscripted-ruby/lib/cgi/session/pstore.rb +111 -0
  27. data/vendor/javascripts/emscripted-ruby/lib/complex.rb +663 -0
  28. data/vendor/javascripts/emscripted-ruby/lib/csv.rb +992 -0
  29. data/vendor/javascripts/emscripted-ruby/lib/date.rb +1767 -0
  30. data/vendor/javascripts/emscripted-ruby/lib/date/format.rb +1190 -0
  31. data/vendor/javascripts/emscripted-ruby/lib/date2.rb +5 -0
  32. data/vendor/javascripts/emscripted-ruby/lib/debug.rb +947 -0
  33. data/vendor/javascripts/emscripted-ruby/lib/delegate.rb +337 -0
  34. data/vendor/javascripts/emscripted-ruby/lib/drb.rb +2 -0
  35. data/vendor/javascripts/emscripted-ruby/lib/drb/acl.rb +146 -0
  36. data/vendor/javascripts/emscripted-ruby/lib/drb/drb.rb +1782 -0
  37. data/vendor/javascripts/emscripted-ruby/lib/drb/eq.rb +16 -0
  38. data/vendor/javascripts/emscripted-ruby/lib/drb/extserv.rb +64 -0
  39. data/vendor/javascripts/emscripted-ruby/lib/drb/extservm.rb +89 -0
  40. data/vendor/javascripts/emscripted-ruby/lib/drb/gw.rb +122 -0
  41. data/vendor/javascripts/emscripted-ruby/lib/drb/invokemethod.rb +36 -0
  42. data/vendor/javascripts/emscripted-ruby/lib/drb/observer.rb +22 -0
  43. data/vendor/javascripts/emscripted-ruby/lib/drb/ssl.rb +190 -0
  44. data/vendor/javascripts/emscripted-ruby/lib/drb/timeridconv.rb +91 -0
  45. data/vendor/javascripts/emscripted-ruby/lib/drb/unix.rb +108 -0
  46. data/vendor/javascripts/emscripted-ruby/lib/e2mmap.rb +195 -0
  47. data/vendor/javascripts/emscripted-ruby/lib/erb.rb +880 -0
  48. data/vendor/javascripts/emscripted-ruby/lib/eregex.rb +37 -0
  49. data/vendor/javascripts/emscripted-ruby/lib/fileutils.rb +1591 -0
  50. data/vendor/javascripts/emscripted-ruby/lib/finalize.rb +193 -0
  51. data/vendor/javascripts/emscripted-ruby/lib/find.rb +79 -0
  52. data/vendor/javascripts/emscripted-ruby/lib/forwardable.rb +218 -0
  53. data/vendor/javascripts/emscripted-ruby/lib/ftools.rb +261 -0
  54. data/vendor/javascripts/emscripted-ruby/lib/generator.rb +418 -0
  55. data/vendor/javascripts/emscripted-ruby/lib/getoptlong.rb +621 -0
  56. data/vendor/javascripts/emscripted-ruby/lib/getopts.rb +127 -0
  57. data/vendor/javascripts/emscripted-ruby/lib/gserver.rb +253 -0
  58. data/vendor/javascripts/emscripted-ruby/lib/importenv.rb +33 -0
  59. data/vendor/javascripts/emscripted-ruby/lib/ipaddr.rb +814 -0
  60. data/vendor/javascripts/emscripted-ruby/lib/irb.rb +346 -0
  61. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/chws.rb +33 -0
  62. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/fork.rb +39 -0
  63. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/help.rb +34 -0
  64. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/load.rb +67 -0
  65. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/nop.rb +39 -0
  66. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/pushws.rb +39 -0
  67. data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/subirb.rb +43 -0
  68. data/vendor/javascripts/emscripted-ruby/lib/irb/completion.rb +205 -0
  69. data/vendor/javascripts/emscripted-ruby/lib/irb/context.rb +255 -0
  70. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/change-ws.rb +62 -0
  71. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/history.rb +110 -0
  72. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/loader.rb +120 -0
  73. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/math-mode.rb +37 -0
  74. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/multi-irb.rb +241 -0
  75. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/save-history.rb +85 -0
  76. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/tracer.rb +61 -0
  77. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/use-loader.rb +65 -0
  78. data/vendor/javascripts/emscripted-ruby/lib/irb/ext/workspaces.rb +56 -0
  79. data/vendor/javascripts/emscripted-ruby/lib/irb/extend-command.rb +264 -0
  80. data/vendor/javascripts/emscripted-ruby/lib/irb/frame.rb +67 -0
  81. data/vendor/javascripts/emscripted-ruby/lib/irb/help.rb +33 -0
  82. data/vendor/javascripts/emscripted-ruby/lib/irb/init.rb +259 -0
  83. data/vendor/javascripts/emscripted-ruby/lib/irb/input-method.rb +120 -0
  84. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/error.rb +30 -0
  85. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/help-message +35 -0
  86. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/error.rb +27 -0
  87. data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/help-message +36 -0
  88. data/vendor/javascripts/emscripted-ruby/lib/irb/locale.rb +184 -0
  89. data/vendor/javascripts/emscripted-ruby/lib/irb/notifier.rb +145 -0
  90. data/vendor/javascripts/emscripted-ruby/lib/irb/output-method.rb +85 -0
  91. data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-lex.rb +1149 -0
  92. data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-token.rb +273 -0
  93. data/vendor/javascripts/emscripted-ruby/lib/irb/slex.rb +285 -0
  94. data/vendor/javascripts/emscripted-ruby/lib/irb/version.rb +16 -0
  95. data/vendor/javascripts/emscripted-ruby/lib/irb/workspace.rb +107 -0
  96. data/vendor/javascripts/emscripted-ruby/lib/irb/ws-for-case-2.rb +15 -0
  97. data/vendor/javascripts/emscripted-ruby/lib/irb/xmp.rb +86 -0
  98. data/vendor/javascripts/emscripted-ruby/lib/jcode.rb +220 -0
  99. data/vendor/javascripts/emscripted-ruby/lib/logger.rb +703 -0
  100. data/vendor/javascripts/emscripted-ruby/lib/mailread.rb +62 -0
  101. data/vendor/javascripts/emscripted-ruby/lib/mathn.rb +308 -0
  102. data/vendor/javascripts/emscripted-ruby/lib/matrix.rb +1278 -0
  103. data/vendor/javascripts/emscripted-ruby/lib/mkmf.rb +1811 -0
  104. data/vendor/javascripts/emscripted-ruby/lib/monitor.rb +352 -0
  105. data/vendor/javascripts/emscripted-ruby/lib/mutex_m.rb +122 -0
  106. data/vendor/javascripts/emscripted-ruby/lib/net/ftp.rb +927 -0
  107. data/vendor/javascripts/emscripted-ruby/lib/net/http.rb +2277 -0
  108. data/vendor/javascripts/emscripted-ruby/lib/net/https.rb +173 -0
  109. data/vendor/javascripts/emscripted-ruby/lib/net/imap.rb +3371 -0
  110. data/vendor/javascripts/emscripted-ruby/lib/net/pop.rb +999 -0
  111. data/vendor/javascripts/emscripted-ruby/lib/net/protocol.rb +392 -0
  112. data/vendor/javascripts/emscripted-ruby/lib/net/smtp.rb +1014 -0
  113. data/vendor/javascripts/emscripted-ruby/lib/net/telnet.rb +756 -0
  114. data/vendor/javascripts/emscripted-ruby/lib/observer.rb +192 -0
  115. data/vendor/javascripts/emscripted-ruby/lib/open-uri.rb +678 -0
  116. data/vendor/javascripts/emscripted-ruby/lib/open3.rb +101 -0
  117. data/vendor/javascripts/emscripted-ruby/lib/optparse.rb +1790 -0
  118. data/vendor/javascripts/emscripted-ruby/lib/optparse/date.rb +17 -0
  119. data/vendor/javascripts/emscripted-ruby/lib/optparse/shellwords.rb +6 -0
  120. data/vendor/javascripts/emscripted-ruby/lib/optparse/time.rb +10 -0
  121. data/vendor/javascripts/emscripted-ruby/lib/optparse/uri.rb +6 -0
  122. data/vendor/javascripts/emscripted-ruby/lib/optparse/version.rb +70 -0
  123. data/vendor/javascripts/emscripted-ruby/lib/ostruct.rb +146 -0
  124. data/vendor/javascripts/emscripted-ruby/lib/parsearg.rb +87 -0
  125. data/vendor/javascripts/emscripted-ruby/lib/parsedate.rb +53 -0
  126. data/vendor/javascripts/emscripted-ruby/lib/pathname.rb +1062 -0
  127. data/vendor/javascripts/emscripted-ruby/lib/ping.rb +64 -0
  128. data/vendor/javascripts/emscripted-ruby/lib/pp.rb +654 -0
  129. data/vendor/javascripts/emscripted-ruby/lib/prettyprint.rb +896 -0
  130. data/vendor/javascripts/emscripted-ruby/lib/profile.rb +6 -0
  131. data/vendor/javascripts/emscripted-ruby/lib/profiler.rb +59 -0
  132. data/vendor/javascripts/emscripted-ruby/lib/pstore.rb +395 -0
  133. data/vendor/javascripts/emscripted-ruby/lib/racc/parser.rb +442 -0
  134. data/vendor/javascripts/emscripted-ruby/lib/rational.rb +564 -0
  135. data/vendor/javascripts/emscripted-ruby/lib/readbytes.rb +41 -0
  136. data/vendor/javascripts/emscripted-ruby/lib/resolv-replace.rb +62 -0
  137. data/vendor/javascripts/emscripted-ruby/lib/resolv.rb +2210 -0
  138. data/vendor/javascripts/emscripted-ruby/lib/rexml/attlistdecl.rb +62 -0
  139. data/vendor/javascripts/emscripted-ruby/lib/rexml/attribute.rb +185 -0
  140. data/vendor/javascripts/emscripted-ruby/lib/rexml/cdata.rb +67 -0
  141. data/vendor/javascripts/emscripted-ruby/lib/rexml/child.rb +96 -0
  142. data/vendor/javascripts/emscripted-ruby/lib/rexml/comment.rb +80 -0
  143. data/vendor/javascripts/emscripted-ruby/lib/rexml/doctype.rb +271 -0
  144. data/vendor/javascripts/emscripted-ruby/lib/rexml/document.rb +208 -0
  145. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
  146. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/dtd.rb +51 -0
  147. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/elementdecl.rb +17 -0
  148. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/entitydecl.rb +56 -0
  149. data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/notationdecl.rb +39 -0
  150. data/vendor/javascripts/emscripted-ruby/lib/rexml/element.rb +1227 -0
  151. data/vendor/javascripts/emscripted-ruby/lib/rexml/encoding.rb +71 -0
  152. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/CP-1252.rb +103 -0
  153. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
  154. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ICONV.rb +22 -0
  155. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
  156. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
  157. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
  158. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
  159. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UNILE.rb +34 -0
  160. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
  161. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-16.rb +35 -0
  162. data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-8.rb +18 -0
  163. data/vendor/javascripts/emscripted-ruby/lib/rexml/entity.rb +165 -0
  164. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/default.rb +109 -0
  165. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/pretty.rb +137 -0
  166. data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/transitive.rb +56 -0
  167. data/vendor/javascripts/emscripted-ruby/lib/rexml/functions.rb +382 -0
  168. data/vendor/javascripts/emscripted-ruby/lib/rexml/instruction.rb +70 -0
  169. data/vendor/javascripts/emscripted-ruby/lib/rexml/light/node.rb +196 -0
  170. data/vendor/javascripts/emscripted-ruby/lib/rexml/namespace.rb +47 -0
  171. data/vendor/javascripts/emscripted-ruby/lib/rexml/node.rb +75 -0
  172. data/vendor/javascripts/emscripted-ruby/lib/rexml/output.rb +24 -0
  173. data/vendor/javascripts/emscripted-ruby/lib/rexml/parent.rb +166 -0
  174. data/vendor/javascripts/emscripted-ruby/lib/rexml/parseexception.rb +51 -0
  175. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/baseparser.rb +503 -0
  176. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/lightparser.rb +60 -0
  177. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/pullparser.rb +196 -0
  178. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/sax2parser.rb +238 -0
  179. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/streamparser.rb +46 -0
  180. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/treeparser.rb +97 -0
  181. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
  182. data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/xpathparser.rb +698 -0
  183. data/vendor/javascripts/emscripted-ruby/lib/rexml/quickpath.rb +266 -0
  184. data/vendor/javascripts/emscripted-ruby/lib/rexml/rexml.rb +32 -0
  185. data/vendor/javascripts/emscripted-ruby/lib/rexml/sax2listener.rb +97 -0
  186. data/vendor/javascripts/emscripted-ruby/lib/rexml/source.rb +251 -0
  187. data/vendor/javascripts/emscripted-ruby/lib/rexml/streamlistener.rb +92 -0
  188. data/vendor/javascripts/emscripted-ruby/lib/rexml/syncenumerator.rb +33 -0
  189. data/vendor/javascripts/emscripted-ruby/lib/rexml/text.rb +344 -0
  190. data/vendor/javascripts/emscripted-ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
  191. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/relaxng.rb +559 -0
  192. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validation.rb +155 -0
  193. data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validationexception.rb +9 -0
  194. data/vendor/javascripts/emscripted-ruby/lib/rexml/xmldecl.rb +119 -0
  195. data/vendor/javascripts/emscripted-ruby/lib/rexml/xmltokens.rb +18 -0
  196. data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath.rb +66 -0
  197. data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath_parser.rb +792 -0
  198. data/vendor/javascripts/emscripted-ruby/lib/rinda/rinda.rb +283 -0
  199. data/vendor/javascripts/emscripted-ruby/lib/rinda/ring.rb +271 -0
  200. data/vendor/javascripts/emscripted-ruby/lib/rinda/tuplespace.rb +642 -0
  201. data/vendor/javascripts/emscripted-ruby/lib/rss.rb +19 -0
  202. data/vendor/javascripts/emscripted-ruby/lib/rss/0.9.rb +428 -0
  203. data/vendor/javascripts/emscripted-ruby/lib/rss/1.0.rb +452 -0
  204. data/vendor/javascripts/emscripted-ruby/lib/rss/2.0.rb +111 -0
  205. data/vendor/javascripts/emscripted-ruby/lib/rss/atom.rb +749 -0
  206. data/vendor/javascripts/emscripted-ruby/lib/rss/content.rb +31 -0
  207. data/vendor/javascripts/emscripted-ruby/lib/rss/content/1.0.rb +10 -0
  208. data/vendor/javascripts/emscripted-ruby/lib/rss/content/2.0.rb +12 -0
  209. data/vendor/javascripts/emscripted-ruby/lib/rss/converter.rb +162 -0
  210. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore.rb +161 -0
  211. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/1.0.rb +13 -0
  212. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/2.0.rb +13 -0
  213. data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/atom.rb +17 -0
  214. data/vendor/javascripts/emscripted-ruby/lib/rss/image.rb +193 -0
  215. data/vendor/javascripts/emscripted-ruby/lib/rss/itunes.rb +410 -0
  216. data/vendor/javascripts/emscripted-ruby/lib/rss/maker.rb +44 -0
  217. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/0.9.rb +467 -0
  218. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/1.0.rb +434 -0
  219. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/2.0.rb +223 -0
  220. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/atom.rb +172 -0
  221. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/base.rb +868 -0
  222. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/content.rb +21 -0
  223. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/dublincore.rb +124 -0
  224. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/entry.rb +163 -0
  225. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/feed.rb +429 -0
  226. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/image.rb +111 -0
  227. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/itunes.rb +242 -0
  228. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/slash.rb +33 -0
  229. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/syndication.rb +18 -0
  230. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/taxonomy.rb +118 -0
  231. data/vendor/javascripts/emscripted-ruby/lib/rss/maker/trackback.rb +61 -0
  232. data/vendor/javascripts/emscripted-ruby/lib/rss/parser.rb +541 -0
  233. data/vendor/javascripts/emscripted-ruby/lib/rss/rexmlparser.rb +54 -0
  234. data/vendor/javascripts/emscripted-ruby/lib/rss/rss.rb +1312 -0
  235. data/vendor/javascripts/emscripted-ruby/lib/rss/slash.rb +49 -0
  236. data/vendor/javascripts/emscripted-ruby/lib/rss/syndication.rb +67 -0
  237. data/vendor/javascripts/emscripted-ruby/lib/rss/taxonomy.rb +145 -0
  238. data/vendor/javascripts/emscripted-ruby/lib/rss/trackback.rb +288 -0
  239. data/vendor/javascripts/emscripted-ruby/lib/rss/utils.rb +111 -0
  240. data/vendor/javascripts/emscripted-ruby/lib/rss/xml-stylesheet.rb +105 -0
  241. data/vendor/javascripts/emscripted-ruby/lib/rss/xml.rb +71 -0
  242. data/vendor/javascripts/emscripted-ruby/lib/rss/xmlparser.rb +93 -0
  243. data/vendor/javascripts/emscripted-ruby/lib/rss/xmlscanner.rb +121 -0
  244. data/vendor/javascripts/emscripted-ruby/lib/rubyunit.rb +6 -0
  245. data/vendor/javascripts/emscripted-ruby/lib/runit/assert.rb +73 -0
  246. data/vendor/javascripts/emscripted-ruby/lib/runit/cui/testrunner.rb +51 -0
  247. data/vendor/javascripts/emscripted-ruby/lib/runit/error.rb +9 -0
  248. data/vendor/javascripts/emscripted-ruby/lib/runit/testcase.rb +45 -0
  249. data/vendor/javascripts/emscripted-ruby/lib/runit/testresult.rb +44 -0
  250. data/vendor/javascripts/emscripted-ruby/lib/runit/testsuite.rb +26 -0
  251. data/vendor/javascripts/emscripted-ruby/lib/runit/topublic.rb +8 -0
  252. data/vendor/javascripts/emscripted-ruby/lib/scanf.rb +702 -0
  253. data/vendor/javascripts/emscripted-ruby/lib/securerandom.rb +137 -0
  254. data/vendor/javascripts/emscripted-ruby/lib/set.rb +1233 -0
  255. data/vendor/javascripts/emscripted-ruby/lib/shell.rb +269 -0
  256. data/vendor/javascripts/emscripted-ruby/lib/shell/builtin-command.rb +154 -0
  257. data/vendor/javascripts/emscripted-ruby/lib/shell/command-processor.rb +592 -0
  258. data/vendor/javascripts/emscripted-ruby/lib/shell/error.rb +26 -0
  259. data/vendor/javascripts/emscripted-ruby/lib/shell/filter.rb +110 -0
  260. data/vendor/javascripts/emscripted-ruby/lib/shell/process-controller.rb +260 -0
  261. data/vendor/javascripts/emscripted-ruby/lib/shell/system-command.rb +168 -0
  262. data/vendor/javascripts/emscripted-ruby/lib/shell/version.rb +16 -0
  263. data/vendor/javascripts/emscripted-ruby/lib/shellwords.rb +172 -0
  264. data/vendor/javascripts/emscripted-ruby/lib/singleton.rb +360 -0
  265. data/vendor/javascripts/emscripted-ruby/lib/soap/attachment.rb +107 -0
  266. data/vendor/javascripts/emscripted-ruby/lib/soap/baseData.rb +942 -0
  267. data/vendor/javascripts/emscripted-ruby/lib/soap/element.rb +258 -0
  268. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  269. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/handler.rb +100 -0
  270. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/literalHandler.rb +226 -0
  271. data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/soapHandler.rb +582 -0
  272. data/vendor/javascripts/emscripted-ruby/lib/soap/generator.rb +268 -0
  273. data/vendor/javascripts/emscripted-ruby/lib/soap/header/handler.rb +57 -0
  274. data/vendor/javascripts/emscripted-ruby/lib/soap/header/handlerset.rb +70 -0
  275. data/vendor/javascripts/emscripted-ruby/lib/soap/header/simplehandler.rb +44 -0
  276. data/vendor/javascripts/emscripted-ruby/lib/soap/httpconfigloader.rb +119 -0
  277. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping.rb +10 -0
  278. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/factory.rb +355 -0
  279. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/mapping.rb +381 -0
  280. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/registry.rb +541 -0
  281. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/rubytypeFactory.rb +475 -0
  282. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/typeMap.rb +50 -0
  283. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlencodedregistry.rb +280 -0
  284. data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlliteralregistry.rb +418 -0
  285. data/vendor/javascripts/emscripted-ruby/lib/soap/marshal.rb +59 -0
  286. data/vendor/javascripts/emscripted-ruby/lib/soap/mimemessage.rb +240 -0
  287. data/vendor/javascripts/emscripted-ruby/lib/soap/netHttpClient.rb +190 -0
  288. data/vendor/javascripts/emscripted-ruby/lib/soap/parser.rb +251 -0
  289. data/vendor/javascripts/emscripted-ruby/lib/soap/processor.rb +66 -0
  290. data/vendor/javascripts/emscripted-ruby/lib/soap/property.rb +333 -0
  291. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/cgistub.rb +206 -0
  292. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/driver.rb +254 -0
  293. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/element.rb +325 -0
  294. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/httpserver.rb +129 -0
  295. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/proxy.rb +497 -0
  296. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/router.rb +594 -0
  297. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/rpc.rb +25 -0
  298. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/soaplet.rb +162 -0
  299. data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/standaloneServer.rb +43 -0
  300. data/vendor/javascripts/emscripted-ruby/lib/soap/soap.rb +140 -0
  301. data/vendor/javascripts/emscripted-ruby/lib/soap/streamHandler.rb +229 -0
  302. data/vendor/javascripts/emscripted-ruby/lib/soap/wsdlDriver.rb +575 -0
  303. data/vendor/javascripts/emscripted-ruby/lib/sync.rb +311 -0
  304. data/vendor/javascripts/emscripted-ruby/lib/tempfile.rb +209 -0
  305. data/vendor/javascripts/emscripted-ruby/lib/test/unit.rb +280 -0
  306. data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertionfailederror.rb +14 -0
  307. data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertions.rb +622 -0
  308. data/vendor/javascripts/emscripted-ruby/lib/test/unit/autorunner.rb +220 -0
  309. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector.rb +43 -0
  310. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/dir.rb +107 -0
  311. data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/objectspace.rb +34 -0
  312. data/vendor/javascripts/emscripted-ruby/lib/test/unit/error.rb +56 -0
  313. data/vendor/javascripts/emscripted-ruby/lib/test/unit/failure.rb +51 -0
  314. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testcase.rb +160 -0
  315. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testresult.rb +80 -0
  316. data/vendor/javascripts/emscripted-ruby/lib/test/unit/testsuite.rb +76 -0
  317. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/console/testrunner.rb +127 -0
  318. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/fox/testrunner.rb +268 -0
  319. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk/testrunner.rb +416 -0
  320. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk2/testrunner.rb +465 -0
  321. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnermediator.rb +68 -0
  322. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnerutilities.rb +46 -0
  323. data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/tk/testrunner.rb +260 -0
  324. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/backtracefilter.rb +40 -0
  325. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/observable.rb +90 -0
  326. data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/procwrapper.rb +48 -0
  327. data/vendor/javascripts/emscripted-ruby/lib/thread.rb +479 -0
  328. data/vendor/javascripts/emscripted-ruby/lib/thwait.rb +169 -0
  329. data/vendor/javascripts/emscripted-ruby/lib/time.rb +797 -0
  330. data/vendor/javascripts/emscripted-ruby/lib/timeout.rb +122 -0
  331. data/vendor/javascripts/emscripted-ruby/lib/tmpdir.rb +130 -0
  332. data/vendor/javascripts/emscripted-ruby/lib/tracer.rb +167 -0
  333. data/vendor/javascripts/emscripted-ruby/lib/tsort.rb +290 -0
  334. data/vendor/javascripts/emscripted-ruby/lib/un.rb +235 -0
  335. data/vendor/javascripts/emscripted-ruby/lib/uri.rb +29 -0
  336. data/vendor/javascripts/emscripted-ruby/lib/uri/common.rb +611 -0
  337. data/vendor/javascripts/emscripted-ruby/lib/uri/ftp.rb +198 -0
  338. data/vendor/javascripts/emscripted-ruby/lib/uri/generic.rb +1122 -0
  339. data/vendor/javascripts/emscripted-ruby/lib/uri/http.rb +100 -0
  340. data/vendor/javascripts/emscripted-ruby/lib/uri/https.rb +20 -0
  341. data/vendor/javascripts/emscripted-ruby/lib/uri/ldap.rb +190 -0
  342. data/vendor/javascripts/emscripted-ruby/lib/uri/ldaps.rb +12 -0
  343. data/vendor/javascripts/emscripted-ruby/lib/uri/mailto.rb +266 -0
  344. data/vendor/javascripts/emscripted-ruby/lib/weakref.rb +100 -0
  345. data/vendor/javascripts/emscripted-ruby/lib/webrick.rb +29 -0
  346. data/vendor/javascripts/emscripted-ruby/lib/webrick/accesslog.rb +67 -0
  347. data/vendor/javascripts/emscripted-ruby/lib/webrick/cgi.rb +257 -0
  348. data/vendor/javascripts/emscripted-ruby/lib/webrick/compat.rb +15 -0
  349. data/vendor/javascripts/emscripted-ruby/lib/webrick/config.rb +97 -0
  350. data/vendor/javascripts/emscripted-ruby/lib/webrick/cookie.rb +110 -0
  351. data/vendor/javascripts/emscripted-ruby/lib/webrick/htmlutils.rb +25 -0
  352. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth.rb +45 -0
  353. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/authenticator.rb +79 -0
  354. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/basicauth.rb +65 -0
  355. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/digestauth.rb +343 -0
  356. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htdigest.rb +91 -0
  357. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htgroup.rb +61 -0
  358. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
  359. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/userdb.rb +29 -0
  360. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpproxy.rb +254 -0
  361. data/vendor/javascripts/emscripted-ruby/lib/webrick/httprequest.rb +365 -0
  362. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpresponse.rb +327 -0
  363. data/vendor/javascripts/emscripted-ruby/lib/webrick/https.rb +63 -0
  364. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpserver.rb +210 -0
  365. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet.rb +22 -0
  366. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/abstract.rb +71 -0
  367. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  368. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgihandler.rb +108 -0
  369. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
  370. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
  371. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
  372. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpstatus.rb +126 -0
  373. data/vendor/javascripts/emscripted-ruby/lib/webrick/httputils.rb +399 -0
  374. data/vendor/javascripts/emscripted-ruby/lib/webrick/httpversion.rb +49 -0
  375. data/vendor/javascripts/emscripted-ruby/lib/webrick/log.rb +88 -0
  376. data/vendor/javascripts/emscripted-ruby/lib/webrick/server.rb +200 -0
  377. data/vendor/javascripts/emscripted-ruby/lib/webrick/ssl.rb +126 -0
  378. data/vendor/javascripts/emscripted-ruby/lib/webrick/utils.rb +100 -0
  379. data/vendor/javascripts/emscripted-ruby/lib/webrick/version.rb +13 -0
  380. data/vendor/javascripts/emscripted-ruby/lib/wsdl/binding.rb +65 -0
  381. data/vendor/javascripts/emscripted-ruby/lib/wsdl/data.rb +64 -0
  382. data/vendor/javascripts/emscripted-ruby/lib/wsdl/definitions.rb +250 -0
  383. data/vendor/javascripts/emscripted-ruby/lib/wsdl/documentation.rb +32 -0
  384. data/vendor/javascripts/emscripted-ruby/lib/wsdl/import.rb +80 -0
  385. data/vendor/javascripts/emscripted-ruby/lib/wsdl/importer.rb +38 -0
  386. data/vendor/javascripts/emscripted-ruby/lib/wsdl/info.rb +39 -0
  387. data/vendor/javascripts/emscripted-ruby/lib/wsdl/message.rb +54 -0
  388. data/vendor/javascripts/emscripted-ruby/lib/wsdl/operation.rb +130 -0
  389. data/vendor/javascripts/emscripted-ruby/lib/wsdl/operationBinding.rb +108 -0
  390. data/vendor/javascripts/emscripted-ruby/lib/wsdl/param.rb +85 -0
  391. data/vendor/javascripts/emscripted-ruby/lib/wsdl/parser.rb +163 -0
  392. data/vendor/javascripts/emscripted-ruby/lib/wsdl/part.rb +52 -0
  393. data/vendor/javascripts/emscripted-ruby/lib/wsdl/port.rb +84 -0
  394. data/vendor/javascripts/emscripted-ruby/lib/wsdl/portType.rb +73 -0
  395. data/vendor/javascripts/emscripted-ruby/lib/wsdl/service.rb +61 -0
  396. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/address.rb +40 -0
  397. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/binding.rb +49 -0
  398. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/body.rb +56 -0
  399. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/cgiStubCreator.rb +76 -0
  400. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreator.rb +314 -0
  401. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreatorSupport.rb +126 -0
  402. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/clientSkeltonCreator.rb +78 -0
  403. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/complexType.rb +161 -0
  404. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/data.rb +42 -0
  405. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/definitions.rb +149 -0
  406. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/driverCreator.rb +95 -0
  407. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/element.rb +28 -0
  408. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/fault.rb +56 -0
  409. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/header.rb +86 -0
  410. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/headerfault.rb +56 -0
  411. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/mappingRegistryCreator.rb +92 -0
  412. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/methodDefCreator.rb +228 -0
  413. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/operation.rb +122 -0
  414. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/servantSkeltonCreator.rb +67 -0
  415. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  416. data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/wsdl2ruby.rb +176 -0
  417. data/vendor/javascripts/emscripted-ruby/lib/wsdl/types.rb +43 -0
  418. data/vendor/javascripts/emscripted-ruby/lib/wsdl/wsdl.rb +23 -0
  419. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/all.rb +69 -0
  420. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/annotation.rb +34 -0
  421. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/any.rb +56 -0
  422. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/attribute.rb +127 -0
  423. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/choice.rb +69 -0
  424. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexContent.rb +92 -0
  425. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexType.rb +139 -0
  426. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/content.rb +96 -0
  427. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/data.rb +80 -0
  428. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/element.rb +154 -0
  429. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  430. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/import.rb +65 -0
  431. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/importer.rb +87 -0
  432. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/include.rb +54 -0
  433. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/length.rb +35 -0
  434. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/parser.rb +166 -0
  435. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/pattern.rb +36 -0
  436. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/schema.rb +143 -0
  437. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/sequence.rb +69 -0
  438. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleContent.rb +65 -0
  439. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
  440. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  441. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleType.rb +73 -0
  442. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/unique.rb +34 -0
  443. data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  444. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/.document +1 -0
  445. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/README.txt +31 -0
  446. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/base64.rb +81 -0
  447. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/client.rb +624 -0
  448. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/config.rb +40 -0
  449. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/create.rb +290 -0
  450. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/datetime.rb +142 -0
  451. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/httpserver.rb +178 -0
  452. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/marshal.rb +76 -0
  453. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/parser.rb +813 -0
  454. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/server.rb +780 -0
  455. data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/utils.rb +165 -0
  456. data/vendor/javascripts/emscripted-ruby/lib/xsd/charset.rb +187 -0
  457. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen.rb +12 -0
  458. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/classdef.rb +203 -0
  459. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/commentdef.rb +34 -0
  460. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/gensupport.rb +166 -0
  461. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/methoddef.rb +63 -0
  462. data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/moduledef.rb +191 -0
  463. data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes.rb +1269 -0
  464. data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes1999.rb +20 -0
  465. data/vendor/javascripts/emscripted-ruby/lib/xsd/iconvcharset.rb +33 -0
  466. data/vendor/javascripts/emscripted-ruby/lib/xsd/mapping.rb +42 -0
  467. data/vendor/javascripts/emscripted-ruby/lib/xsd/namedelements.rb +95 -0
  468. data/vendor/javascripts/emscripted-ruby/lib/xsd/ns.rb +140 -0
  469. data/vendor/javascripts/emscripted-ruby/lib/xsd/qname.rb +78 -0
  470. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser.rb +61 -0
  471. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/parser.rb +96 -0
  472. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  473. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlparser.rb +50 -0
  474. data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlscanner.rb +147 -0
  475. data/vendor/javascripts/emscripted-ruby/lib/yaml.rb +440 -0
  476. data/vendor/javascripts/emscripted-ruby/lib/yaml/baseemitter.rb +247 -0
  477. data/vendor/javascripts/emscripted-ruby/lib/yaml/basenode.rb +216 -0
  478. data/vendor/javascripts/emscripted-ruby/lib/yaml/constants.rb +45 -0
  479. data/vendor/javascripts/emscripted-ruby/lib/yaml/dbm.rb +111 -0
  480. data/vendor/javascripts/emscripted-ruby/lib/yaml/encoding.rb +33 -0
  481. data/vendor/javascripts/emscripted-ruby/lib/yaml/error.rb +34 -0
  482. data/vendor/javascripts/emscripted-ruby/lib/yaml/loader.rb +14 -0
  483. data/vendor/javascripts/emscripted-ruby/lib/yaml/rubytypes.rb +408 -0
  484. data/vendor/javascripts/emscripted-ruby/lib/yaml/store.rb +43 -0
  485. data/vendor/javascripts/emscripted-ruby/lib/yaml/stream.rb +40 -0
  486. data/vendor/javascripts/emscripted-ruby/lib/yaml/stringio.rb +83 -0
  487. data/vendor/javascripts/emscripted-ruby/lib/yaml/syck.rb +19 -0
  488. data/vendor/javascripts/emscripted-ruby/lib/yaml/tag.rb +91 -0
  489. data/vendor/javascripts/emscripted-ruby/lib/yaml/types.rb +192 -0
  490. data/vendor/javascripts/emscripted-ruby/lib/yaml/yamlnode.rb +54 -0
  491. data/vendor/javascripts/emscripted-ruby/lib/yaml/ypath.rb +52 -0
  492. data/vendor/javascripts/emscripted-ruby/ruby.closure.js +7201 -0
  493. metadata +554 -0
@@ -0,0 +1,17 @@
1
+ require 'optparse'
2
+ require 'date'
3
+
4
+ OptionParser.accept(DateTime) do |s,|
5
+ begin
6
+ DateTime.parse(s) if s
7
+ rescue ArgumentError
8
+ raise OptionParser::InvalidArgument, s
9
+ end
10
+ end
11
+ OptionParser.accept(Date) do |s,|
12
+ begin
13
+ Date.parse(s) if s
14
+ rescue ArgumentError
15
+ raise OptionParser::InvalidArgument, s
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'shellwords'
4
+ require 'optparse'
5
+
6
+ OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}
@@ -0,0 +1,10 @@
1
+ require 'optparse'
2
+ require 'time'
3
+
4
+ OptionParser.accept(Time) do |s,|
5
+ begin
6
+ (Time.httpdate(s) rescue Time.parse(s)) if s
7
+ rescue
8
+ raise OptionParser::InvalidArgument, s
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'optparse'
4
+ require 'uri'
5
+
6
+ OptionParser.accept(URI) {|s,| URI.parse(s) if s}
@@ -0,0 +1,70 @@
1
+ # OptionParser internal utility
2
+
3
+ class << OptionParser
4
+ def show_version(*pkg)
5
+ progname = ARGV.options.program_name
6
+ result = false
7
+ show = proc do |klass, cname, version|
8
+ str = "#{progname}"
9
+ unless klass == ::Object and cname == :VERSION
10
+ version = version.join(".") if Array === version
11
+ str << ": #{klass}" unless klass == Object
12
+ str << " version #{version}"
13
+ end
14
+ [:Release, :RELEASE].find do |rel|
15
+ if klass.const_defined?(rel)
16
+ str << " (#{klass.const_get(rel)})"
17
+ end
18
+ end
19
+ puts str
20
+ result = true
21
+ end
22
+ if pkg.size == 1 and pkg[0] == "all"
23
+ self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
24
+ unless cname[1] == ?e and klass.const_defined?(:Version)
25
+ show.call(klass, cname.intern, version)
26
+ end
27
+ end
28
+ else
29
+ pkg.each do |pkg|
30
+ begin
31
+ pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
32
+ v = case
33
+ when pkg.const_defined?(:Version)
34
+ pkg.const_get(n = :Version)
35
+ when pkg.const_defined?(:VERSION)
36
+ pkg.const_get(n = :VERSION)
37
+ else
38
+ n = nil
39
+ "unknown"
40
+ end
41
+ show.call(pkg, n, v)
42
+ rescue NameError
43
+ end
44
+ end
45
+ end
46
+ result
47
+ end
48
+
49
+ def each_const(path, klass = ::Object)
50
+ path.split(/::|\//).inject(klass) do |klass, name|
51
+ raise NameError, path unless Module === klass
52
+ klass.constants.grep(/#{name}/i) do |c|
53
+ klass.const_defined?(c) or next
54
+ c = klass.const_get(c)
55
+ end
56
+ end
57
+ end
58
+
59
+ def search_const(klass, name)
60
+ klasses = [klass]
61
+ while klass = klasses.shift
62
+ klass.constants.each do |cname|
63
+ klass.const_defined?(cname) or next
64
+ const = klass.const_get(cname)
65
+ yield klass, cname, const if name === cname
66
+ klasses << const if Module === const and const != ::Object
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,146 @@
1
+ #
2
+ # = ostruct.rb: OpenStruct implementation
3
+ #
4
+ # Author:: Yukihiro Matsumoto
5
+ # Documentation:: Gavin Sinclair
6
+ #
7
+ # OpenStruct allows the creation of data objects with arbitrary attributes.
8
+ # See OpenStruct for an example.
9
+ #
10
+
11
+ #
12
+ # OpenStruct allows you to create data objects and set arbitrary attributes.
13
+ # For example:
14
+ #
15
+ # require 'ostruct'
16
+ #
17
+ # record = OpenStruct.new
18
+ # record.name = "John Smith"
19
+ # record.age = 70
20
+ # record.pension = 300
21
+ #
22
+ # puts record.name # -> "John Smith"
23
+ # puts record.address # -> nil
24
+ #
25
+ # It is like a hash with a different way to access the data. In fact, it is
26
+ # implemented with a hash, and you can initialize it with one.
27
+ #
28
+ # hash = { "country" => "Australia", :population => 20_000_000 }
29
+ # data = OpenStruct.new(hash)
30
+ #
31
+ # p data # -> <OpenStruct country="Australia" population=20000000>
32
+ #
33
+ class OpenStruct
34
+ #
35
+ # Create a new OpenStruct object. The optional +hash+, if given, will
36
+ # generate attributes and values. For example.
37
+ #
38
+ # require 'ostruct'
39
+ # hash = { "country" => "Australia", :population => 20_000_000 }
40
+ # data = OpenStruct.new(hash)
41
+ #
42
+ # p data # -> <OpenStruct country="Australia" population=20000000>
43
+ #
44
+ # By default, the resulting OpenStruct object will have no attributes.
45
+ #
46
+ def initialize(hash=nil)
47
+ @table = {}
48
+ if hash
49
+ for k,v in hash
50
+ @table[k.to_sym] = v
51
+ new_ostruct_member(k)
52
+ end
53
+ end
54
+ end
55
+
56
+ # Duplicate an OpenStruct object members.
57
+ def initialize_copy(orig)
58
+ super
59
+ @table = @table.dup
60
+ end
61
+
62
+ def marshal_dump
63
+ @table
64
+ end
65
+ def marshal_load(x)
66
+ @table = x
67
+ @table.each_key{|key| new_ostruct_member(key)}
68
+ end
69
+
70
+ def new_ostruct_member(name)
71
+ name = name.to_sym
72
+ unless self.respond_to?(name)
73
+ meta = class << self; self; end
74
+ meta.send(:define_method, name) { @table[name] }
75
+ meta.send(:define_method, :"#{name}=") { |x| @table[name] = x }
76
+ end
77
+ end
78
+
79
+ def method_missing(mid, *args) # :nodoc:
80
+ mname = mid.id2name
81
+ len = args.length
82
+ if mname =~ /=$/
83
+ if len != 1
84
+ raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
85
+ end
86
+ if self.frozen?
87
+ raise TypeError, "can't modify frozen #{self.class}", caller(1)
88
+ end
89
+ mname.chop!
90
+ self.new_ostruct_member(mname)
91
+ @table[mname.intern] = args[0]
92
+ elsif len == 0
93
+ @table[mid]
94
+ else
95
+ raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1)
96
+ end
97
+ end
98
+
99
+ #
100
+ # Remove the named field from the object.
101
+ #
102
+ def delete_field(name)
103
+ @table.delete name.to_sym
104
+ end
105
+
106
+ InspectKey = :__inspect_key__ # :nodoc:
107
+
108
+ #
109
+ # Returns a string containing a detailed summary of the keys and values.
110
+ #
111
+ def inspect
112
+ str = "#<#{self.class}"
113
+
114
+ Thread.current[InspectKey] ||= []
115
+ if Thread.current[InspectKey].include?(self) then
116
+ str << " ..."
117
+ else
118
+ first = true
119
+ for k,v in @table
120
+ str << "," unless first
121
+ first = false
122
+
123
+ Thread.current[InspectKey] << v
124
+ begin
125
+ str << " #{k}=#{v.inspect}"
126
+ ensure
127
+ Thread.current[InspectKey].pop
128
+ end
129
+ end
130
+ end
131
+
132
+ str << ">"
133
+ end
134
+ alias :to_s :inspect
135
+
136
+ attr_reader :table # :nodoc:
137
+ protected :table
138
+
139
+ #
140
+ # Compare this object and +other+ for equality.
141
+ #
142
+ def ==(other)
143
+ return false unless(other.kind_of?(OpenStruct))
144
+ return @table == other.table
145
+ end
146
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # parsearg.rb - parse arguments
3
+ # $Release Version: $
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
6
+ # by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+
13
+ warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: parsearg is deprecated after Ruby 1.8.1; use optparse instead"
14
+
15
+ $RCS_ID=%q$Header$
16
+
17
+ require "getopts"
18
+
19
+ def printUsageAndExit()
20
+ if $USAGE
21
+ eval($USAGE)
22
+ end
23
+ exit()
24
+ end
25
+
26
+ def setParenthesis(ex, opt, c)
27
+ if opt != ""
28
+ ex = sprintf("%s$OPT_%s%s", ex, opt, c)
29
+ else
30
+ ex = sprintf("%s%s", ex, c)
31
+ end
32
+ return ex
33
+ end
34
+
35
+ def setOrAnd(ex, opt, c)
36
+ if opt != ""
37
+ ex = sprintf("%s$OPT_%s %s%s ", ex, opt, c, c)
38
+ else
39
+ ex = sprintf("%s %s%s ", ex, c, c)
40
+ end
41
+ return ex
42
+ end
43
+
44
+ def setExpression(ex, opt, op)
45
+ if !op
46
+ ex = sprintf("%s$OPT_%s", ex, opt)
47
+ return ex
48
+ end
49
+ case op.chr
50
+ when "(", ")"
51
+ ex = setParenthesis(ex, opt, op.chr)
52
+ when "|", "&"
53
+ ex = setOrAnd(ex, opt, op.chr)
54
+ else
55
+ return nil
56
+ end
57
+ return ex
58
+ end
59
+
60
+ # parseArgs is obsolete. Use OptionParser instead.
61
+
62
+ def parseArgs(argc, nopt, single_opts, *opts)
63
+ if (noOptions = getopts(single_opts, *opts)) == nil
64
+ printUsageAndExit()
65
+ end
66
+ if nopt
67
+ ex = nil
68
+ pos = 0
69
+ for o in nopt.split(/[()|&]/)
70
+ pos += o.length
71
+ ex = setExpression(ex, o, nopt[pos])
72
+ pos += 1
73
+ end
74
+ begin
75
+ if !eval(ex)
76
+ printUsageAndExit()
77
+ end
78
+ rescue
79
+ print "Format Error!! : \"" + nopt + "\"\t[parseArgs]\n"
80
+ exit!(-1)
81
+ end
82
+ end
83
+ if ARGV.length < argc
84
+ printUsageAndExit()
85
+ end
86
+ return noOptions
87
+ end
@@ -0,0 +1,53 @@
1
+ #
2
+ # = parsedate.rb: Parses dates
3
+ #
4
+ # Author:: Tadayoshi Funaba
5
+ # Documentation:: Konrad Meyer
6
+ #
7
+ # ParseDate munches on a date and turns it into an array of values.
8
+ #
9
+
10
+ #
11
+ # ParseDate converts a date into an array of values.
12
+ # For example:
13
+ #
14
+ # require 'parsedate'
15
+ #
16
+ # ParseDate.parsedate "Tuesday, July 6th, 2007, 18:35:20 UTC"
17
+ # # => [2007, 7, 6, 18, 35, 20, "UTC", 2]
18
+ #
19
+ # The order is of the form [year, month, day of month, hour, minute, second,
20
+ # timezone, day of the week].
21
+
22
+ require 'date/format'
23
+
24
+ module ParseDate
25
+ #
26
+ # Parse a string representation of a date into values.
27
+ # For example:
28
+ #
29
+ # require 'parsedate'
30
+ #
31
+ # ParseDate.parsedate "Tuesday, July 5th, 2007, 18:35:20 UTC"
32
+ # # => [2007, 7, 5, 18, 35, 20, "UTC", 2]
33
+ #
34
+ # The order is of the form [year, month, day of month, hour, minute,
35
+ # second, timezone, day of week].
36
+ #
37
+ # ParseDate.parsedate can also take a second argument, +comp+, which
38
+ # is a boolean telling the method to compensate for dates with years
39
+ # expressed as two digits. Example:
40
+ #
41
+ # require 'parsedate'
42
+ #
43
+ # ParseDate.parsedate "Mon Dec 25 00 06:53:24 UTC", true
44
+ # # => [2000, 12, 25, 6, 53, 24, "UTC", 1]
45
+ #
46
+ def parsedate(str, comp=false)
47
+ Date._parse(str, comp).
48
+ values_at(:year, :mon, :mday, :hour, :min, :sec, :zone, :wday)
49
+ end
50
+
51
+ module_function :parsedate
52
+
53
+ end
@@ -0,0 +1,1062 @@
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
+ # :startdoc:
198
+
199
+ #
200
+ # Create a Pathname object from the given String (or String-like object).
201
+ # If +path+ contains a NUL character (<tt>\0</tt>), an ArgumentError is raised.
202
+ #
203
+ def initialize(path)
204
+ path = path.__send__(TO_PATH) if path.respond_to? TO_PATH
205
+ @path = path.dup
206
+
207
+ if /\0/ =~ @path
208
+ raise ArgumentError, "pathname contains \\0: #{@path.inspect}"
209
+ end
210
+
211
+ self.taint if @path.tainted?
212
+ end
213
+
214
+ def freeze() super; @path.freeze; self end
215
+ def taint() super; @path.taint; self end
216
+ def untaint() super; @path.untaint; self end
217
+
218
+ #
219
+ # Compare this pathname with +other+. The comparison is string-based.
220
+ # Be aware that two different paths (<tt>foo.txt</tt> and <tt>./foo.txt</tt>)
221
+ # can refer to the same file.
222
+ #
223
+ def ==(other)
224
+ return false unless Pathname === other
225
+ other.to_s == @path
226
+ end
227
+ alias === ==
228
+ alias eql? ==
229
+
230
+ # Provides for comparing pathnames, case-sensitively.
231
+ def <=>(other)
232
+ return nil unless Pathname === other
233
+ @path.tr('/', "\0") <=> other.to_s.tr('/', "\0")
234
+ end
235
+
236
+ def hash # :nodoc:
237
+ @path.hash
238
+ end
239
+
240
+ # Return the path as a String.
241
+ def to_s
242
+ @path.dup
243
+ end
244
+
245
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
246
+ alias_method TO_PATH, :to_s
247
+
248
+ def inspect # :nodoc:
249
+ "#<#{self.class}:#{@path}>"
250
+ end
251
+
252
+ # Return a pathname which is substituted by String#sub.
253
+ def sub(pattern, *rest, &block)
254
+ self.class.new(@path.sub(pattern, *rest, &block))
255
+ end
256
+
257
+ if File::ALT_SEPARATOR
258
+ SEPARATOR_PAT = /[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]/
259
+ else
260
+ SEPARATOR_PAT = /#{Regexp.quote File::SEPARATOR}/
261
+ end
262
+
263
+ # chop_basename(path) -> [pre-basename, basename] or nil
264
+ def chop_basename(path)
265
+ base = File.basename(path)
266
+ if /\A#{SEPARATOR_PAT}?\z/ =~ base
267
+ return nil
268
+ else
269
+ return path[0, path.rindex(base)], base
270
+ end
271
+ end
272
+ private :chop_basename
273
+
274
+ # split_names(path) -> prefix, [name, ...]
275
+ def split_names(path)
276
+ names = []
277
+ while r = chop_basename(path)
278
+ path, basename = r
279
+ names.unshift basename
280
+ end
281
+ return path, names
282
+ end
283
+ private :split_names
284
+
285
+ def prepend_prefix(prefix, relpath)
286
+ if relpath.empty?
287
+ File.dirname(prefix)
288
+ elsif /#{SEPARATOR_PAT}/ =~ prefix
289
+ prefix = File.dirname(prefix)
290
+ prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a'
291
+ prefix + relpath
292
+ else
293
+ prefix + relpath
294
+ end
295
+ end
296
+ private :prepend_prefix
297
+
298
+ # Returns clean pathname of +self+ with consecutive slashes and useless dots
299
+ # removed. The filesystem is not accessed.
300
+ #
301
+ # If +consider_symlink+ is +true+, then a more conservative algorithm is used
302
+ # to avoid breaking symbolic linkages. This may retain more <tt>..</tt>
303
+ # entries than absolutely necessary, but without accessing the filesystem,
304
+ # this can't be avoided. See #realpath.
305
+ #
306
+ def cleanpath(consider_symlink=false)
307
+ if consider_symlink
308
+ cleanpath_conservative
309
+ else
310
+ cleanpath_aggressive
311
+ end
312
+ end
313
+
314
+ #
315
+ # Clean the path simply by resolving and removing excess "." and ".." entries.
316
+ # Nothing more, nothing less.
317
+ #
318
+ def cleanpath_aggressive
319
+ path = @path
320
+ names = []
321
+ pre = path
322
+ while r = chop_basename(pre)
323
+ pre, base = r
324
+ case base
325
+ when '.'
326
+ when '..'
327
+ names.unshift base
328
+ else
329
+ if names[0] == '..'
330
+ names.shift
331
+ else
332
+ names.unshift base
333
+ end
334
+ end
335
+ end
336
+ if /#{SEPARATOR_PAT}/o =~ File.basename(pre)
337
+ names.shift while names[0] == '..'
338
+ end
339
+ self.class.new(prepend_prefix(pre, File.join(*names)))
340
+ end
341
+ private :cleanpath_aggressive
342
+
343
+ # has_trailing_separator?(path) -> bool
344
+ def has_trailing_separator?(path)
345
+ if r = chop_basename(path)
346
+ pre, basename = r
347
+ pre.length + basename.length < path.length
348
+ else
349
+ false
350
+ end
351
+ end
352
+ private :has_trailing_separator?
353
+
354
+ # add_trailing_separator(path) -> path
355
+ def add_trailing_separator(path)
356
+ if File.basename(path + 'a') == 'a'
357
+ path
358
+ else
359
+ File.join(path, "") # xxx: Is File.join is appropriate to add separator?
360
+ end
361
+ end
362
+ private :add_trailing_separator
363
+
364
+ def del_trailing_separator(path)
365
+ if r = chop_basename(path)
366
+ pre, basename = r
367
+ pre + basename
368
+ elsif /#{SEPARATOR_PAT}+\z/o =~ path
369
+ $` + File.dirname(path)[/#{SEPARATOR_PAT}*\z/o]
370
+ else
371
+ path
372
+ end
373
+ end
374
+ private :del_trailing_separator
375
+
376
+ def cleanpath_conservative
377
+ path = @path
378
+ names = []
379
+ pre = path
380
+ while r = chop_basename(pre)
381
+ pre, base = r
382
+ names.unshift base if base != '.'
383
+ end
384
+ if /#{SEPARATOR_PAT}/o =~ File.basename(pre)
385
+ names.shift while names[0] == '..'
386
+ end
387
+ if names.empty?
388
+ self.class.new(File.dirname(pre))
389
+ else
390
+ if names.last != '..' && File.basename(path) == '.'
391
+ names << '.'
392
+ end
393
+ result = prepend_prefix(pre, File.join(*names))
394
+ if /\A(?:\.|\.\.)\z/ !~ names.last && has_trailing_separator?(path)
395
+ self.class.new(add_trailing_separator(result))
396
+ else
397
+ self.class.new(result)
398
+ end
399
+ end
400
+ end
401
+ private :cleanpath_conservative
402
+
403
+ def realpath_rec(prefix, unresolved, h)
404
+ resolved = []
405
+ until unresolved.empty?
406
+ n = unresolved.shift
407
+ if n == '.'
408
+ next
409
+ elsif n == '..'
410
+ resolved.pop
411
+ else
412
+ path = prepend_prefix(prefix, File.join(*(resolved + [n])))
413
+ if h.include? path
414
+ if h[path] == :resolving
415
+ raise Errno::ELOOP.new(path)
416
+ else
417
+ prefix, *resolved = h[path]
418
+ end
419
+ else
420
+ s = File.lstat(path)
421
+ if s.symlink?
422
+ h[path] = :resolving
423
+ link_prefix, link_names = split_names(File.readlink(path))
424
+ if link_prefix == ''
425
+ prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h)
426
+ else
427
+ prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h)
428
+ end
429
+ else
430
+ resolved << n
431
+ h[path] = [prefix, *resolved]
432
+ end
433
+ end
434
+ end
435
+ end
436
+ return prefix, *resolved
437
+ end
438
+ private :realpath_rec
439
+
440
+ #
441
+ # Returns a real (absolute) pathname of +self+ in the actual filesystem.
442
+ # The real pathname doesn't contain symlinks or useless dots.
443
+ #
444
+ # No arguments should be given; the old behaviour is *obsoleted*.
445
+ #
446
+ def realpath
447
+ path = @path
448
+ prefix, names = split_names(path)
449
+ if prefix == ''
450
+ prefix, names2 = split_names(Dir.pwd)
451
+ names = names2 + names
452
+ end
453
+ prefix, *names = realpath_rec(prefix, names, {})
454
+ self.class.new(prepend_prefix(prefix, File.join(*names)))
455
+ end
456
+
457
+ # #parent returns the parent directory.
458
+ #
459
+ # This is same as <tt>self + '..'</tt>.
460
+ def parent
461
+ self + '..'
462
+ end
463
+
464
+ # #mountpoint? returns +true+ if <tt>self</tt> points to a mountpoint.
465
+ def mountpoint?
466
+ begin
467
+ stat1 = self.lstat
468
+ stat2 = self.parent.lstat
469
+ stat1.dev == stat2.dev && stat1.ino == stat2.ino ||
470
+ stat1.dev != stat2.dev
471
+ rescue Errno::ENOENT
472
+ false
473
+ end
474
+ end
475
+
476
+ #
477
+ # #root? is a predicate for root directories. I.e. it returns +true+ if the
478
+ # pathname consists of consecutive slashes.
479
+ #
480
+ # It doesn't access actual filesystem. So it may return +false+ for some
481
+ # pathnames which points to roots such as <tt>/usr/..</tt>.
482
+ #
483
+ def root?
484
+ !!(chop_basename(@path) == nil && /#{SEPARATOR_PAT}/o =~ @path)
485
+ end
486
+
487
+ # Predicate method for testing whether a path is absolute.
488
+ # It returns +true+ if the pathname begins with a slash.
489
+ def absolute?
490
+ !relative?
491
+ end
492
+
493
+ # The opposite of #absolute?
494
+ def relative?
495
+ path = @path
496
+ while r = chop_basename(path)
497
+ path, basename = r
498
+ end
499
+ path == ''
500
+ end
501
+
502
+ #
503
+ # Iterates over each component of the path.
504
+ #
505
+ # Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }
506
+ # # yields "usr", "bin", and "ruby".
507
+ #
508
+ def each_filename # :yield: filename
509
+ prefix, names = split_names(@path)
510
+ names.each {|filename| yield filename }
511
+ nil
512
+ end
513
+
514
+ # Iterates over and yields a new Pathname object
515
+ # for each element in the given path in descending order.
516
+ #
517
+ # Pathname.new('/path/to/some/file.rb').descend {|v| p v}
518
+ # #<Pathname:/>
519
+ # #<Pathname:/path>
520
+ # #<Pathname:/path/to>
521
+ # #<Pathname:/path/to/some>
522
+ # #<Pathname:/path/to/some/file.rb>
523
+ #
524
+ # Pathname.new('path/to/some/file.rb').descend {|v| p v}
525
+ # #<Pathname:path>
526
+ # #<Pathname:path/to>
527
+ # #<Pathname:path/to/some>
528
+ # #<Pathname:path/to/some/file.rb>
529
+ #
530
+ # It doesn't access actual filesystem.
531
+ #
532
+ # This method is available since 1.8.5.
533
+ #
534
+ def descend
535
+ vs = []
536
+ ascend {|v| vs << v }
537
+ vs.reverse_each {|v| yield v }
538
+ nil
539
+ end
540
+
541
+ # Iterates over and yields a new Pathname object
542
+ # for each element in the given path in ascending order.
543
+ #
544
+ # Pathname.new('/path/to/some/file.rb').ascend {|v| p v}
545
+ # #<Pathname:/path/to/some/file.rb>
546
+ # #<Pathname:/path/to/some>
547
+ # #<Pathname:/path/to>
548
+ # #<Pathname:/path>
549
+ # #<Pathname:/>
550
+ #
551
+ # Pathname.new('path/to/some/file.rb').ascend {|v| p v}
552
+ # #<Pathname:path/to/some/file.rb>
553
+ # #<Pathname:path/to/some>
554
+ # #<Pathname:path/to>
555
+ # #<Pathname:path>
556
+ #
557
+ # It doesn't access actual filesystem.
558
+ #
559
+ # This method is available since 1.8.5.
560
+ #
561
+ def ascend
562
+ path = @path
563
+ yield self
564
+ while r = chop_basename(path)
565
+ path, name = r
566
+ break if path.empty?
567
+ yield self.class.new(del_trailing_separator(path))
568
+ end
569
+ end
570
+
571
+ #
572
+ # Pathname#+ appends a pathname fragment to this one to produce a new Pathname
573
+ # object.
574
+ #
575
+ # p1 = Pathname.new("/usr") # Pathname:/usr
576
+ # p2 = p1 + "bin/ruby" # Pathname:/usr/bin/ruby
577
+ # p3 = p1 + "/etc/passwd" # Pathname:/etc/passwd
578
+ #
579
+ # This method doesn't access the file system; it is pure string manipulation.
580
+ #
581
+ def +(other)
582
+ other = Pathname.new(other) unless Pathname === other
583
+ Pathname.new(plus(@path, other.to_s))
584
+ end
585
+
586
+ def plus(path1, path2) # -> path
587
+ prefix2 = path2
588
+ index_list2 = []
589
+ basename_list2 = []
590
+ while r2 = chop_basename(prefix2)
591
+ prefix2, basename2 = r2
592
+ index_list2.unshift prefix2.length
593
+ basename_list2.unshift basename2
594
+ end
595
+ return path2 if prefix2 != ''
596
+ prefix1 = path1
597
+ while true
598
+ while !basename_list2.empty? && basename_list2.first == '.'
599
+ index_list2.shift
600
+ basename_list2.shift
601
+ end
602
+ break unless r1 = chop_basename(prefix1)
603
+ prefix1, basename1 = r1
604
+ next if basename1 == '.'
605
+ if basename1 == '..' || basename_list2.empty? || basename_list2.first != '..'
606
+ prefix1 = prefix1 + basename1
607
+ break
608
+ end
609
+ index_list2.shift
610
+ basename_list2.shift
611
+ end
612
+ r1 = chop_basename(prefix1)
613
+ if !r1 && /#{SEPARATOR_PAT}/o =~ File.basename(prefix1)
614
+ while !basename_list2.empty? && basename_list2.first == '..'
615
+ index_list2.shift
616
+ basename_list2.shift
617
+ end
618
+ end
619
+ if !basename_list2.empty?
620
+ suffix2 = path2[index_list2.first..-1]
621
+ r1 ? File.join(prefix1, suffix2) : prefix1 + suffix2
622
+ else
623
+ r1 ? prefix1 : File.dirname(prefix1)
624
+ end
625
+ end
626
+ private :plus
627
+
628
+ #
629
+ # Pathname#join joins pathnames.
630
+ #
631
+ # <tt>path0.join(path1, ..., pathN)</tt> is the same as
632
+ # <tt>path0 + path1 + ... + pathN</tt>.
633
+ #
634
+ def join(*args)
635
+ args.unshift self
636
+ result = args.pop
637
+ result = Pathname.new(result) unless Pathname === result
638
+ return result if result.absolute?
639
+ args.reverse_each {|arg|
640
+ arg = Pathname.new(arg) unless Pathname === arg
641
+ result = arg + result
642
+ return result if result.absolute?
643
+ }
644
+ result
645
+ end
646
+
647
+ #
648
+ # Returns the children of the directory (files and subdirectories, not
649
+ # recursive) as an array of Pathname objects. By default, the returned
650
+ # pathnames will have enough information to access the files. If you set
651
+ # +with_directory+ to +false+, then the returned pathnames will contain the
652
+ # filename only.
653
+ #
654
+ # For example:
655
+ # p = Pathname("/usr/lib/ruby/1.8")
656
+ # p.children
657
+ # # -> [ Pathname:/usr/lib/ruby/1.8/English.rb,
658
+ # Pathname:/usr/lib/ruby/1.8/Env.rb,
659
+ # Pathname:/usr/lib/ruby/1.8/abbrev.rb, ... ]
660
+ # p.children(false)
661
+ # # -> [ Pathname:English.rb, Pathname:Env.rb, Pathname:abbrev.rb, ... ]
662
+ #
663
+ # Note that the result never contain the entries <tt>.</tt> and <tt>..</tt> in
664
+ # the directory because they are not children.
665
+ #
666
+ # This method has existed since 1.8.1.
667
+ #
668
+ def children(with_directory=true)
669
+ with_directory = false if @path == '.'
670
+ result = []
671
+ Dir.foreach(@path) {|e|
672
+ next if e == '.' || e == '..'
673
+ if with_directory
674
+ result << self.class.new(File.join(@path, e))
675
+ else
676
+ result << self.class.new(e)
677
+ end
678
+ }
679
+ result
680
+ end
681
+
682
+ #
683
+ # #relative_path_from returns a relative path from the argument to the
684
+ # receiver. If +self+ is absolute, the argument must be absolute too. If
685
+ # +self+ is relative, the argument must be relative too.
686
+ #
687
+ # #relative_path_from doesn't access the filesystem. It assumes no symlinks.
688
+ #
689
+ # ArgumentError is raised when it cannot find a relative path.
690
+ #
691
+ # This method has existed since 1.8.1.
692
+ #
693
+ def relative_path_from(base_directory)
694
+ dest_directory = self.cleanpath.to_s
695
+ base_directory = base_directory.cleanpath.to_s
696
+ dest_prefix = dest_directory
697
+ dest_names = []
698
+ while r = chop_basename(dest_prefix)
699
+ dest_prefix, basename = r
700
+ dest_names.unshift basename if basename != '.'
701
+ end
702
+ base_prefix = base_directory
703
+ base_names = []
704
+ while r = chop_basename(base_prefix)
705
+ base_prefix, basename = r
706
+ base_names.unshift basename if basename != '.'
707
+ end
708
+ if dest_prefix != base_prefix
709
+ raise ArgumentError, "different prefix: #{dest_prefix.inspect} and #{base_directory.inspect}"
710
+ end
711
+ while !dest_names.empty? &&
712
+ !base_names.empty? &&
713
+ dest_names.first == base_names.first
714
+ dest_names.shift
715
+ base_names.shift
716
+ end
717
+ if base_names.include? '..'
718
+ raise ArgumentError, "base_directory has ..: #{base_directory.inspect}"
719
+ end
720
+ base_names.fill('..')
721
+ relpath_names = base_names + dest_names
722
+ if relpath_names.empty?
723
+ Pathname.new('.')
724
+ else
725
+ Pathname.new(File.join(*relpath_names))
726
+ end
727
+ end
728
+ end
729
+
730
+ class Pathname # * IO *
731
+ #
732
+ # #each_line iterates over the line in the file. It yields a String object
733
+ # for each line.
734
+ #
735
+ # This method has existed since 1.8.1.
736
+ #
737
+ def each_line(*args, &block) # :yield: line
738
+ IO.foreach(@path, *args, &block)
739
+ end
740
+
741
+ # Pathname#foreachline is *obsoleted* at 1.8.1. Use #each_line.
742
+ def foreachline(*args, &block)
743
+ warn "Pathname#foreachline is obsoleted. Use Pathname#each_line."
744
+ each_line(*args, &block)
745
+ end
746
+
747
+ # See <tt>IO.read</tt>. Returns all the bytes from the file, or the first +N+
748
+ # if specified.
749
+ def read(*args) IO.read(@path, *args) end
750
+
751
+ # See <tt>IO.readlines</tt>. Returns all the lines from the file.
752
+ def readlines(*args) IO.readlines(@path, *args) end
753
+
754
+ # See <tt>IO.sysopen</tt>.
755
+ def sysopen(*args) IO.sysopen(@path, *args) end
756
+ end
757
+
758
+
759
+ class Pathname # * File *
760
+
761
+ # See <tt>File.atime</tt>. Returns last access time.
762
+ def atime() File.atime(@path) end
763
+
764
+ # See <tt>File.ctime</tt>. Returns last (directory entry, not file) change time.
765
+ def ctime() File.ctime(@path) end
766
+
767
+ # See <tt>File.mtime</tt>. Returns last modification time.
768
+ def mtime() File.mtime(@path) end
769
+
770
+ # See <tt>File.chmod</tt>. Changes permissions.
771
+ def chmod(mode) File.chmod(mode, @path) end
772
+
773
+ # See <tt>File.lchmod</tt>.
774
+ def lchmod(mode) File.lchmod(mode, @path) end
775
+
776
+ # See <tt>File.chown</tt>. Change owner and group of file.
777
+ def chown(owner, group) File.chown(owner, group, @path) end
778
+
779
+ # See <tt>File.lchown</tt>.
780
+ def lchown(owner, group) File.lchown(owner, group, @path) end
781
+
782
+ # See <tt>File.fnmatch</tt>. Return +true+ if the receiver matches the given
783
+ # pattern.
784
+ def fnmatch(pattern, *args) File.fnmatch(pattern, @path, *args) end
785
+
786
+ # See <tt>File.fnmatch?</tt> (same as #fnmatch).
787
+ def fnmatch?(pattern, *args) File.fnmatch?(pattern, @path, *args) end
788
+
789
+ # See <tt>File.ftype</tt>. Returns "type" of file ("file", "directory",
790
+ # etc).
791
+ def ftype() File.ftype(@path) end
792
+
793
+ # See <tt>File.link</tt>. Creates a hard link.
794
+ def make_link(old) File.link(old, @path) end
795
+
796
+ # See <tt>File.open</tt>. Opens the file for reading or writing.
797
+ def open(*args, &block) # :yield: file
798
+ File.open(@path, *args, &block)
799
+ end
800
+
801
+ # See <tt>File.readlink</tt>. Read symbolic link.
802
+ def readlink() self.class.new(File.readlink(@path)) end
803
+
804
+ # See <tt>File.rename</tt>. Rename the file.
805
+ def rename(to) File.rename(@path, to) end
806
+
807
+ # See <tt>File.stat</tt>. Returns a <tt>File::Stat</tt> object.
808
+ def stat() File.stat(@path) end
809
+
810
+ # See <tt>File.lstat</tt>.
811
+ def lstat() File.lstat(@path) end
812
+
813
+ # See <tt>File.symlink</tt>. Creates a symbolic link.
814
+ def make_symlink(old) File.symlink(old, @path) end
815
+
816
+ # See <tt>File.truncate</tt>. Truncate the file to +length+ bytes.
817
+ def truncate(length) File.truncate(@path, length) end
818
+
819
+ # See <tt>File.utime</tt>. Update the access and modification times.
820
+ def utime(atime, mtime) File.utime(atime, mtime, @path) end
821
+
822
+ # See <tt>File.basename</tt>. Returns the last component of the path.
823
+ def basename(*args) self.class.new(File.basename(@path, *args)) end
824
+
825
+ # See <tt>File.dirname</tt>. Returns all but the last component of the path.
826
+ def dirname() self.class.new(File.dirname(@path)) end
827
+
828
+ # See <tt>File.extname</tt>. Returns the file's extension.
829
+ def extname() File.extname(@path) end
830
+
831
+ # See <tt>File.expand_path</tt>.
832
+ def expand_path(*args) self.class.new(File.expand_path(@path, *args)) end
833
+
834
+ # See <tt>File.split</tt>. Returns the #dirname and the #basename in an
835
+ # Array.
836
+ def split() File.split(@path).map {|f| self.class.new(f) } end
837
+
838
+ # Pathname#link is confusing and *obsoleted* because the receiver/argument
839
+ # order is inverted to corresponding system call.
840
+ def link(old)
841
+ warn 'Pathname#link is obsoleted. Use Pathname#make_link.'
842
+ File.link(old, @path)
843
+ end
844
+
845
+ # Pathname#symlink is confusing and *obsoleted* because the receiver/argument
846
+ # order is inverted to corresponding system call.
847
+ def symlink(old)
848
+ warn 'Pathname#symlink is obsoleted. Use Pathname#make_symlink.'
849
+ File.symlink(old, @path)
850
+ end
851
+ end
852
+
853
+
854
+ class Pathname # * FileTest *
855
+
856
+ # See <tt>FileTest.blockdev?</tt>.
857
+ def blockdev?() FileTest.blockdev?(@path) end
858
+
859
+ # See <tt>FileTest.chardev?</tt>.
860
+ def chardev?() FileTest.chardev?(@path) end
861
+
862
+ # See <tt>FileTest.executable?</tt>.
863
+ def executable?() FileTest.executable?(@path) end
864
+
865
+ # See <tt>FileTest.executable_real?</tt>.
866
+ def executable_real?() FileTest.executable_real?(@path) end
867
+
868
+ # See <tt>FileTest.exist?</tt>.
869
+ def exist?() FileTest.exist?(@path) end
870
+
871
+ # See <tt>FileTest.grpowned?</tt>.
872
+ def grpowned?() FileTest.grpowned?(@path) end
873
+
874
+ # See <tt>FileTest.directory?</tt>.
875
+ def directory?() FileTest.directory?(@path) end
876
+
877
+ # See <tt>FileTest.file?</tt>.
878
+ def file?() FileTest.file?(@path) end
879
+
880
+ # See <tt>FileTest.pipe?</tt>.
881
+ def pipe?() FileTest.pipe?(@path) end
882
+
883
+ # See <tt>FileTest.socket?</tt>.
884
+ def socket?() FileTest.socket?(@path) end
885
+
886
+ # See <tt>FileTest.owned?</tt>.
887
+ def owned?() FileTest.owned?(@path) end
888
+
889
+ # See <tt>FileTest.readable?</tt>.
890
+ def readable?() FileTest.readable?(@path) end
891
+
892
+ # See <tt>FileTest.world_readable?</tt>.
893
+ def world_readable?() FileTest.world_readable?(@path) end
894
+
895
+ # See <tt>FileTest.readable_real?</tt>.
896
+ def readable_real?() FileTest.readable_real?(@path) end
897
+
898
+ # See <tt>FileTest.setuid?</tt>.
899
+ def setuid?() FileTest.setuid?(@path) end
900
+
901
+ # See <tt>FileTest.setgid?</tt>.
902
+ def setgid?() FileTest.setgid?(@path) end
903
+
904
+ # See <tt>FileTest.size</tt>.
905
+ def size() FileTest.size(@path) end
906
+
907
+ # See <tt>FileTest.size?</tt>.
908
+ def size?() FileTest.size?(@path) end
909
+
910
+ # See <tt>FileTest.sticky?</tt>.
911
+ def sticky?() FileTest.sticky?(@path) end
912
+
913
+ # See <tt>FileTest.symlink?</tt>.
914
+ def symlink?() FileTest.symlink?(@path) end
915
+
916
+ # See <tt>FileTest.writable?</tt>.
917
+ def writable?() FileTest.writable?(@path) end
918
+
919
+ # See <tt>FileTest.world_writable?</tt>.
920
+ def world_writable?() FileTest.world_writable?(@path) end
921
+
922
+ # See <tt>FileTest.writable_real?</tt>.
923
+ def writable_real?() FileTest.writable_real?(@path) end
924
+
925
+ # See <tt>FileTest.zero?</tt>.
926
+ def zero?() FileTest.zero?(@path) end
927
+ end
928
+
929
+
930
+ class Pathname # * Dir *
931
+ # See <tt>Dir.glob</tt>. Returns or yields Pathname objects.
932
+ def Pathname.glob(*args) # :yield: p
933
+ if block_given?
934
+ Dir.glob(*args) {|f| yield self.new(f) }
935
+ else
936
+ Dir.glob(*args).map {|f| self.new(f) }
937
+ end
938
+ end
939
+
940
+ # See <tt>Dir.getwd</tt>. Returns the current working directory as a Pathname.
941
+ def Pathname.getwd() self.new(Dir.getwd) end
942
+ class << self; alias pwd getwd end
943
+
944
+ # Pathname#chdir is *obsoleted* at 1.8.1.
945
+ def chdir(&block)
946
+ warn "Pathname#chdir is obsoleted. Use Dir.chdir."
947
+ Dir.chdir(@path, &block)
948
+ end
949
+
950
+ # Pathname#chroot is *obsoleted* at 1.8.1.
951
+ def chroot
952
+ warn "Pathname#chroot is obsoleted. Use Dir.chroot."
953
+ Dir.chroot(@path)
954
+ end
955
+
956
+ # Return the entries (files and subdirectories) in the directory, each as a
957
+ # Pathname object.
958
+ def entries() Dir.entries(@path).map {|f| self.class.new(f) } end
959
+
960
+ # Iterates over the entries (files and subdirectories) in the directory. It
961
+ # yields a Pathname object for each entry.
962
+ #
963
+ # This method has existed since 1.8.1.
964
+ def each_entry(&block) # :yield: p
965
+ Dir.foreach(@path) {|f| yield self.class.new(f) }
966
+ end
967
+
968
+ # Pathname#dir_foreach is *obsoleted* at 1.8.1.
969
+ def dir_foreach(*args, &block)
970
+ warn "Pathname#dir_foreach is obsoleted. Use Pathname#each_entry."
971
+ each_entry(*args, &block)
972
+ end
973
+
974
+ # See <tt>Dir.mkdir</tt>. Create the referenced directory.
975
+ def mkdir(*args) Dir.mkdir(@path, *args) end
976
+
977
+ # See <tt>Dir.rmdir</tt>. Remove the referenced directory.
978
+ def rmdir() Dir.rmdir(@path) end
979
+
980
+ # See <tt>Dir.open</tt>.
981
+ def opendir(&block) # :yield: dir
982
+ Dir.open(@path, &block)
983
+ end
984
+ end
985
+
986
+
987
+ class Pathname # * Find *
988
+ #
989
+ # Pathname#find is an iterator to traverse a directory tree in a depth first
990
+ # manner. It yields a Pathname for each file under "this" directory.
991
+ #
992
+ # Since it is implemented by <tt>find.rb</tt>, <tt>Find.prune</tt> can be used
993
+ # to control the traverse.
994
+ #
995
+ # If +self+ is <tt>.</tt>, yielded pathnames begin with a filename in the
996
+ # current directory, not <tt>./</tt>.
997
+ #
998
+ def find(&block) # :yield: p
999
+ require 'find'
1000
+ if @path == '.'
1001
+ Find.find(@path) {|f| yield self.class.new(f.sub(%r{\A\./}, '')) }
1002
+ else
1003
+ Find.find(@path) {|f| yield self.class.new(f) }
1004
+ end
1005
+ end
1006
+ end
1007
+
1008
+
1009
+ class Pathname # * FileUtils *
1010
+ # See <tt>FileUtils.mkpath</tt>. Creates a full path, including any
1011
+ # intermediate directories that don't yet exist.
1012
+ def mkpath
1013
+ require 'fileutils'
1014
+ FileUtils.mkpath(@path)
1015
+ nil
1016
+ end
1017
+
1018
+ # See <tt>FileUtils.rm_r</tt>. Deletes a directory and all beneath it.
1019
+ def rmtree
1020
+ # The name "rmtree" is borrowed from File::Path of Perl.
1021
+ # File::Path provides "mkpath" and "rmtree".
1022
+ require 'fileutils'
1023
+ FileUtils.rm_r(@path)
1024
+ nil
1025
+ end
1026
+ end
1027
+
1028
+
1029
+ class Pathname # * mixed *
1030
+ # Removes a file or directory, using <tt>File.unlink</tt> or
1031
+ # <tt>Dir.unlink</tt> as necessary.
1032
+ def unlink()
1033
+ begin
1034
+ Dir.unlink @path
1035
+ rescue Errno::ENOTDIR
1036
+ File.unlink @path
1037
+ end
1038
+ end
1039
+ alias delete unlink
1040
+
1041
+ # This method is *obsoleted* at 1.8.1. Use #each_line or #each_entry.
1042
+ def foreach(*args, &block)
1043
+ warn "Pathname#foreach is obsoleted. Use each_line or each_entry."
1044
+ if FileTest.directory? @path
1045
+ # For polymorphism between Dir.foreach and IO.foreach,
1046
+ # Pathname#foreach doesn't yield Pathname object.
1047
+ Dir.foreach(@path, *args, &block)
1048
+ else
1049
+ IO.foreach(@path, *args, &block)
1050
+ end
1051
+ end
1052
+ end
1053
+
1054
+ module Kernel
1055
+ # create a pathname object.
1056
+ #
1057
+ # This method is available since 1.8.5.
1058
+ def Pathname(path) # :doc:
1059
+ Pathname.new(path)
1060
+ end
1061
+ private :Pathname
1062
+ end