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,392 @@
1
+ #
2
+ # = net/protocol.rb
3
+ #
4
+ #--
5
+ # Copyright (c) 1999-2005 Yukihiro Matsumoto
6
+ # Copyright (c) 1999-2005 Minero Aoki
7
+ #
8
+ # written and maintained by Minero Aoki <aamine@loveruby.net>
9
+ #
10
+ # This program is free software. You can re-distribute and/or
11
+ # modify this program under the same terms as Ruby itself,
12
+ # Ruby Distribute License or GNU General Public License.
13
+ #
14
+ # $Id: protocol.rb 12092 2007-03-19 02:39:22Z aamine $
15
+ #++
16
+ #
17
+ # WARNING: This file is going to remove.
18
+ # Do not rely on the implementation written in this file.
19
+ #
20
+
21
+ require 'socket'
22
+ require 'timeout'
23
+
24
+ module Net # :nodoc:
25
+
26
+ class Protocol #:nodoc: internal use only
27
+ private
28
+ def Protocol.protocol_param(name, val)
29
+ module_eval(<<-End, __FILE__, __LINE__ + 1)
30
+ def #{name}
31
+ #{val}
32
+ end
33
+ End
34
+ end
35
+ end
36
+
37
+
38
+ class ProtocolError < StandardError; end
39
+ class ProtoSyntaxError < ProtocolError; end
40
+ class ProtoFatalError < ProtocolError; end
41
+ class ProtoUnknownError < ProtocolError; end
42
+ class ProtoServerError < ProtocolError; end
43
+ class ProtoAuthError < ProtocolError; end
44
+ class ProtoCommandError < ProtocolError; end
45
+ class ProtoRetriableError < ProtocolError; end
46
+ ProtocRetryError = ProtoRetriableError
47
+
48
+
49
+ class BufferedIO #:nodoc: internal use only
50
+ def initialize(io)
51
+ @io = io
52
+ @read_timeout = 60
53
+ @debug_output = nil
54
+ @rbuf = ''
55
+ end
56
+
57
+ attr_reader :io
58
+ attr_accessor :read_timeout
59
+ attr_accessor :debug_output
60
+
61
+ def inspect
62
+ "#<#{self.class} io=#{@io}>"
63
+ end
64
+
65
+ def closed?
66
+ @io.closed?
67
+ end
68
+
69
+ def close
70
+ @io.close
71
+ end
72
+
73
+ #
74
+ # Read
75
+ #
76
+
77
+ public
78
+
79
+ def read(len, dest = '', ignore_eof = false)
80
+ LOG "reading #{len} bytes..."
81
+ read_bytes = 0
82
+ begin
83
+ while read_bytes + @rbuf.size < len
84
+ dest << (s = rbuf_consume(@rbuf.size))
85
+ read_bytes += s.size
86
+ rbuf_fill
87
+ end
88
+ dest << (s = rbuf_consume(len - read_bytes))
89
+ read_bytes += s.size
90
+ rescue EOFError
91
+ raise unless ignore_eof
92
+ end
93
+ LOG "read #{read_bytes} bytes"
94
+ dest
95
+ end
96
+
97
+ def read_all(dest = '')
98
+ LOG 'reading all...'
99
+ read_bytes = 0
100
+ begin
101
+ while true
102
+ dest << (s = rbuf_consume(@rbuf.size))
103
+ read_bytes += s.size
104
+ rbuf_fill
105
+ end
106
+ rescue EOFError
107
+ ;
108
+ end
109
+ LOG "read #{read_bytes} bytes"
110
+ dest
111
+ end
112
+
113
+ def readuntil(terminator, ignore_eof = false)
114
+ begin
115
+ until idx = @rbuf.index(terminator)
116
+ rbuf_fill
117
+ end
118
+ return rbuf_consume(idx + terminator.size)
119
+ rescue EOFError
120
+ raise unless ignore_eof
121
+ return rbuf_consume(@rbuf.size)
122
+ end
123
+ end
124
+
125
+ def readline
126
+ readuntil("\n").chop
127
+ end
128
+
129
+ private
130
+
131
+ BUFSIZE = 1024 * 16
132
+
133
+ def rbuf_fill
134
+ timeout(@read_timeout) {
135
+ @rbuf << @io.sysread(BUFSIZE)
136
+ }
137
+ end
138
+
139
+ def rbuf_consume(len)
140
+ s = @rbuf.slice!(0, len)
141
+ @debug_output << %Q[-> #{s.dump}\n] if @debug_output
142
+ s
143
+ end
144
+
145
+ #
146
+ # Write
147
+ #
148
+
149
+ public
150
+
151
+ def write(str)
152
+ writing {
153
+ write0 str
154
+ }
155
+ end
156
+
157
+ def writeline(str)
158
+ writing {
159
+ write0 str + "\r\n"
160
+ }
161
+ end
162
+
163
+ private
164
+
165
+ def writing
166
+ @written_bytes = 0
167
+ @debug_output << '<- ' if @debug_output
168
+ yield
169
+ @debug_output << "\n" if @debug_output
170
+ bytes = @written_bytes
171
+ @written_bytes = nil
172
+ bytes
173
+ end
174
+
175
+ def write0(str)
176
+ @debug_output << str.dump if @debug_output
177
+ len = @io.write(str)
178
+ @written_bytes += len
179
+ len
180
+ end
181
+
182
+ #
183
+ # Logging
184
+ #
185
+
186
+ private
187
+
188
+ def LOG_off
189
+ @save_debug_out = @debug_output
190
+ @debug_output = nil
191
+ end
192
+
193
+ def LOG_on
194
+ @debug_output = @save_debug_out
195
+ end
196
+
197
+ def LOG(msg)
198
+ return unless @debug_output
199
+ @debug_output << msg + "\n"
200
+ end
201
+ end
202
+
203
+
204
+ class InternetMessageIO < BufferedIO #:nodoc: internal use only
205
+ def InternetMessageIO.old_open(addr, port,
206
+ open_timeout = nil, read_timeout = nil, debug_output = nil)
207
+ debug_output << "opening connection to #{addr}...\n" if debug_output
208
+ s = timeout(open_timeout) { TCPsocket.new(addr, port) }
209
+ io = new(s)
210
+ io.read_timeout = read_timeout
211
+ io.debug_output = debug_output
212
+ io
213
+ end
214
+
215
+ def initialize(io)
216
+ super
217
+ @wbuf = nil
218
+ end
219
+
220
+ #
221
+ # Read
222
+ #
223
+
224
+ def each_message_chunk
225
+ LOG 'reading message...'
226
+ LOG_off()
227
+ read_bytes = 0
228
+ while (line = readuntil("\r\n")) != ".\r\n"
229
+ read_bytes += line.size
230
+ yield line.sub(/\A\./, '')
231
+ end
232
+ LOG_on()
233
+ LOG "read message (#{read_bytes} bytes)"
234
+ end
235
+
236
+ # *library private* (cannot handle 'break')
237
+ def each_list_item
238
+ while (str = readuntil("\r\n")) != ".\r\n"
239
+ yield str.chop
240
+ end
241
+ end
242
+
243
+ def write_message_0(src)
244
+ prev = @written_bytes
245
+ each_crlf_line(src) do |line|
246
+ write0 line.sub(/\A\./, '..')
247
+ end
248
+ @written_bytes - prev
249
+ end
250
+
251
+ #
252
+ # Write
253
+ #
254
+
255
+ def write_message(src)
256
+ LOG "writing message from #{src.class}"
257
+ LOG_off()
258
+ len = writing {
259
+ using_each_crlf_line {
260
+ write_message_0 src
261
+ }
262
+ }
263
+ LOG_on()
264
+ LOG "wrote #{len} bytes"
265
+ len
266
+ end
267
+
268
+ def write_message_by_block(&block)
269
+ LOG 'writing message from block'
270
+ LOG_off()
271
+ len = writing {
272
+ using_each_crlf_line {
273
+ begin
274
+ block.call(WriteAdapter.new(self, :write_message_0))
275
+ rescue LocalJumpError
276
+ # allow `break' from writer block
277
+ end
278
+ }
279
+ }
280
+ LOG_on()
281
+ LOG "wrote #{len} bytes"
282
+ len
283
+ end
284
+
285
+ private
286
+
287
+ def using_each_crlf_line
288
+ @wbuf = ''
289
+ yield
290
+ if not @wbuf.empty? # unterminated last line
291
+ write0 @wbuf.chomp + "\r\n"
292
+ elsif @written_bytes == 0 # empty src
293
+ write0 "\r\n"
294
+ end
295
+ write0 ".\r\n"
296
+ @wbuf = nil
297
+ end
298
+
299
+ def each_crlf_line(src)
300
+ buffer_filling(@wbuf, src) do
301
+ while line = @wbuf.slice!(/\A.*(?:\n|\r\n|\r(?!\z))/n)
302
+ yield line.chomp("\n") + "\r\n"
303
+ end
304
+ end
305
+ end
306
+
307
+ def buffer_filling(buf, src)
308
+ case src
309
+ when String # for speeding up.
310
+ 0.step(src.size - 1, 1024) do |i|
311
+ buf << src[i, 1024]
312
+ yield
313
+ end
314
+ when File # for speeding up.
315
+ while s = src.read(1024)
316
+ buf << s
317
+ yield
318
+ end
319
+ else # generic reader
320
+ src.each do |s|
321
+ buf << s
322
+ yield if buf.size > 1024
323
+ end
324
+ yield unless buf.empty?
325
+ end
326
+ end
327
+ end
328
+
329
+
330
+ #
331
+ # The writer adapter class
332
+ #
333
+ class WriteAdapter
334
+ def initialize(socket, method)
335
+ @socket = socket
336
+ @method_id = method
337
+ end
338
+
339
+ def inspect
340
+ "#<#{self.class} socket=#{@socket.inspect}>"
341
+ end
342
+
343
+ def write(str)
344
+ @socket.__send__(@method_id, str)
345
+ end
346
+
347
+ alias print write
348
+
349
+ def <<(str)
350
+ write str
351
+ self
352
+ end
353
+
354
+ def puts(str = '')
355
+ write str.chomp("\n") + "\n"
356
+ end
357
+
358
+ def printf(*args)
359
+ write sprintf(*args)
360
+ end
361
+ end
362
+
363
+
364
+ class ReadAdapter #:nodoc: internal use only
365
+ def initialize(block)
366
+ @block = block
367
+ end
368
+
369
+ def inspect
370
+ "#<#{self.class}>"
371
+ end
372
+
373
+ def <<(str)
374
+ call_block(str, &@block) if @block
375
+ end
376
+
377
+ private
378
+
379
+ # This method is needed because @block must be called by yield,
380
+ # not Proc#call. You can see difference when using `break' in
381
+ # the block.
382
+ def call_block(str)
383
+ yield str
384
+ end
385
+ end
386
+
387
+
388
+ module NetPrivate #:nodoc: obsolete
389
+ Socket = ::Net::InternetMessageIO
390
+ end
391
+
392
+ end # module Net
@@ -0,0 +1,1014 @@
1
+ # = net/smtp.rb
2
+ #
3
+ # Copyright (c) 1999-2007 Yukihiro Matsumoto.
4
+ #
5
+ # Copyright (c) 1999-2007 Minero Aoki.
6
+ #
7
+ # Written & maintained by Minero Aoki <aamine@loveruby.net>.
8
+ #
9
+ # Documented by William Webber and Minero Aoki.
10
+ #
11
+ # This program is free software. You can re-distribute and/or
12
+ # modify this program under the same terms as Ruby itself.
13
+ #
14
+ # NOTE: You can find Japanese version of this document at:
15
+ # http://www.ruby-lang.org/ja/man/html/net_smtp.html
16
+ #
17
+ # $Id: smtp.rb 16034 2008-04-15 08:50:21Z kazu $
18
+ #
19
+ # See Net::SMTP for documentation.
20
+ #
21
+
22
+ require 'net/protocol'
23
+ require 'digest/md5'
24
+ require 'timeout'
25
+ begin
26
+ require 'openssl'
27
+ rescue LoadError
28
+ end
29
+
30
+ module Net
31
+
32
+ # Module mixed in to all SMTP error classes
33
+ module SMTPError
34
+ # This *class* is a module for backward compatibility.
35
+ # In later release, this module becomes a class.
36
+ end
37
+
38
+ # Represents an SMTP authentication error.
39
+ class SMTPAuthenticationError < ProtoAuthError
40
+ include SMTPError
41
+ end
42
+
43
+ # Represents SMTP error code 420 or 450, a temporary error.
44
+ class SMTPServerBusy < ProtoServerError
45
+ include SMTPError
46
+ end
47
+
48
+ # Represents an SMTP command syntax error (error code 500)
49
+ class SMTPSyntaxError < ProtoSyntaxError
50
+ include SMTPError
51
+ end
52
+
53
+ # Represents a fatal SMTP error (error code 5xx, except for 500)
54
+ class SMTPFatalError < ProtoFatalError
55
+ include SMTPError
56
+ end
57
+
58
+ # Unexpected reply code returned from server.
59
+ class SMTPUnknownError < ProtoUnknownError
60
+ include SMTPError
61
+ end
62
+
63
+ # Command is not supported on server.
64
+ class SMTPUnsupportedCommand < ProtocolError
65
+ include SMTPError
66
+ end
67
+
68
+ #
69
+ # = Net::SMTP
70
+ #
71
+ # == What is This Library?
72
+ #
73
+ # This library provides functionality to send internet
74
+ # mail via SMTP, the Simple Mail Transfer Protocol. For details of
75
+ # SMTP itself, see [RFC2821] (http://www.ietf.org/rfc/rfc2821.txt).
76
+ #
77
+ # == What is This Library NOT?
78
+ #
79
+ # This library does NOT provide functions to compose internet mails.
80
+ # You must create them by yourself. If you want better mail support,
81
+ # try RubyMail or TMail. You can get both libraries from RAA.
82
+ # (http://www.ruby-lang.org/en/raa.html)
83
+ #
84
+ # FYI: the official documentation on internet mail is: [RFC2822] (http://www.ietf.org/rfc/rfc2822.txt).
85
+ #
86
+ # == Examples
87
+ #
88
+ # === Sending Messages
89
+ #
90
+ # You must open a connection to an SMTP server before sending messages.
91
+ # The first argument is the address of your SMTP server, and the second
92
+ # argument is the port number. Using SMTP.start with a block is the simplest
93
+ # way to do this. This way, the SMTP connection is closed automatically
94
+ # after the block is executed.
95
+ #
96
+ # require 'net/smtp'
97
+ # Net::SMTP.start('your.smtp.server', 25) do |smtp|
98
+ # # Use the SMTP object smtp only in this block.
99
+ # end
100
+ #
101
+ # Replace 'your.smtp.server' with your SMTP server. Normally
102
+ # your system manager or internet provider supplies a server
103
+ # for you.
104
+ #
105
+ # Then you can send messages.
106
+ #
107
+ # msgstr = <<END_OF_MESSAGE
108
+ # From: Your Name <your@mail.address>
109
+ # To: Destination Address <someone@example.com>
110
+ # Subject: test message
111
+ # Date: Sat, 23 Jun 2001 16:26:43 +0900
112
+ # Message-Id: <unique.message.id.string@example.com>
113
+ #
114
+ # This is a test message.
115
+ # END_OF_MESSAGE
116
+ #
117
+ # require 'net/smtp'
118
+ # Net::SMTP.start('your.smtp.server', 25) do |smtp|
119
+ # smtp.send_message msgstr,
120
+ # 'your@mail.address',
121
+ # 'his_addess@example.com'
122
+ # end
123
+ #
124
+ # === Closing the Session
125
+ #
126
+ # You MUST close the SMTP session after sending messages, by calling
127
+ # the #finish method:
128
+ #
129
+ # # using SMTP#finish
130
+ # smtp = Net::SMTP.start('your.smtp.server', 25)
131
+ # smtp.send_message msgstr, 'from@address', 'to@address'
132
+ # smtp.finish
133
+ #
134
+ # You can also use the block form of SMTP.start/SMTP#start. This closes
135
+ # the SMTP session automatically:
136
+ #
137
+ # # using block form of SMTP.start
138
+ # Net::SMTP.start('your.smtp.server', 25) do |smtp|
139
+ # smtp.send_message msgstr, 'from@address', 'to@address'
140
+ # end
141
+ #
142
+ # I strongly recommend this scheme. This form is simpler and more robust.
143
+ #
144
+ # === HELO domain
145
+ #
146
+ # In almost all situations, you must provide a third argument
147
+ # to SMTP.start/SMTP#start. This is the domain name which you are on
148
+ # (the host to send mail from). It is called the "HELO domain".
149
+ # The SMTP server will judge whether it should send or reject
150
+ # the SMTP session by inspecting the HELO domain.
151
+ #
152
+ # Net::SMTP.start('your.smtp.server', 25,
153
+ # 'mail.from.domain') { |smtp| ... }
154
+ #
155
+ # === SMTP Authentication
156
+ #
157
+ # The Net::SMTP class supports three authentication schemes;
158
+ # PLAIN, LOGIN and CRAM MD5. (SMTP Authentication: [RFC2554])
159
+ # To use SMTP authentication, pass extra arguments to
160
+ # SMTP.start/SMTP#start.
161
+ #
162
+ # # PLAIN
163
+ # Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',
164
+ # 'Your Account', 'Your Password', :plain)
165
+ # # LOGIN
166
+ # Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',
167
+ # 'Your Account', 'Your Password', :login)
168
+ #
169
+ # # CRAM MD5
170
+ # Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',
171
+ # 'Your Account', 'Your Password', :cram_md5)
172
+ #
173
+ class SMTP
174
+
175
+ Revision = %q$Revision: 16034 $.split[1]
176
+
177
+ # The default SMTP port number, 25.
178
+ def SMTP.default_port
179
+ 25
180
+ end
181
+
182
+ # The default mail submission port number, 587.
183
+ def SMTP.default_submission_port
184
+ 587
185
+ end
186
+
187
+ # The default SMTPS port number, 465.
188
+ def SMTP.default_tls_port
189
+ 465
190
+ end
191
+
192
+ class << self
193
+ alias default_ssl_port default_tls_port
194
+ end
195
+
196
+ def SMTP.default_ssl_context
197
+ OpenSSL::SSL::SSLContext.new
198
+ end
199
+
200
+ #
201
+ # Creates a new Net::SMTP object.
202
+ #
203
+ # +address+ is the hostname or ip address of your SMTP
204
+ # server. +port+ is the port to connect to; it defaults to
205
+ # port 25.
206
+ #
207
+ # This method does not open the TCP connection. You can use
208
+ # SMTP.start instead of SMTP.new if you want to do everything
209
+ # at once. Otherwise, follow SMTP.new with SMTP#start.
210
+ #
211
+ def initialize(address, port = nil)
212
+ @address = address
213
+ @port = (port || SMTP.default_port)
214
+ @esmtp = true
215
+ @capabilities = nil
216
+ @socket = nil
217
+ @started = false
218
+ @open_timeout = 30
219
+ @read_timeout = 60
220
+ @error_occured = false
221
+ @debug_output = nil
222
+ @tls = false
223
+ @starttls = false
224
+ @ssl_context = nil
225
+ end
226
+
227
+ # Provide human-readable stringification of class state.
228
+ def inspect
229
+ "#<#{self.class} #{@address}:#{@port} started=#{@started}>"
230
+ end
231
+
232
+ # +true+ if the SMTP object uses ESMTP (which it does by default).
233
+ def esmtp?
234
+ @esmtp
235
+ end
236
+
237
+ #
238
+ # Set whether to use ESMTP or not. This should be done before
239
+ # calling #start. Note that if #start is called in ESMTP mode,
240
+ # and the connection fails due to a ProtocolError, the SMTP
241
+ # object will automatically switch to plain SMTP mode and
242
+ # retry (but not vice versa).
243
+ #
244
+ def esmtp=(bool)
245
+ @esmtp = bool
246
+ end
247
+
248
+ alias esmtp esmtp?
249
+
250
+ # true if server advertises STARTTLS.
251
+ # You cannot get valid value before opening SMTP session.
252
+ def capable_starttls?
253
+ capable?('STARTTLS')
254
+ end
255
+
256
+ def capable?(key)
257
+ return nil unless @capabilities
258
+ @capabilities[key] ? true : false
259
+ end
260
+ private :capable?
261
+
262
+ # true if server advertises AUTH PLAIN.
263
+ # You cannot get valid value before opening SMTP session.
264
+ def capable_plain_auth?
265
+ auth_capable?('PLAIN')
266
+ end
267
+
268
+ # true if server advertises AUTH LOGIN.
269
+ # You cannot get valid value before opening SMTP session.
270
+ def capable_login_auth?
271
+ auth_capable?('LOGIN')
272
+ end
273
+
274
+ # true if server advertises AUTH CRAM-MD5.
275
+ # You cannot get valid value before opening SMTP session.
276
+ def capable_cram_md5_auth?
277
+ auth_capable?('CRAM-MD5')
278
+ end
279
+
280
+ def auth_capable?(type)
281
+ return nil unless @capabilities
282
+ return false unless @capabilities['AUTH']
283
+ @capabilities['AUTH'].include?(type)
284
+ end
285
+ private :auth_capable?
286
+
287
+ # Returns supported authentication methods on this server.
288
+ # You cannot get valid value before opening SMTP session.
289
+ def capable_auth_types
290
+ return [] unless @capabilities
291
+ return [] unless @capabilities['AUTH']
292
+ @capabilities['AUTH']
293
+ end
294
+
295
+ # true if this object uses SMTP/TLS (SMTPS).
296
+ def tls?
297
+ @tls
298
+ end
299
+
300
+ alias ssl? tls?
301
+
302
+ # Enables SMTP/TLS (SMTPS: SMTP over direct TLS connection) for
303
+ # this object. Must be called before the connection is established
304
+ # to have any effect. +context+ is a OpenSSL::SSL::SSLContext object.
305
+ def enable_tls(context = SMTP.default_ssl_context)
306
+ raise 'openssl library not installed' unless defined?(OpenSSL)
307
+ raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @starttls
308
+ @tls = true
309
+ @ssl_context = context
310
+ end
311
+
312
+ alias enable_ssl enable_tls
313
+
314
+ # Disables SMTP/TLS for this object. Must be called before the
315
+ # connection is established to have any effect.
316
+ def disable_tls
317
+ @tls = false
318
+ @ssl_context = nil
319
+ end
320
+
321
+ alias disable_ssl disable_tls
322
+
323
+ # Returns truth value if this object uses STARTTLS.
324
+ # If this object always uses STARTTLS, returns :always.
325
+ # If this object uses STARTTLS when the server support TLS, returns :auto.
326
+ def starttls?
327
+ @starttls
328
+ end
329
+
330
+ # true if this object uses STARTTLS.
331
+ def starttls_always?
332
+ @starttls == :always
333
+ end
334
+
335
+ # true if this object uses STARTTLS when server advertises STARTTLS.
336
+ def starttls_auto?
337
+ @starttls == :auto
338
+ end
339
+
340
+ # Enables SMTP/TLS (STARTTLS) for this object.
341
+ # +context+ is a OpenSSL::SSL::SSLContext object.
342
+ def enable_starttls(context = SMTP.default_ssl_context)
343
+ raise 'openssl library not installed' unless defined?(OpenSSL)
344
+ raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @tls
345
+ @starttls = :always
346
+ @ssl_context = context
347
+ end
348
+
349
+ # Enables SMTP/TLS (STARTTLS) for this object if server accepts.
350
+ # +context+ is a OpenSSL::SSL::SSLContext object.
351
+ def enable_starttls_auto(context = SMTP.default_ssl_context)
352
+ raise 'openssl library not installed' unless defined?(OpenSSL)
353
+ raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @tls
354
+ @starttls = :auto
355
+ @ssl_context = context
356
+ end
357
+
358
+ # Disables SMTP/TLS (STARTTLS) for this object. Must be called
359
+ # before the connection is established to have any effect.
360
+ def disable_starttls
361
+ @starttls = false
362
+ @ssl_context = nil
363
+ end
364
+
365
+ # The address of the SMTP server to connect to.
366
+ attr_reader :address
367
+
368
+ # The port number of the SMTP server to connect to.
369
+ attr_reader :port
370
+
371
+ # Seconds to wait while attempting to open a connection.
372
+ # If the connection cannot be opened within this time, a
373
+ # TimeoutError is raised.
374
+ attr_accessor :open_timeout
375
+
376
+ # Seconds to wait while reading one block (by one read(2) call).
377
+ # If the read(2) call does not complete within this time, a
378
+ # TimeoutError is raised.
379
+ attr_reader :read_timeout
380
+
381
+ # Set the number of seconds to wait until timing-out a read(2)
382
+ # call.
383
+ def read_timeout=(sec)
384
+ @socket.read_timeout = sec if @socket
385
+ @read_timeout = sec
386
+ end
387
+
388
+ #
389
+ # WARNING: This method causes serious security holes.
390
+ # Use this method for only debugging.
391
+ #
392
+ # Set an output stream for debug logging.
393
+ # You must call this before #start.
394
+ #
395
+ # # example
396
+ # smtp = Net::SMTP.new(addr, port)
397
+ # smtp.set_debug_output $stderr
398
+ # smtp.start do |smtp|
399
+ # ....
400
+ # end
401
+ #
402
+ def debug_output=(arg)
403
+ @debug_output = arg
404
+ end
405
+
406
+ alias set_debug_output debug_output=
407
+
408
+ #
409
+ # SMTP session control
410
+ #
411
+
412
+ #
413
+ # Creates a new Net::SMTP object and connects to the server.
414
+ #
415
+ # This method is equivalent to:
416
+ #
417
+ # Net::SMTP.new(address, port).start(helo_domain, account, password, authtype)
418
+ #
419
+ # === Example
420
+ #
421
+ # Net::SMTP.start('your.smtp.server') do |smtp|
422
+ # smtp.send_message msgstr, 'from@example.com', ['dest@example.com']
423
+ # end
424
+ #
425
+ # === Block Usage
426
+ #
427
+ # If called with a block, the newly-opened Net::SMTP object is yielded
428
+ # to the block, and automatically closed when the block finishes. If called
429
+ # without a block, the newly-opened Net::SMTP object is returned to
430
+ # the caller, and it is the caller's responsibility to close it when
431
+ # finished.
432
+ #
433
+ # === Parameters
434
+ #
435
+ # +address+ is the hostname or ip address of your smtp server.
436
+ #
437
+ # +port+ is the port to connect to; it defaults to port 25.
438
+ #
439
+ # +helo+ is the _HELO_ _domain_ provided by the client to the
440
+ # server (see overview comments); it defaults to 'localhost.localdomain'.
441
+ #
442
+ # The remaining arguments are used for SMTP authentication, if required
443
+ # or desired. +user+ is the account name; +secret+ is your password
444
+ # or other authentication token; and +authtype+ is the authentication
445
+ # type, one of :plain, :login, or :cram_md5. See the discussion of
446
+ # SMTP Authentication in the overview notes.
447
+ #
448
+ # === Errors
449
+ #
450
+ # This method may raise:
451
+ #
452
+ # * Net::SMTPAuthenticationError
453
+ # * Net::SMTPServerBusy
454
+ # * Net::SMTPSyntaxError
455
+ # * Net::SMTPFatalError
456
+ # * Net::SMTPUnknownError
457
+ # * IOError
458
+ # * TimeoutError
459
+ #
460
+ def SMTP.start(address, port = nil, helo = 'localhost.localdomain',
461
+ user = nil, secret = nil, authtype = nil,
462
+ &block) # :yield: smtp
463
+ new(address, port).start(helo, user, secret, authtype, &block)
464
+ end
465
+
466
+ # +true+ if the SMTP session has been started.
467
+ def started?
468
+ @started
469
+ end
470
+
471
+ #
472
+ # Opens a TCP connection and starts the SMTP session.
473
+ #
474
+ # === Parameters
475
+ #
476
+ # +helo+ is the _HELO_ _domain_ that you'll dispatch mails from; see
477
+ # the discussion in the overview notes.
478
+ #
479
+ # If both of +user+ and +secret+ are given, SMTP authentication
480
+ # will be attempted using the AUTH command. +authtype+ specifies
481
+ # the type of authentication to attempt; it must be one of
482
+ # :login, :plain, and :cram_md5. See the notes on SMTP Authentication
483
+ # in the overview.
484
+ #
485
+ # === Block Usage
486
+ #
487
+ # When this methods is called with a block, the newly-started SMTP
488
+ # object is yielded to the block, and automatically closed after
489
+ # the block call finishes. Otherwise, it is the caller's
490
+ # responsibility to close the session when finished.
491
+ #
492
+ # === Example
493
+ #
494
+ # This is very similar to the class method SMTP.start.
495
+ #
496
+ # require 'net/smtp'
497
+ # smtp = Net::SMTP.new('smtp.mail.server', 25)
498
+ # smtp.start(helo_domain, account, password, authtype) do |smtp|
499
+ # smtp.send_message msgstr, 'from@example.com', ['dest@example.com']
500
+ # end
501
+ #
502
+ # The primary use of this method (as opposed to SMTP.start)
503
+ # is probably to set debugging (#set_debug_output) or ESMTP
504
+ # (#esmtp=), which must be done before the session is
505
+ # started.
506
+ #
507
+ # === Errors
508
+ #
509
+ # If session has already been started, an IOError will be raised.
510
+ #
511
+ # This method may raise:
512
+ #
513
+ # * Net::SMTPAuthenticationError
514
+ # * Net::SMTPServerBusy
515
+ # * Net::SMTPSyntaxError
516
+ # * Net::SMTPFatalError
517
+ # * Net::SMTPUnknownError
518
+ # * IOError
519
+ # * TimeoutError
520
+ #
521
+ def start(helo = 'localhost.localdomain',
522
+ user = nil, secret = nil, authtype = nil) # :yield: smtp
523
+ if block_given?
524
+ begin
525
+ do_start helo, user, secret, authtype
526
+ return yield(self)
527
+ ensure
528
+ do_finish
529
+ end
530
+ else
531
+ do_start helo, user, secret, authtype
532
+ return self
533
+ end
534
+ end
535
+
536
+ # Finishes the SMTP session and closes TCP connection.
537
+ # Raises IOError if not started.
538
+ def finish
539
+ raise IOError, 'not yet started' unless started?
540
+ do_finish
541
+ end
542
+
543
+ private
544
+
545
+ def do_start(helo_domain, user, secret, authtype)
546
+ raise IOError, 'SMTP session already started' if @started
547
+ if user or secret
548
+ check_auth_method(authtype || DEFAULT_AUTH_TYPE)
549
+ check_auth_args user, secret
550
+ end
551
+ s = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
552
+ logging "Connection opened: #{@address}:#{@port}"
553
+ @socket = new_internet_message_io(tls? ? tlsconnect(s) : s)
554
+ check_response critical { recv_response() }
555
+ do_helo helo_domain
556
+ if starttls_always? or (capable_starttls? and starttls_auto?)
557
+ unless capable_starttls?
558
+ raise SMTPUnsupportedCommand,
559
+ "STARTTLS is not supported on this server"
560
+ end
561
+ starttls
562
+ @socket = new_internet_message_io(tlsconnect(s))
563
+ # helo response may be different after STARTTLS
564
+ do_helo helo_domain
565
+ end
566
+ authenticate user, secret, (authtype || DEFAULT_AUTH_TYPE) if user
567
+ @started = true
568
+ ensure
569
+ unless @started
570
+ # authentication failed, cancel connection.
571
+ s.close if s and not s.closed?
572
+ @socket = nil
573
+ end
574
+ end
575
+
576
+ def tlsconnect(s)
577
+ s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)
578
+ logging "TLS connection started"
579
+ s.sync_close = true
580
+ s.connect
581
+ if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
582
+ s.post_connection_check(@address)
583
+ end
584
+ s
585
+ end
586
+
587
+ def new_internet_message_io(s)
588
+ io = InternetMessageIO.new(s)
589
+ io.read_timeout = @read_timeout
590
+ io.debug_output = @debug_output
591
+ io
592
+ end
593
+
594
+ def do_helo(helo_domain)
595
+ res = @esmtp ? ehlo(helo_domain) : helo(helo_domain)
596
+ @capabilities = res.capabilities
597
+ rescue SMTPError
598
+ if @esmtp
599
+ @esmtp = false
600
+ @error_occured = false
601
+ retry
602
+ end
603
+ raise
604
+ end
605
+
606
+ def do_finish
607
+ quit if @socket and not @socket.closed? and not @error_occured
608
+ ensure
609
+ @started = false
610
+ @error_occured = false
611
+ @socket.close if @socket and not @socket.closed?
612
+ @socket = nil
613
+ end
614
+
615
+ #
616
+ # Message Sending
617
+ #
618
+
619
+ public
620
+
621
+ #
622
+ # Sends +msgstr+ as a message. Single CR ("\r") and LF ("\n") found
623
+ # in the +msgstr+, are converted into the CR LF pair. You cannot send a
624
+ # binary message with this method. +msgstr+ should include both
625
+ # the message headers and body.
626
+ #
627
+ # +from_addr+ is a String representing the source mail address.
628
+ #
629
+ # +to_addr+ is a String or Strings or Array of Strings, representing
630
+ # the destination mail address or addresses.
631
+ #
632
+ # === Example
633
+ #
634
+ # Net::SMTP.start('smtp.example.com') do |smtp|
635
+ # smtp.send_message msgstr,
636
+ # 'from@example.com',
637
+ # ['dest@example.com', 'dest2@example.com']
638
+ # end
639
+ #
640
+ # === Errors
641
+ #
642
+ # This method may raise:
643
+ #
644
+ # * Net::SMTPServerBusy
645
+ # * Net::SMTPSyntaxError
646
+ # * Net::SMTPFatalError
647
+ # * Net::SMTPUnknownError
648
+ # * IOError
649
+ # * TimeoutError
650
+ #
651
+ def send_message(msgstr, from_addr, *to_addrs)
652
+ raise IOError, 'closed session' unless @socket
653
+ mailfrom from_addr
654
+ rcptto_list to_addrs
655
+ data msgstr
656
+ end
657
+
658
+ alias send_mail send_message
659
+ alias sendmail send_message # obsolete
660
+
661
+ #
662
+ # Opens a message writer stream and gives it to the block.
663
+ # The stream is valid only in the block, and has these methods:
664
+ #
665
+ # puts(str = ''):: outputs STR and CR LF.
666
+ # print(str):: outputs STR.
667
+ # printf(fmt, *args):: outputs sprintf(fmt,*args).
668
+ # write(str):: outputs STR and returns the length of written bytes.
669
+ # <<(str):: outputs STR and returns self.
670
+ #
671
+ # If a single CR ("\r") or LF ("\n") is found in the message,
672
+ # it is converted to the CR LF pair. You cannot send a binary
673
+ # message with this method.
674
+ #
675
+ # === Parameters
676
+ #
677
+ # +from_addr+ is a String representing the source mail address.
678
+ #
679
+ # +to_addr+ is a String or Strings or Array of Strings, representing
680
+ # the destination mail address or addresses.
681
+ #
682
+ # === Example
683
+ #
684
+ # Net::SMTP.start('smtp.example.com', 25) do |smtp|
685
+ # smtp.open_message_stream('from@example.com', ['dest@example.com']) do |f|
686
+ # f.puts 'From: from@example.com'
687
+ # f.puts 'To: dest@example.com'
688
+ # f.puts 'Subject: test message'
689
+ # f.puts
690
+ # f.puts 'This is a test message.'
691
+ # end
692
+ # end
693
+ #
694
+ # === Errors
695
+ #
696
+ # This method may raise:
697
+ #
698
+ # * Net::SMTPServerBusy
699
+ # * Net::SMTPSyntaxError
700
+ # * Net::SMTPFatalError
701
+ # * Net::SMTPUnknownError
702
+ # * IOError
703
+ # * TimeoutError
704
+ #
705
+ def open_message_stream(from_addr, *to_addrs, &block) # :yield: stream
706
+ raise IOError, 'closed session' unless @socket
707
+ mailfrom from_addr
708
+ rcptto_list to_addrs
709
+ data(&block)
710
+ end
711
+
712
+ alias ready open_message_stream # obsolete
713
+
714
+ #
715
+ # Authentication
716
+ #
717
+
718
+ public
719
+
720
+ DEFAULT_AUTH_TYPE = :plain
721
+
722
+ def authenticate(user, secret, authtype = DEFAULT_AUTH_TYPE)
723
+ check_auth_method authtype
724
+ check_auth_args user, secret
725
+ send auth_method(authtype), user, secret
726
+ end
727
+
728
+ def auth_plain(user, secret)
729
+ check_auth_args user, secret
730
+ res = critical {
731
+ get_response('AUTH PLAIN ' + base64_encode("\0#{user}\0#{secret}"))
732
+ }
733
+ check_auth_response res
734
+ res
735
+ end
736
+
737
+ def auth_login(user, secret)
738
+ check_auth_args user, secret
739
+ res = critical {
740
+ check_auth_continue get_response('AUTH LOGIN')
741
+ check_auth_continue get_response(base64_encode(user))
742
+ get_response(base64_encode(secret))
743
+ }
744
+ check_auth_response res
745
+ res
746
+ end
747
+
748
+ def auth_cram_md5(user, secret)
749
+ check_auth_args user, secret
750
+ res = critical {
751
+ res0 = get_response('AUTH CRAM-MD5')
752
+ check_auth_continue res0
753
+ crammed = cram_md5_response(secret, res0.cram_md5_challenge)
754
+ get_response(base64_encode("#{user} #{crammed}"))
755
+ }
756
+ check_auth_response res
757
+ res
758
+ end
759
+
760
+ private
761
+
762
+ def check_auth_method(type)
763
+ unless respond_to?(auth_method(type), true)
764
+ raise ArgumentError, "wrong authentication type #{type}"
765
+ end
766
+ end
767
+
768
+ def auth_method(type)
769
+ "auth_#{type.to_s.downcase}".intern
770
+ end
771
+
772
+ def check_auth_args(user, secret)
773
+ unless user
774
+ raise ArgumentError, 'SMTP-AUTH requested but missing user name'
775
+ end
776
+ unless secret
777
+ raise ArgumentError, 'SMTP-AUTH requested but missing secret phrase'
778
+ end
779
+ end
780
+
781
+ def base64_encode(str)
782
+ # expects "str" may not become too long
783
+ [str].pack('m').gsub(/\s+/, '')
784
+ end
785
+
786
+ IMASK = 0x36
787
+ OMASK = 0x5c
788
+
789
+ # CRAM-MD5: [RFC2195]
790
+ def cram_md5_response(secret, challenge)
791
+ tmp = Digest::MD5.digest(cram_secret(secret, IMASK) + challenge)
792
+ Digest::MD5.hexdigest(cram_secret(secret, OMASK) + tmp)
793
+ end
794
+
795
+ CRAM_BUFSIZE = 64
796
+
797
+ def cram_secret(secret, mask)
798
+ secret = Digest::MD5.digest(secret) if secret.size > CRAM_BUFSIZE
799
+ buf = secret.ljust(CRAM_BUFSIZE, "\0")
800
+ 0.upto(buf.size - 1) do |i|
801
+ buf[i] = (buf[i].ord ^ mask).chr
802
+ end
803
+ buf
804
+ end
805
+
806
+ #
807
+ # SMTP command dispatcher
808
+ #
809
+
810
+ public
811
+
812
+ def starttls
813
+ getok('STARTTLS')
814
+ end
815
+
816
+ def helo(domain)
817
+ getok("HELO #{domain}")
818
+ end
819
+
820
+ def ehlo(domain)
821
+ getok("EHLO #{domain}")
822
+ end
823
+
824
+ def mailfrom(from_addr)
825
+ if $SAFE > 0
826
+ raise SecurityError, 'tainted from_addr' if from_addr.tainted?
827
+ end
828
+ getok("MAIL FROM:<#{from_addr}>")
829
+ end
830
+
831
+ def rcptto_list(to_addrs)
832
+ raise ArgumentError, 'mail destination not given' if to_addrs.empty?
833
+ to_addrs.flatten.each do |addr|
834
+ rcptto addr
835
+ end
836
+ end
837
+
838
+ def rcptto(to_addr)
839
+ if $SAFE > 0
840
+ raise SecurityError, 'tainted to_addr' if to.tainted?
841
+ end
842
+ getok("RCPT TO:<#{to_addr}>")
843
+ end
844
+
845
+ # This method sends a message.
846
+ # If +msgstr+ is given, sends it as a message.
847
+ # If block is given, yield a message writer stream.
848
+ # You must write message before the block is closed.
849
+ #
850
+ # # Example 1 (by string)
851
+ # smtp.data(<<EndMessage)
852
+ # From: john@example.com
853
+ # To: betty@example.com
854
+ # Subject: I found a bug
855
+ #
856
+ # Check vm.c:58879.
857
+ # EndMessage
858
+ #
859
+ # # Example 2 (by block)
860
+ # smtp.data {|f|
861
+ # f.puts "From: john@example.com"
862
+ # f.puts "To: betty@example.com"
863
+ # f.puts "Subject: I found a bug"
864
+ # f.puts ""
865
+ # f.puts "Check vm.c:58879."
866
+ # }
867
+ #
868
+ def data(msgstr = nil, &block) #:yield: stream
869
+ if msgstr and block
870
+ raise ArgumentError, "message and block are exclusive"
871
+ end
872
+ unless msgstr or block
873
+ raise ArgumentError, "message or block is required"
874
+ end
875
+ res = critical {
876
+ check_continue get_response('DATA')
877
+ if msgstr
878
+ @socket.write_message msgstr
879
+ else
880
+ @socket.write_message_by_block(&block)
881
+ end
882
+ recv_response()
883
+ }
884
+ check_response res
885
+ res
886
+ end
887
+
888
+ def quit
889
+ getok('QUIT')
890
+ end
891
+
892
+ private
893
+
894
+ def getok(reqline)
895
+ res = critical {
896
+ @socket.writeline reqline
897
+ recv_response()
898
+ }
899
+ check_response res
900
+ res
901
+ end
902
+
903
+ def get_response(reqline)
904
+ @socket.writeline reqline
905
+ recv_response()
906
+ end
907
+
908
+ def recv_response
909
+ buf = ''
910
+ while true
911
+ line = @socket.readline
912
+ buf << line << "\n"
913
+ break unless line[3,1] == '-' # "210-PIPELINING"
914
+ end
915
+ Response.parse(buf)
916
+ end
917
+
918
+ def critical(&block)
919
+ return '200 dummy reply code' if @error_occured
920
+ begin
921
+ return yield()
922
+ rescue Exception
923
+ @error_occured = true
924
+ raise
925
+ end
926
+ end
927
+
928
+ def check_response(res)
929
+ unless res.success?
930
+ raise res.exception_class, res.message
931
+ end
932
+ end
933
+
934
+ def check_continue(res)
935
+ unless res.continue?
936
+ raise SMTPUnknownError, "could not get 3xx (#{res.status})"
937
+ end
938
+ end
939
+
940
+ def check_auth_response(res)
941
+ unless res.success?
942
+ raise SMTPAuthenticationError, res.message
943
+ end
944
+ end
945
+
946
+ def check_auth_continue(res)
947
+ unless res.continue?
948
+ raise res.exception_class, res.message
949
+ end
950
+ end
951
+
952
+ class Response
953
+ def Response.parse(str)
954
+ new(str[0,3], str)
955
+ end
956
+
957
+ def initialize(status, string)
958
+ @status = status
959
+ @string = string
960
+ end
961
+
962
+ attr_reader :status
963
+ attr_reader :string
964
+
965
+ def status_type_char
966
+ @status[0, 1]
967
+ end
968
+
969
+ def success?
970
+ status_type_char() == '2'
971
+ end
972
+
973
+ def continue?
974
+ status_type_char() == '3'
975
+ end
976
+
977
+ def message
978
+ @string.lines.first
979
+ end
980
+
981
+ def cram_md5_challenge
982
+ @string.split(/ /)[1].unpack('m')[0]
983
+ end
984
+
985
+ def capabilities
986
+ return {} unless @string[3, 1] == '-'
987
+ h = {}
988
+ @string.lines.drop(1).each do |line|
989
+ k, *v = line[4..-1].chomp.split(nil)
990
+ h[k] = v
991
+ end
992
+ h
993
+ end
994
+
995
+ def exception_class
996
+ case @status
997
+ when /\A4/ then SMTPServerBusy
998
+ when /\A50/ then SMTPSyntaxError
999
+ when /\A53/ then SMTPAuthenticationError
1000
+ when /\A5/ then SMTPFatalError
1001
+ else SMTPUnknownError
1002
+ end
1003
+ end
1004
+ end
1005
+
1006
+ def logging(msg)
1007
+ @debug_output << msg + "\n" if @debug_output
1008
+ end
1009
+
1010
+ end # class SMTP
1011
+
1012
+ SMTPSession = SMTP
1013
+
1014
+ end