rio 0.4.2 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (641) hide show
  1. data/.gitignore +21 -0
  2. data/Gemfile +4 -0
  3. data/{COPYING → LICENSE} +3 -0
  4. data/README +20 -27
  5. data/Rakefile +48 -277
  6. data/lib/rio.rb +63 -24
  7. data/lib/rio/.document +5 -0
  8. data/lib/rio/abstract_method.rb +3 -14
  9. data/lib/rio/alturi.rb +507 -0
  10. data/lib/rio/alturi/algorithm.rb +313 -0
  11. data/lib/rio/alturi/cached_fields.rb +68 -0
  12. data/lib/rio/alturi/escape.rb +82 -0
  13. data/lib/rio/alturi/parse.rb +75 -0
  14. data/lib/rio/alturi/path_parts.rb +81 -0
  15. data/lib/rio/alturi/regex.rb +76 -0
  16. data/lib/rio/alturi/uri_parts.rb +512 -0
  17. data/lib/rio/argv.rb +3 -14
  18. data/lib/rio/arraynge.rb +146 -0
  19. data/lib/rio/arycopy.rb +3 -14
  20. data/lib/rio/assert.rb +87 -15
  21. data/lib/rio/base.rb +7 -30
  22. data/lib/rio/callstr.rb +3 -14
  23. data/lib/rio/const.rb +3 -14
  24. data/lib/rio/construct.rb +4 -15
  25. data/lib/rio/constructor.rb +4 -19
  26. data/lib/rio/context.rb +17 -14
  27. data/lib/rio/context/autoclose.rb +3 -14
  28. data/lib/rio/context/binmode.rb +63 -0
  29. data/lib/rio/context/copying.rb +3 -14
  30. data/lib/rio/context/cxx.rb +3 -14
  31. data/lib/rio/context/dir.rb +5 -15
  32. data/lib/rio/context/encoding.rb +84 -0
  33. data/lib/rio/context/gzip.rb +3 -14
  34. data/lib/rio/context/methods.rb +8 -17
  35. data/lib/rio/context/skip.rb +3 -14
  36. data/lib/rio/context/stream.rb +3 -14
  37. data/lib/rio/cp.rb +5 -20
  38. data/lib/rio/cxuri.rb +67 -0
  39. data/lib/rio/dbg/trace_states.rb +18 -0
  40. data/lib/rio/def.rb +3 -14
  41. data/lib/rio/dir.rb +9 -18
  42. data/lib/rio/doc.rb +3 -14
  43. data/lib/rio/doc/EXAMPLES.rb +256 -269
  44. data/lib/rio/doc/HOWTO.rb +685 -707
  45. data/lib/rio/doc/INDEX.rb +261 -282
  46. data/lib/rio/doc/INTRO.rb +1029 -1040
  47. data/lib/rio/doc/OPTIONAL.rb +77 -103
  48. data/lib/rio/doc/SYNOPSIS.rb +122 -143
  49. data/lib/rio/entrysel.rb +3 -14
  50. data/lib/rio/exception.rb +4 -14
  51. data/lib/rio/exception/copy.rb +3 -14
  52. data/lib/rio/exception/notimplemented.rb +3 -14
  53. data/lib/rio/exception/notsupported.rb +3 -14
  54. data/lib/rio/exception/open.rb +3 -14
  55. data/lib/rio/exception/state.rb +3 -14
  56. data/lib/rio/ext.rb +14 -17
  57. data/lib/rio/ext/csv.rb +25 -304
  58. data/lib/rio/ext/csv/csv-legacy.rb +344 -0
  59. data/lib/rio/ext/csv/csv.rb +359 -0
  60. data/lib/rio/ext/csv/filter.rb +209 -0
  61. data/lib/rio/ext/if.rb +3 -14
  62. data/lib/rio/ext/mp3info.rb +3 -14
  63. data/lib/rio/ext/splitlines.rb +3 -14
  64. data/lib/rio/ext/yaml.rb +3 -14
  65. data/lib/rio/ext/yaml/doc.rb +3 -14
  66. data/lib/rio/ext/yaml/tie.rb +3 -14
  67. data/lib/rio/ext/zipfile.rb +3 -14
  68. data/lib/rio/ext/zipfile/fs.rb +3 -14
  69. data/lib/rio/ext/zipfile/rl.rb +3 -14
  70. data/lib/rio/ext/zipfile/rootdir.rb +3 -14
  71. data/lib/rio/ext/zipfile/state.rb +3 -14
  72. data/lib/rio/ext/zipfile/wrap.rb +3 -14
  73. data/lib/rio/factory.rb +96 -213
  74. data/lib/rio/fibpipe.rb +373 -0
  75. data/lib/rio/file.rb +8 -17
  76. data/lib/rio/filter.rb +4 -15
  77. data/lib/rio/filter/closeoneof.rb +3 -14
  78. data/lib/rio/filter/gzip.rb +18 -27
  79. data/lib/rio/fs.rb +172 -0
  80. data/lib/rio/fs/base.rb +3 -14
  81. data/lib/rio/fs/impl.rb +3 -14
  82. data/lib/rio/fs/native.rb +3 -14
  83. data/lib/rio/fs/stream.rb +3 -14
  84. data/lib/rio/fs/url.rb +3 -14
  85. data/lib/rio/ftp/conncache.rb +16 -18
  86. data/lib/rio/ftp/dir.rb +4 -15
  87. data/lib/rio/ftp/fs.rb +62 -42
  88. data/lib/rio/fwd.rb +15 -0
  89. data/lib/rio/grande.rb +4 -15
  90. data/lib/rio/handle.rb +3 -45
  91. data/lib/rio/if.rb +15 -20
  92. data/lib/rio/if/basic.rb +3 -36
  93. data/lib/rio/if/csv.rb +7 -20
  94. data/lib/rio/if/dir.rb +9 -21
  95. data/lib/rio/if/file.rb +6 -19
  96. data/lib/rio/if/fileordir.rb +18 -29
  97. data/lib/rio/if/grande.rb +109 -120
  98. data/lib/rio/if/grande_entry.rb +5 -18
  99. data/lib/rio/if/grande_stream.rb +29 -42
  100. data/lib/rio/if/internal.rb +15 -16
  101. data/lib/rio/if/path.rb +35 -47
  102. data/lib/rio/if/rubyio.rb +35 -47
  103. data/lib/rio/if/string.rb +3 -16
  104. data/lib/rio/if/temp.rb +3 -16
  105. data/lib/rio/if/test.rb +8 -20
  106. data/lib/rio/if/yaml.rb +16 -29
  107. data/lib/rio/ioh.rb +35 -34
  108. data/lib/rio/iomode.rb +3 -14
  109. data/lib/rio/ios/fail.rb +3 -14
  110. data/lib/rio/ios/generic.rb +3 -14
  111. data/lib/rio/ios/mode.rb +3 -14
  112. data/lib/rio/ios/null.rb +3 -14
  113. data/lib/rio/iowrap.rb +3 -14
  114. data/lib/rio/kernel.rb +4 -17
  115. data/lib/rio/local.rb +3 -14
  116. data/lib/rio/match.rb +3 -14
  117. data/lib/rio/matchrecord.rb +8 -17
  118. data/lib/rio/no_warn.rb +3 -14
  119. data/lib/rio/nullio.rb +3 -14
  120. data/lib/rio/open3.rb +3 -16
  121. data/lib/rio/ops.rb +33 -0
  122. data/lib/rio/ops/construct.rb +3 -14
  123. data/lib/rio/ops/create.rb +11 -25
  124. data/lib/rio/ops/dir.rb +17 -24
  125. data/lib/rio/ops/either.rb +28 -31
  126. data/lib/rio/ops/file.rb +29 -26
  127. data/lib/rio/ops/path.rb +65 -34
  128. data/lib/rio/ops/stream.rb +13 -15
  129. data/lib/rio/ops/stream/input.rb +59 -28
  130. data/lib/rio/ops/stream/output.rb +4 -14
  131. data/lib/rio/ops/stream/read.rb +4 -15
  132. data/lib/rio/ops/stream/write.rb +3 -14
  133. data/lib/rio/ops/symlink.rb +6 -15
  134. data/lib/rio/path.rb +10 -17
  135. data/lib/rio/path/reset.rb +3 -14
  136. data/lib/rio/piper.rb +3 -27
  137. data/lib/rio/piper/cp.rb +50 -27
  138. data/lib/rio/prompt.rb +3 -14
  139. data/lib/rio/rectype.rb +8 -16
  140. data/lib/rio/rl/base.rb +12 -25
  141. data/lib/rio/rl/builder.rb +25 -24
  142. data/lib/rio/rl/chmap.rb +3 -16
  143. data/lib/rio/rl/fs2url.rb +5 -16
  144. data/lib/rio/rl/ioi.rb +3 -14
  145. data/lib/rio/rl/path.rb +14 -25
  146. data/lib/rio/rl/pathmethods.rb +3 -14
  147. data/lib/rio/rl/uri.rb +18 -35
  148. data/lib/rio/rl/withpath.rb +36 -53
  149. data/lib/rio/rrl/base.rb +75 -0
  150. data/lib/rio/rrl/builder.rb +122 -0
  151. data/lib/rio/rrl/chmap.rb +53 -0
  152. data/lib/rio/rrl/ioi.rb +78 -0
  153. data/lib/rio/rrl/path.rb +117 -0
  154. data/lib/rio/rrl/withpath.rb +269 -0
  155. data/lib/rio/scheme/aryio.rb +3 -14
  156. data/lib/rio/scheme/cmdio.rb +73 -42
  157. data/lib/rio/scheme/cmdpipe.rb +122 -59
  158. data/lib/rio/scheme/fd.rb +19 -33
  159. data/lib/rio/scheme/ftp.rb +34 -40
  160. data/lib/rio/scheme/http.rb +13 -22
  161. data/lib/rio/scheme/null.rb +6 -17
  162. data/lib/rio/scheme/path.rb +60 -71
  163. data/lib/rio/scheme/stderr.rb +9 -21
  164. data/lib/rio/scheme/stdio.rb +14 -26
  165. data/lib/rio/scheme/strio.rb +37 -38
  166. data/lib/rio/scheme/sysio.rb +20 -32
  167. data/lib/rio/scheme/tcp.rb +3 -14
  168. data/lib/rio/scheme/temp.rb +103 -92
  169. data/lib/rio/state.rb +85 -67
  170. data/lib/rio/state/data.rb +55 -0
  171. data/lib/rio/state/error.rb +7 -27
  172. data/lib/rio/stream.rb +46 -19
  173. data/lib/rio/stream/base.rb +14 -14
  174. data/lib/rio/stream/duplex.rb +64 -26
  175. data/lib/rio/stream/open.rb +9 -19
  176. data/lib/rio/symantics.rb +3 -14
  177. data/lib/rio/tempdir.rb +8 -17
  178. data/lib/rio/to_rio.rb +3 -16
  179. data/lib/rio/to_rio/all.rb +3 -14
  180. data/lib/rio/to_rio/array.rb +3 -14
  181. data/lib/rio/to_rio/io.rb +3 -14
  182. data/lib/rio/to_rio/object.rb +3 -14
  183. data/lib/rio/to_rio/string.rb +3 -14
  184. data/lib/rio/uri/file.rb +98 -153
  185. data/lib/rio/uriref.rb +144 -0
  186. data/lib/rio/util.rb +3 -14
  187. data/lib/rio/version.rb +4 -15
  188. data/misc/clean-heading-comments.rb +39 -0
  189. data/misc/fixdoclinks.rb +36 -0
  190. data/misc/update-copyright.rb +17 -0
  191. data/rio.gemspec +31 -0
  192. data/test/alturi/tc/create.rb +24 -0
  193. data/test/alturi/tc/empty.rb +13 -0
  194. data/test/alturi/tc/encoding.rb +73 -0
  195. data/test/alturi/tc/file_test.rb +335 -0
  196. data/test/alturi/tc/ftp_alturi.rb +147 -0
  197. data/test/alturi/tc/generic_test.rb +335 -0
  198. data/test/alturi/tc/http_test.rb +359 -0
  199. data/test/alturi/tc/path_parts_test.rb +215 -0
  200. data/test/alturi/tc/rfc_test.rb +83 -0
  201. data/test/alturi/tc/uri_parts_authority.rb +129 -0
  202. data/test/alturi/tc/uri_parts_test.rb +473 -0
  203. data/test/alturi/tc/uri_parts_userinfo.rb +140 -0
  204. data/test/alturi/tests.rb +27 -0
  205. data/test/base_test.rb +18 -0
  206. data/test/bin/demo_chdir.rb +60 -0
  207. data/test/bin/elipsis.rb +11 -0
  208. data/test/env.sh +4 -0
  209. data/test/ftp/initftpfiles.rb +1 -0
  210. data/test/ftp/tc/anon_copy_data.rb +31 -0
  211. data/test/ftp/tc/anon_misc.rb +109 -0
  212. data/test/ftp/tc/anon_read.rb +99 -0
  213. data/test/ftp/tc/anon_special.rb +37 -0
  214. data/test/ftp/tc/anon_write.rb +68 -0
  215. data/test/ftp/tc/copy.rb +35 -0
  216. data/test/ftp/tc/empty.rb +16 -0
  217. data/test/ftp/tc/ftp2ftp.rb +42 -0
  218. data/test/ftp/tc/ftp_fs.rb +333 -0
  219. data/test/ftp/testdef.rb +7 -2
  220. data/test/ftp/tests.rb +24 -0
  221. data/test/gem_runtests.rb +1 -1
  222. data/test/http/copy-from-http.rb +0 -1
  223. data/test/http/def.rb +20 -0
  224. data/test/http/tc/copy_from_http.rb +128 -0
  225. data/test/http/tc/empty.rb +14 -0
  226. data/test/http/tc/uri_meta.rb +52 -0
  227. data/test/http/tests.rb +19 -0
  228. data/test/lib/assertions.rb +7 -0
  229. data/test/lib/run_tests.rb +26 -0
  230. data/test/lib/temp_server.rb +7 -4
  231. data/test/methods/test_suite.rb +108 -0
  232. data/test/platform.rb +5 -0
  233. data/test/qpdir.rb +2 -0
  234. data/test/rio/scheme.rb +49 -0
  235. data/test/rio/tc/pathparts.rb +61 -0
  236. data/test/riotest/test_suite.rb +33 -0
  237. data/test/riotest/unit_test.rb +118 -0
  238. data/test/riotest/util.rb +23 -0
  239. data/test/runalltests.rb +1 -1
  240. data/test/runftptests.rb +2 -7
  241. data/test/runhttp.rb +4 -2
  242. data/test/runhttptests.rb +6 -5
  243. data/test/runtests.rb +66 -37
  244. data/test/srv/www/htdocs/riotest/dir/index.html +11 -0
  245. data/test/srv/www/htdocs/riotest/hw.html +8 -0
  246. data/test/srv/www/htdocs/riotest/lines.txt.gz +0 -0
  247. data/test/tc/abs2.rb +358 -0
  248. data/test/tc/all.rb +17 -10
  249. data/test/tc/base2.rb +8 -7
  250. data/test/tc/clearsel.rb +3 -2
  251. data/test/tc/closeoneof.rb +14 -15
  252. data/test/tc/cmdio.rb +193 -0
  253. data/test/tc/cmdpipe.rb +258 -63
  254. data/test/tc/copy.rb +3 -2
  255. data/test/tc/copyarray.rb +0 -4
  256. data/test/tc/copydest.rb +2 -3
  257. data/test/tc/copydir.rb +5 -1
  258. data/test/tc/copydir2.rb +68 -0
  259. data/test/tc/create.rb +4 -9
  260. data/test/tc/csv.rb +38 -119
  261. data/test/tc/csv2.rb +38 -57
  262. data/test/tc/csv_columns.rb +210 -8
  263. data/test/tc/csv_gzip.rb +78 -0
  264. data/test/tc/csv_headers.rb +134 -0
  265. data/test/tc/csvutil.rb +53 -16
  266. data/test/tc/dir.rb +3 -4
  267. data/test/tc/dir_iter.rb +3 -1
  268. data/test/tc/dirent.rb +8 -7
  269. data/test/tc/each.rb +62 -47
  270. data/test/tc/each_break.rb +67 -25
  271. data/test/tc/edf.rb +3 -2
  272. data/test/tc/empty.rb +6 -4
  273. data/test/tc/encoding.rb +30 -0
  274. data/test/tc/entary.rb +6 -5
  275. data/test/tc/eq.rb +2 -2
  276. data/test/tc/expand_path.rb +14 -14
  277. data/test/tc/ext.rb +7 -7
  278. data/test/tc/fileno.rb +3 -2
  279. data/test/tc/files_select.rb +1 -1
  280. data/test/tc/getrec.rb +2 -3
  281. data/test/tc/gzip.rb +5 -3
  282. data/test/tc/likeio.rb +5 -5
  283. data/test/tc/lineno.rb +1 -1
  284. data/test/tc/lines.rb +4 -4
  285. data/test/tc/misc.rb +29 -171
  286. data/test/tc/nolines.rb +4 -2
  287. data/test/tc/noqae.rb +12 -10
  288. data/test/tc/overload.rb +1 -2
  289. data/test/tc/pa.rb +25 -24
  290. data/test/tc/path_parts.rb +54 -20
  291. data/test/tc/paths.rb +3 -2
  292. data/test/tc/piper.rb +32 -31
  293. data/test/tc/programs_util.rb +9 -9
  294. data/test/tc/qae.rb +9 -8
  295. data/test/tc/qae_riovar.rb +9 -8
  296. data/test/tc/records.rb +3 -2
  297. data/test/tc/rename.rb +4 -4
  298. data/test/tc/riorl.rb +19 -19
  299. data/test/tc/rlparts.ans.yml +1161 -0
  300. data/test/tc/splitlines.rb +1 -1
  301. data/test/tc/splitpath.rb +9 -8
  302. data/test/tc/strio.rb +73 -0
  303. data/test/tc/symlink.rb +3 -2
  304. data/test/tc/symlink0.rb +4 -3
  305. data/test/tc/symlink1.rb +4 -3
  306. data/test/tc/temp.rb +40 -26
  307. data/test/tc/tempdir.rb +12 -12
  308. data/test/tc/testcase.rb +45 -31
  309. data/test/tc/tonl.rb +0 -1
  310. data/test/tc/truncate.rb +111 -13
  311. data/test/tc/yaml.rb +1 -1
  312. data/test/test_suite.rb +31 -0
  313. data/test/tests.rb +35 -0
  314. data/test/tsuite.rb +19 -0
  315. data/test/uriref/tc/basic.rb +171 -0
  316. data/test/uriref/tc/build.rb +30 -0
  317. data/test/uriref/tc/empty.rb +13 -0
  318. data/test/uriref/tc/route.rb +72 -0
  319. data/test/uriref/tests.rb +16 -0
  320. metadata +356 -424
  321. data/ChangeLog +0 -3122
  322. data/VERSION +0 -1
  323. data/build_doc.rb +0 -94
  324. data/doc/ANNOUNCE +0 -157
  325. data/doc/RELEASE_NOTES +0 -308
  326. data/doc/RIOIS +0 -215
  327. data/doc/generators/template/html/rio.css +0 -428
  328. data/doc/generators/template/html/rio.rb +0 -523
  329. data/doc/generators/template/html/ugly.rb +0 -132
  330. data/doc/pkg_def.rb +0 -60
  331. data/doc/rdoc/classes/Kernel.html +0 -133
  332. data/doc/rdoc/classes/Kernel.src/M000234.html +0 -18
  333. data/doc/rdoc/classes/RIO.html +0 -625
  334. data/doc/rdoc/classes/RIO.src/M000001.html +0 -18
  335. data/doc/rdoc/classes/RIO.src/M000002.html +0 -18
  336. data/doc/rdoc/classes/RIO.src/M000003.html +0 -18
  337. data/doc/rdoc/classes/RIO/Doc.html +0 -149
  338. data/doc/rdoc/classes/RIO/Doc/EXAMPLES.html +0 -432
  339. data/doc/rdoc/classes/RIO/Doc/HOWTO.html +0 -1084
  340. data/doc/rdoc/classes/RIO/Doc/INDEX.html +0 -368
  341. data/doc/rdoc/classes/RIO/Doc/INTRO.html +0 -1529
  342. data/doc/rdoc/classes/RIO/Doc/OPTIONAL.html +0 -221
  343. data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +0 -336
  344. data/doc/rdoc/classes/RIO/IF.html +0 -165
  345. data/doc/rdoc/classes/RIO/IF/CSV.html +0 -203
  346. data/doc/rdoc/classes/RIO/IF/CSV.src/M000129.html +0 -19
  347. data/doc/rdoc/classes/RIO/IF/CSV.src/M000130.html +0 -16
  348. data/doc/rdoc/classes/RIO/IF/CSV.src/M000131.html +0 -16
  349. data/doc/rdoc/classes/RIO/IF/Dir.html +0 -343
  350. data/doc/rdoc/classes/RIO/IF/Dir.src/M000045.html +0 -16
  351. data/doc/rdoc/classes/RIO/IF/Dir.src/M000046.html +0 -16
  352. data/doc/rdoc/classes/RIO/IF/Dir.src/M000047.html +0 -16
  353. data/doc/rdoc/classes/RIO/IF/Dir.src/M000048.html +0 -16
  354. data/doc/rdoc/classes/RIO/IF/Dir.src/M000049.html +0 -16
  355. data/doc/rdoc/classes/RIO/IF/Dir.src/M000050.html +0 -16
  356. data/doc/rdoc/classes/RIO/IF/Dir.src/M000051.html +0 -16
  357. data/doc/rdoc/classes/RIO/IF/File.html +0 -223
  358. data/doc/rdoc/classes/RIO/IF/File.src/M000216.html +0 -16
  359. data/doc/rdoc/classes/RIO/IF/File.src/M000217.html +0 -16
  360. data/doc/rdoc/classes/RIO/IF/File.src/M000218.html +0 -16
  361. data/doc/rdoc/classes/RIO/IF/File.src/M000219.html +0 -16
  362. data/doc/rdoc/classes/RIO/IF/FileOrDir.html +0 -572
  363. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000117.html +0 -16
  364. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000118.html +0 -16
  365. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000119.html +0 -16
  366. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000120.html +0 -16
  367. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000121.html +0 -16
  368. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000122.html +0 -16
  369. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000123.html +0 -16
  370. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000124.html +0 -16
  371. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000125.html +0 -16
  372. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000126.html +0 -16
  373. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000127.html +0 -16
  374. data/doc/rdoc/classes/RIO/IF/FileOrDir.src/M000128.html +0 -16
  375. data/doc/rdoc/classes/RIO/IF/Grande.html +0 -1376
  376. data/doc/rdoc/classes/RIO/IF/Grande.src/M000052.html +0 -16
  377. data/doc/rdoc/classes/RIO/IF/Grande.src/M000053.html +0 -16
  378. data/doc/rdoc/classes/RIO/IF/Grande.src/M000054.html +0 -16
  379. data/doc/rdoc/classes/RIO/IF/Grande.src/M000055.html +0 -16
  380. data/doc/rdoc/classes/RIO/IF/Grande.src/M000056.html +0 -16
  381. data/doc/rdoc/classes/RIO/IF/Grande.src/M000057.html +0 -16
  382. data/doc/rdoc/classes/RIO/IF/Grande.src/M000058.html +0 -21
  383. data/doc/rdoc/classes/RIO/IF/Grande.src/M000059.html +0 -16
  384. data/doc/rdoc/classes/RIO/IF/Grande.src/M000060.html +0 -16
  385. data/doc/rdoc/classes/RIO/IF/Grande.src/M000061.html +0 -16
  386. data/doc/rdoc/classes/RIO/IF/Grande.src/M000062.html +0 -16
  387. data/doc/rdoc/classes/RIO/IF/Grande.src/M000063.html +0 -16
  388. data/doc/rdoc/classes/RIO/IF/Grande.src/M000064.html +0 -16
  389. data/doc/rdoc/classes/RIO/IF/Grande.src/M000065.html +0 -21
  390. data/doc/rdoc/classes/RIO/IF/Grande.src/M000066.html +0 -16
  391. data/doc/rdoc/classes/RIO/IF/Grande.src/M000067.html +0 -16
  392. data/doc/rdoc/classes/RIO/IF/Grande.src/M000068.html +0 -16
  393. data/doc/rdoc/classes/RIO/IF/Grande.src/M000069.html +0 -16
  394. data/doc/rdoc/classes/RIO/IF/Grande.src/M000070.html +0 -16
  395. data/doc/rdoc/classes/RIO/IF/GrandeEntry.html +0 -810
  396. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000107.html +0 -16
  397. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000108.html +0 -16
  398. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000109.html +0 -16
  399. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000110.html +0 -16
  400. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000111.html +0 -16
  401. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000112.html +0 -16
  402. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000113.html +0 -16
  403. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000114.html +0 -16
  404. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000115.html +0 -16
  405. data/doc/rdoc/classes/RIO/IF/GrandeEntry.src/M000116.html +0 -16
  406. data/doc/rdoc/classes/RIO/IF/GrandeStream.html +0 -1513
  407. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000071.html +0 -16
  408. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000072.html +0 -16
  409. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000073.html +0 -16
  410. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000074.html +0 -16
  411. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000075.html +0 -16
  412. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000076.html +0 -16
  413. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000077.html +0 -16
  414. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000078.html +0 -16
  415. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000079.html +0 -16
  416. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000080.html +0 -16
  417. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000081.html +0 -16
  418. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000082.html +0 -16
  419. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000083.html +0 -16
  420. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000084.html +0 -16
  421. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000085.html +0 -16
  422. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000086.html +0 -16
  423. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000087.html +0 -19
  424. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000088.html +0 -16
  425. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000089.html +0 -16
  426. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000090.html +0 -16
  427. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000091.html +0 -16
  428. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000092.html +0 -16
  429. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000093.html +0 -16
  430. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000094.html +0 -16
  431. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000095.html +0 -16
  432. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000096.html +0 -16
  433. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000097.html +0 -16
  434. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000098.html +0 -16
  435. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000099.html +0 -16
  436. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000100.html +0 -16
  437. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000101.html +0 -16
  438. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000102.html +0 -16
  439. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000103.html +0 -16
  440. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000104.html +0 -16
  441. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000105.html +0 -16
  442. data/doc/rdoc/classes/RIO/IF/GrandeStream.src/M000106.html +0 -16
  443. data/doc/rdoc/classes/RIO/IF/Path.html +0 -999
  444. data/doc/rdoc/classes/RIO/IF/Path.src/M000132.html +0 -16
  445. data/doc/rdoc/classes/RIO/IF/Path.src/M000133.html +0 -16
  446. data/doc/rdoc/classes/RIO/IF/Path.src/M000134.html +0 -16
  447. data/doc/rdoc/classes/RIO/IF/Path.src/M000135.html +0 -16
  448. data/doc/rdoc/classes/RIO/IF/Path.src/M000136.html +0 -16
  449. data/doc/rdoc/classes/RIO/IF/Path.src/M000137.html +0 -16
  450. data/doc/rdoc/classes/RIO/IF/Path.src/M000138.html +0 -16
  451. data/doc/rdoc/classes/RIO/IF/Path.src/M000139.html +0 -16
  452. data/doc/rdoc/classes/RIO/IF/Path.src/M000140.html +0 -16
  453. data/doc/rdoc/classes/RIO/IF/Path.src/M000141.html +0 -16
  454. data/doc/rdoc/classes/RIO/IF/Path.src/M000142.html +0 -16
  455. data/doc/rdoc/classes/RIO/IF/Path.src/M000143.html +0 -16
  456. data/doc/rdoc/classes/RIO/IF/Path.src/M000144.html +0 -16
  457. data/doc/rdoc/classes/RIO/IF/Path.src/M000145.html +0 -16
  458. data/doc/rdoc/classes/RIO/IF/Path.src/M000146.html +0 -16
  459. data/doc/rdoc/classes/RIO/IF/Path.src/M000147.html +0 -16
  460. data/doc/rdoc/classes/RIO/IF/Path.src/M000148.html +0 -16
  461. data/doc/rdoc/classes/RIO/IF/Path.src/M000149.html +0 -16
  462. data/doc/rdoc/classes/RIO/IF/Path.src/M000150.html +0 -16
  463. data/doc/rdoc/classes/RIO/IF/Path.src/M000151.html +0 -16
  464. data/doc/rdoc/classes/RIO/IF/Path.src/M000152.html +0 -16
  465. data/doc/rdoc/classes/RIO/IF/Path.src/M000153.html +0 -16
  466. data/doc/rdoc/classes/RIO/IF/Path.src/M000154.html +0 -18
  467. data/doc/rdoc/classes/RIO/IF/Path.src/M000155.html +0 -16
  468. data/doc/rdoc/classes/RIO/IF/Path.src/M000156.html +0 -16
  469. data/doc/rdoc/classes/RIO/IF/Path.src/M000157.html +0 -16
  470. data/doc/rdoc/classes/RIO/IF/Path.src/M000158.html +0 -16
  471. data/doc/rdoc/classes/RIO/IF/Path.src/M000159.html +0 -16
  472. data/doc/rdoc/classes/RIO/IF/Path.src/M000160.html +0 -16
  473. data/doc/rdoc/classes/RIO/IF/Path.src/M000161.html +0 -16
  474. data/doc/rdoc/classes/RIO/IF/Path.src/M000162.html +0 -16
  475. data/doc/rdoc/classes/RIO/IF/Path.src/M000163.html +0 -16
  476. data/doc/rdoc/classes/RIO/IF/RubyIO.html +0 -1416
  477. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000004.html +0 -16
  478. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000005.html +0 -16
  479. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000006.html +0 -16
  480. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000007.html +0 -16
  481. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000008.html +0 -16
  482. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000009.html +0 -16
  483. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000010.html +0 -16
  484. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000011.html +0 -16
  485. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000012.html +0 -16
  486. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000013.html +0 -16
  487. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000014.html +0 -16
  488. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000015.html +0 -16
  489. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000016.html +0 -16
  490. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000017.html +0 -16
  491. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000018.html +0 -16
  492. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000019.html +0 -16
  493. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000020.html +0 -16
  494. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000021.html +0 -16
  495. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000022.html +0 -16
  496. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000023.html +0 -16
  497. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000024.html +0 -16
  498. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000025.html +0 -16
  499. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000026.html +0 -16
  500. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000027.html +0 -16
  501. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000028.html +0 -16
  502. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000029.html +0 -16
  503. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000030.html +0 -16
  504. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000031.html +0 -16
  505. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000032.html +0 -16
  506. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000033.html +0 -16
  507. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000034.html +0 -16
  508. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000035.html +0 -16
  509. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000036.html +0 -16
  510. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000037.html +0 -16
  511. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000038.html +0 -16
  512. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000039.html +0 -16
  513. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000040.html +0 -16
  514. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000041.html +0 -16
  515. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000042.html +0 -16
  516. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000043.html +0 -16
  517. data/doc/rdoc/classes/RIO/IF/RubyIO.src/M000044.html +0 -16
  518. data/doc/rdoc/classes/RIO/IF/String.html +0 -203
  519. data/doc/rdoc/classes/RIO/IF/String.src/M000213.html +0 -16
  520. data/doc/rdoc/classes/RIO/IF/String.src/M000214.html +0 -16
  521. data/doc/rdoc/classes/RIO/IF/String.src/M000215.html +0 -16
  522. data/doc/rdoc/classes/RIO/IF/Test.html +0 -990
  523. data/doc/rdoc/classes/RIO/IF/Test.src/M000177.html +0 -16
  524. data/doc/rdoc/classes/RIO/IF/Test.src/M000178.html +0 -16
  525. data/doc/rdoc/classes/RIO/IF/Test.src/M000179.html +0 -16
  526. data/doc/rdoc/classes/RIO/IF/Test.src/M000180.html +0 -16
  527. data/doc/rdoc/classes/RIO/IF/Test.src/M000181.html +0 -16
  528. data/doc/rdoc/classes/RIO/IF/Test.src/M000182.html +0 -16
  529. data/doc/rdoc/classes/RIO/IF/Test.src/M000183.html +0 -16
  530. data/doc/rdoc/classes/RIO/IF/Test.src/M000184.html +0 -16
  531. data/doc/rdoc/classes/RIO/IF/Test.src/M000185.html +0 -16
  532. data/doc/rdoc/classes/RIO/IF/Test.src/M000186.html +0 -16
  533. data/doc/rdoc/classes/RIO/IF/Test.src/M000187.html +0 -16
  534. data/doc/rdoc/classes/RIO/IF/Test.src/M000188.html +0 -16
  535. data/doc/rdoc/classes/RIO/IF/Test.src/M000189.html +0 -16
  536. data/doc/rdoc/classes/RIO/IF/Test.src/M000190.html +0 -16
  537. data/doc/rdoc/classes/RIO/IF/Test.src/M000191.html +0 -16
  538. data/doc/rdoc/classes/RIO/IF/Test.src/M000192.html +0 -16
  539. data/doc/rdoc/classes/RIO/IF/Test.src/M000193.html +0 -16
  540. data/doc/rdoc/classes/RIO/IF/Test.src/M000194.html +0 -16
  541. data/doc/rdoc/classes/RIO/IF/Test.src/M000195.html +0 -16
  542. data/doc/rdoc/classes/RIO/IF/Test.src/M000196.html +0 -16
  543. data/doc/rdoc/classes/RIO/IF/Test.src/M000197.html +0 -16
  544. data/doc/rdoc/classes/RIO/IF/Test.src/M000198.html +0 -16
  545. data/doc/rdoc/classes/RIO/IF/Test.src/M000199.html +0 -16
  546. data/doc/rdoc/classes/RIO/IF/Test.src/M000200.html +0 -16
  547. data/doc/rdoc/classes/RIO/IF/Test.src/M000201.html +0 -16
  548. data/doc/rdoc/classes/RIO/IF/Test.src/M000202.html +0 -16
  549. data/doc/rdoc/classes/RIO/IF/Test.src/M000203.html +0 -16
  550. data/doc/rdoc/classes/RIO/IF/Test.src/M000204.html +0 -16
  551. data/doc/rdoc/classes/RIO/IF/Test.src/M000205.html +0 -16
  552. data/doc/rdoc/classes/RIO/IF/Test.src/M000206.html +0 -16
  553. data/doc/rdoc/classes/RIO/IF/Test.src/M000207.html +0 -16
  554. data/doc/rdoc/classes/RIO/IF/Test.src/M000208.html +0 -16
  555. data/doc/rdoc/classes/RIO/IF/Test.src/M000209.html +0 -16
  556. data/doc/rdoc/classes/RIO/IF/Test.src/M000210.html +0 -16
  557. data/doc/rdoc/classes/RIO/IF/Test.src/M000211.html +0 -16
  558. data/doc/rdoc/classes/RIO/IF/Test.src/M000212.html +0 -16
  559. data/doc/rdoc/classes/RIO/IF/YAML.html +0 -517
  560. data/doc/rdoc/classes/RIO/IF/YAML.src/M000164.html +0 -19
  561. data/doc/rdoc/classes/RIO/IF/YAML.src/M000165.html +0 -16
  562. data/doc/rdoc/classes/RIO/IF/YAML.src/M000166.html +0 -16
  563. data/doc/rdoc/classes/RIO/IF/YAML.src/M000167.html +0 -16
  564. data/doc/rdoc/classes/RIO/IF/YAML.src/M000168.html +0 -16
  565. data/doc/rdoc/classes/RIO/IF/YAML.src/M000169.html +0 -16
  566. data/doc/rdoc/classes/RIO/IF/YAML.src/M000170.html +0 -16
  567. data/doc/rdoc/classes/RIO/IF/YAML.src/M000171.html +0 -16
  568. data/doc/rdoc/classes/RIO/IF/YAML.src/M000172.html +0 -16
  569. data/doc/rdoc/classes/RIO/IF/YAML.src/M000173.html +0 -16
  570. data/doc/rdoc/classes/RIO/IF/YAML.src/M000174.html +0 -16
  571. data/doc/rdoc/classes/RIO/IF/YAML.src/M000175.html +0 -16
  572. data/doc/rdoc/classes/RIO/IF/YAML.src/M000176.html +0 -16
  573. data/doc/rdoc/classes/RIO/Rio.html +0 -508
  574. data/doc/rdoc/classes/RIO/Rio.src/M000220.html +0 -18
  575. data/doc/rdoc/classes/RIO/Rio.src/M000221.html +0 -20
  576. data/doc/rdoc/classes/RIO/Rio.src/M000222.html +0 -27
  577. data/doc/rdoc/classes/RIO/Rio.src/M000223.html +0 -16
  578. data/doc/rdoc/classes/RIO/Rio.src/M000225.html +0 -19
  579. data/doc/rdoc/classes/RIO/Rio.src/M000226.html +0 -20
  580. data/doc/rdoc/classes/RIO/Rio.src/M000227.html +0 -16
  581. data/doc/rdoc/classes/RIO/Rio.src/M000228.html +0 -16
  582. data/doc/rdoc/classes/RIO/Rio.src/M000229.html +0 -16
  583. data/doc/rdoc/classes/RIO/Rio.src/M000230.html +0 -16
  584. data/doc/rdoc/classes/RIO/Rio.src/M000231.html +0 -16
  585. data/doc/rdoc/classes/RIO/Rio.src/M000232.html +0 -16
  586. data/doc/rdoc/classes/RIO/Rio.src/M000233.html +0 -16
  587. data/doc/rdoc/created.rid +0 -1
  588. data/doc/rdoc/files/README.html +0 -232
  589. data/doc/rdoc/files/lib/rio/constructor_rb.html +0 -141
  590. data/doc/rdoc/files/lib/rio/doc/EXAMPLES_rb.html +0 -134
  591. data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +0 -134
  592. data/doc/rdoc/files/lib/rio/doc/INDEX_rb.html +0 -134
  593. data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +0 -134
  594. data/doc/rdoc/files/lib/rio/doc/OPTIONAL_rb.html +0 -134
  595. data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +0 -134
  596. data/doc/rdoc/files/lib/rio/if/basic_rb.html +0 -134
  597. data/doc/rdoc/files/lib/rio/if/csv_rb.html +0 -134
  598. data/doc/rdoc/files/lib/rio/if/dir_rb.html +0 -134
  599. data/doc/rdoc/files/lib/rio/if/file_rb.html +0 -134
  600. data/doc/rdoc/files/lib/rio/if/fileordir_rb.html +0 -134
  601. data/doc/rdoc/files/lib/rio/if/grande_entry_rb.html +0 -134
  602. data/doc/rdoc/files/lib/rio/if/grande_rb.html +0 -141
  603. data/doc/rdoc/files/lib/rio/if/grande_stream_rb.html +0 -134
  604. data/doc/rdoc/files/lib/rio/if/internal_rb.html +0 -134
  605. data/doc/rdoc/files/lib/rio/if/path_rb.html +0 -134
  606. data/doc/rdoc/files/lib/rio/if/rubyio_rb.html +0 -134
  607. data/doc/rdoc/files/lib/rio/if/string_rb.html +0 -134
  608. data/doc/rdoc/files/lib/rio/if/temp_rb.html +0 -134
  609. data/doc/rdoc/files/lib/rio/if/test_rb.html +0 -134
  610. data/doc/rdoc/files/lib/rio/if/yaml_rb.html +0 -134
  611. data/doc/rdoc/files/lib/rio/kernel_rb.html +0 -142
  612. data/doc/rdoc/files/lib/rio_rb.html +0 -153
  613. data/doc/rdoc/fr_class_index.html +0 -49
  614. data/doc/rdoc/fr_file_index.html +0 -51
  615. data/doc/rdoc/fr_method_index.html +0 -260
  616. data/doc/rdoc/index.html +0 -30
  617. data/doc/rdoc/rdoc-style.css +0 -428
  618. data/doc/rfc1738.txt +0 -1403
  619. data/doc/rfc959.txt +0 -3933
  620. data/ex/catcsv.rb +0 -64
  621. data/ex/colx.rb +0 -8
  622. data/ex/findinruby +0 -15
  623. data/ex/findruby +0 -14
  624. data/ex/passwd_report.rb +0 -8
  625. data/ex/prompt.rb +0 -25
  626. data/ex/rgb.txt.gz +0 -0
  627. data/ex/riocat +0 -42
  628. data/ex/riogunzip +0 -31
  629. data/ex/riogzip +0 -24
  630. data/ex/rioprompt.rb +0 -10
  631. data/ex/targz2zip +0 -17
  632. data/ex/tonl +0 -10
  633. data/setup.rb +0 -1360
  634. data/test/ftp/all.rb +0 -9
  635. data/test/ftp/anon_copy_data.rb +0 -36
  636. data/test/ftp/anon_misc.rb +0 -124
  637. data/test/ftp/anon_read.rb +0 -105
  638. data/test/ftp/anon_special.rb +0 -68
  639. data/test/ftp/anon_write.rb +0 -70
  640. data/test/ftp/ftp2ftp.rb +0 -51
  641. data/test/tc/abs.rb +0 -355
@@ -1,6 +1,6 @@
1
1
  #--
2
- # ===============================================================================
3
- # Copyright (c) 2005,2006,2007,2008 Christopher Kleckner
2
+ # ===========================================================================
3
+ # Copyright (c) 2005-2012 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -18,719 +18,697 @@
18
18
  # You should have received a copy of the GNU General Public License
19
19
  # along with Rio; if not, write to the Free Software
20
20
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- # ===============================================================================
21
+ # ===========================================================================
22
22
  #++
23
23
  #
24
- # To create the documentation for Rio run the command
25
- # ruby build_doc.rb
26
- # from the distribution directory.
24
+ module RIO
25
+ module Doc #:doc:
26
+
27
+ ##
28
+ # == HOWTO...
29
+ #
30
+ # === Read a single file
31
+ # ario = rio('afile')
32
+ # string = ""
33
+ # array = []
34
+ #
35
+ # * Read a file into a string.
36
+ # # method 1
37
+ # string = ario.contents
38
+ # # method 2
39
+ # ario > string
40
+ #
41
+ # * Append a file onto a string.
42
+ # # method 1
43
+ # ario >> string
44
+ # # method 2
45
+ # string += ario.contents
46
+ #
47
+ # * Read lines of a file into an array
48
+ # # method 1
49
+ # array = ario[]
50
+ # # method 2
51
+ # ario > array
52
+ # # method 3
53
+ # array = ario.to_a
54
+ # # method 4
55
+ # array = ario.readlines
56
+ #
57
+ # * Append lines of a file into an array
58
+ # # method 1
59
+ # ario >> array
60
+ # # method 2
61
+ # array += ario.lines[]
62
+ #
63
+ # * Read the first 10 lines of a file into an array
64
+ # # method 1
65
+ # array = ario[0...10]
66
+ # # method 2
67
+ # array = ario.lines[0...10]
68
+ # # method 3
69
+ # ario.lines(0...10) > array
70
+ #
71
+ # * Read lines of a file into an array, with each line chomped
72
+ # # method 1
73
+ # array = ario.chomp[]
74
+ # # method 2
75
+ # array = ario.chomp.lines[]
76
+ # # method 3
77
+ # ario.chomp > array
78
+ #
79
+ # * Append the first 10 lines of a file into an array, with each line chomped
80
+ # # method 1
81
+ # array += ario.chomp[0...10]
82
+ # # method 2
83
+ # array += ario.chomp.lines[0...10]
84
+ # # method 3
85
+ # ario.chomp.lines(0...10) >> array
86
+ #
87
+ # * Read all lines starting with 'require' into an array, with each line chomped
88
+ # # method 1
89
+ # array = ario.chomp[/^\s*require/]
90
+ # # method 2
91
+ # array = ario.chomp.lines[/^\s*require/]
92
+ # # method 3
93
+ # ario.chomp.lines(/^\s*require/) > array
94
+ #
95
+ # * Read a gzipped file into a string
96
+ # # method 1
97
+ # rio('afile.gz').gzip > string
98
+ # # method 2
99
+ # string = rio('afile.gz').gzip.contents
100
+ #
101
+ # * Append a gzipped file into a string
102
+ # # method 1
103
+ # rio('afile.gz').gzip >> string
104
+ # # method 2
105
+ # string += rio('afile.gz').gzip.contents
106
+ #
107
+ # * Iterate through all the lines of a file
108
+ # # method 1
109
+ # rio('afile').lines { |line| ... }
110
+ # # method 2
111
+ # rio('afile').each { |line| ... }
112
+ # # method 3
113
+ # rio('afile').each_line { |line| ... }
114
+ #
115
+ #
116
+ # * Iterate through the lines of a gzipped file
117
+ # rio('afile.gz').gzip { |line| ... }
118
+ #
119
+ # * Iterate through all non-empty lines of a gzipped file, with each line chomped
120
+ # rio('afile.gz').gzip.chomp.skiplines(:empty?) { |line| ... }
121
+ #
122
+ # * Iterate through the first 100 lines of a file
123
+ # # method 1
124
+ # rio('afile').lines(0...100) { |line| ... }
125
+ #
126
+ # * Iterate through the first line and all ruby comment lines in a gzipped file
127
+ # rio('afile.rb.gz').gzip.lines(0,/^\s*#/) { |line| ... }
128
+ #
129
+ # * Iterate through the lines of a ruby file that are neither empty nor comments, with all lines chomped
130
+ # rio('afile.rb').chomp.skiplines(/^\s*#/,:empty?) { |line| ... }
131
+ #
132
+ # * Read all the comment lines from a ruby file into an array with all lines chomped
133
+ # # method 1
134
+ # array = rio('afile.rb').chomp[/^\s*#/]
135
+ # # method 2
136
+ # array = rio('afile.rb').chomp.lines[/^\s*#/]
137
+ # # method 3
138
+ # rio('afile.rb').chomp.lines(/^\s*#/) > array
139
+ #
140
+ #
141
+ # * Read lines of a file into an array, with each line chomped, skipping any lines longer than 1024 chars
142
+ # # method 1
143
+ # array = ario.chomp[proc{ |line| line.length <= 1024}]
144
+ # # method 2
145
+ # ario.chomp.lines(proc{ |line| line.length <= 1024}) > array
146
+ # # method 3
147
+ # array = ario.chomp.skiplines[proc{ |line| line.length > 1024}]
148
+ # # method 4
149
+ # array = ario.chomp.lines(proc{ |line| line.length <= 1024}).to_a
150
+ #
151
+ # ---
152
+ #
153
+ # === Write to a single file
154
+ #
155
+ # ario = rio('afile')
156
+ # string = "A String\n"
157
+ # array = ["Line 0\n","Line 1\n"]
158
+ #
159
+ # * Write a string to a file, leaving the Rio open
160
+ # # method 1
161
+ # ario.puts(string)
162
+ # # method 2
163
+ # ario.print(string)
164
+ # # method 3
165
+ # ario.noautoclose < string
166
+ #
167
+ # * Write a string to a file and close the file
168
+ # # method 1
169
+ # rio('afile') < string
170
+ # # method 2
171
+ # ario.print!(string)
172
+ # # method 3
173
+ # ario.print(string).close
174
+ #
175
+ # * Append a string to a file, leaving the Rio open
176
+ # # method 1
177
+ # ario.a.puts(string)
178
+ # # method 2
179
+ # ario.a.print(string)
180
+ # # method 3
181
+ # ario.noautoclose << string
182
+ #
183
+ # * Append a string to a file and close the file
184
+ # # method 1
185
+ # rio('afile') << string
186
+ # # method 2
187
+ # rio('afile').a.print!(string)
188
+ # # method 3
189
+ # rio('afile').a.print(string).close
190
+ #
191
+ # * Write an array to a file, leaving the Rio open
192
+ # # method 1
193
+ # ario = rio('afile').nocloseoncopy
194
+ # ario << array
195
+ # # method 2
196
+ # ario.noautoclose < array
197
+ #
198
+ # * Write an array to a file and close the file
199
+ # # method 1
200
+ # rio('afile') < array
201
+ #
202
+ #
203
+ # ---
204
+ #
205
+ # === Select records
206
+ # ario = rio('afile')
207
+ # string = ""
208
+ # array = []
209
+ #
210
+ # * Put lines one thru ten and line 100 into an array
211
+ # # method 1
212
+ # array = ario[0..9,99]
213
+ # # method 2
214
+ # array = ario.lines[0..9,99]
215
+ # # method 3
216
+ # ario.lines(0..9,99) > array
217
+ #
218
+ # * Put lines one thru ten,line 100 and lines starting with 'rio4ruby' into an array
219
+ # # method 1
220
+ # array = ario[0..9,99,/^rio4ruby/]
221
+ # # method 2
222
+ # array = ario.lines[0..9,99,/^rio4ruby/]
223
+ # # method 3
224
+ # ario.lines(0..9,99,/^rio4ruby/) > array
225
+ #
226
+ # * Put lines that are longer than 128 bytes into an array
227
+ # # method 1
228
+ # array = ario[proc{ |l| l.length > 128}]
229
+ # # method 2
230
+ # array = ario.lines[proc{ |l| l.length > 128}]
231
+ # # method 3
232
+ # array = ario.skiplines[proc{ |l| l.length <= 128}]
233
+ # # method 4
234
+ # array = ario.skip.lines[proc{ |l| l.length <= 128}]
235
+ #
236
+ # * Copy all lines that do not start with 'rio4ruby' into another file
237
+ # # method 1
238
+ # ario.skiplines(/^rio4ruby/) > rio('another_file')
239
+ # # method 2
240
+ # ario.lines.skiplines(/^rio4ruby/) > rio('another_file')
241
+ # # method 3
242
+ # rio('another_file') < ario.skiplines(/^rio4ruby/)
243
+ #
244
+ # * Copy the first 10 lines and lines starting with 'rio4ruby', but exclude any lines longer than 128 bytes
245
+ # # method 1
246
+ # ario.lines(0...10,/^rio4ruby/).skiplines(proc{ |l| l.length > 128}] > rio('another_file')
247
+ # # method 2
248
+ # rio('another_file') < ario.lines(0...10,/^rio4ruby/).skiplines(proc{ |l| l.length > 128})
249
+ #
250
+ #
251
+ #
252
+ # ---
253
+ #
254
+ # === Select directory entries
255
+ # ario = rio('adir')
256
+ # string = ""
257
+ # array = []
258
+ #
259
+ # * Put all entries with the extension '.txt' into an array
260
+ # # method 1
261
+ # array = ario['*.txt']
262
+ # # method 2
263
+ # array = ario[/\.txt$/]
264
+ # # method 3
265
+ # array = ario.entries['*.txt']
266
+ #
267
+ # * Put all files with the extension '.txt' into an array
268
+ # # method 1
269
+ # array = ario.files['*.txt']
270
+ # # method 2
271
+ # array = ario.files[/\.txt$/]
272
+ # # method 3
273
+ # array = ario.files['*.txt']
274
+ #
275
+ # * Put all entries with the extension '.txt' into an array, including those in subdirectories
276
+ # # method 1
277
+ # array = ario.all['*.txt']
278
+ # # method 2
279
+ # array = ario.all[/\.txt$/]
280
+ # # method 3
281
+ # array = ario.all.entries['*.txt']
282
+ #
283
+ # * Put all entries with the extension '.txt' into an array, including those in subdirectories, except those
284
+ # in subdirectories name '.svn'
285
+ # # method 1
286
+ # array = ario.norecurse('.svn').all['*.txt']
287
+ # # method 2
288
+ # array = ario.norecurse(/^\.svn$/).all[/\.txt$/]
289
+ # # method 3
290
+ # array = ario.norecurse('.svn').entries['*.txt']
291
+ # # method 4
292
+ # array = ario.entries('*.txt').norecurse('.svn').to_a
293
+ # # method 5
294
+ # array = ario.norecurse('.svn')['*.txt']
295
+ #
296
+ # * Put all directories into an array
297
+ # # method 1
298
+ # array = ario.dirs[]
299
+ # # method 2
300
+ # array = ario.dirs.to_a
301
+ #
302
+ # * Put all directories (recursively) into an array
303
+ # # method 1
304
+ # array = ario.all.dirs[]
305
+ # # method 2
306
+ # array = ario.all.dirs.to_a
307
+ #
308
+ # * Put all entries (recursively) into an array, but limit the depth of recursion to 2
309
+ # # method 1
310
+ # array = ario.norecurse(3).to_a
311
+ #
312
+ #
313
+ # * Iterate through ruby files in a directory and subdirectories skipping
314
+ # those in the '.svn', and 'pkg' directories
315
+ # # method 1
316
+ # is_ruby_exe = proc{ |f| f.executable? and f[0][0] =~ /^#!.+ruby/ }
317
+ # ario.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) { |f| ... }
318
+ # # method 2
319
+ # is_ruby_exe = proc{ |f| f.executable? and f.gets =~ /^#!.+ruby/ }
320
+ # ario.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) { |f| ... }
321
+ #
322
+ # * Put all files excluding those that are symlinks to files in an array
323
+ # # method 1
324
+ # array = ario.skipfiles[:symlink?]
325
+ # # method 2
326
+ # array = ario.skipfiles(:symlink?).files[]
327
+ # # method 3
328
+ # array = ario.skipfiles(:symlink?).to_a
329
+ # # method 4
330
+ # array = ario.files.skipfiles[:symlink?]
331
+ #
332
+ # * Put all entries that are not files (or symlinks to files) into an array
333
+ # # method 1
334
+ # array = ario.skipfiles[]
335
+ # # method 2
336
+ # array = ario.skipfiles.to_a
337
+ #
338
+ # * Put all entries that are symlinks to files into an array
339
+ # # method 1
340
+ # array = ario.files[proc{|f| f.file? and f.symlink?}]
341
+ # # method 2
342
+ # array = ario.files(proc{|f| f.file? and f.symlink?}).to_a
343
+ #
344
+ # * Put all directories except those named '.svn' into an array
345
+ # # method 1
346
+ # array = ario.skipdirs['.svn']
347
+ # # method 2
348
+ # array = ario.skipdirs[/^\.svn$/]
349
+ # # method 3
350
+ # array = ario.skipdirs('.svn').to_a
351
+ # # method 4
352
+ # array = ario.skipdirs('.svn').dirs[]
353
+ # # method 5
354
+ # array = ario.skipdirs('.svn')[]
355
+ #
356
+ #
357
+ # ---
358
+ #
359
+ # === Read and writing files
360
+ # ario = rio('afile')
361
+ # string = ""
362
+ # array = []
363
+ #
364
+ # * Copy the contents of one file into another file
365
+ # # method 1
366
+ # rio('srcfile') > rio('dstfile')
367
+ # # method 2
368
+ # rio('dstfile') < rio('srcfile')
369
+ # # method 3
370
+ # rip('dstfile').print!(rio('srcfile').contents)
371
+ #
372
+ # * Append the contents of one file to another file
373
+ # # method 1
374
+ # rio('srcfile') >> rio('dstfile')
375
+ # # method 2
376
+ # rio('dstfile') << rio('srcfile')
377
+ # # method 3
378
+ # rip('dstfile').a.print!(rio('srcfile').contents)
379
+ #
380
+ # * Copy the first 10 lines of one file to another file
381
+ # # method 1
382
+ # rio('srcfile').lines(0...10) > rio('dstfile')
383
+ # # method 2
384
+ # rio('dstfile') < rio('srcfile').lines(0...10)
385
+ # # method 3
386
+ # rio('dstfile') < rio('srcfile').lines[0...10]
387
+ #
388
+ # * Concatenate several files into one
389
+ # # method 1
390
+ # rio('dstfile') < [ rio('src1'), rio('src2'), rio('src3') ]
391
+ # # method 2
392
+ # rio('dstfile') < rio('src1') << rio('src2') << rio('src3')
393
+ #
394
+ # * Copy a web page into a file
395
+ # # method 1
396
+ # rio('http://ruby-doc.org/') > rio('afile')
397
+ # # method 2
398
+ # rio('afile') < rio('http://ruby-doc.org/')
399
+ # # method 3
400
+ # rio('afile').print!(rio('http://ruby-doc.org/').contents)
401
+ #
402
+ # * Append the output of the daytime server running on the localhost to a file
403
+ # # method 1
404
+ # rio("tcp://localhost:daytime") >> rio('afile')
405
+ # # method 2
406
+ # rio("tcp:",'localhost','daytime') >> rio('afile')
407
+ # # method 3
408
+ # rio('afile') << rio("tcp://:daytime")
409
+ # # method 4
410
+ # rio('afile') << rio("tcp://:13")
411
+ #
412
+ # * Copy the first line and all lines containing 'http:' to a file
413
+ # # method 1
414
+ # rio('srcfile').lines(0,/http:/) > rio('dstfile')
415
+ # # method 2
416
+ # rio('dstfile') < rio('srcfile').lines(0,/http:/)
417
+ # # method 3
418
+ # rio('dstfile') < rio('srcfile').lines[0,/http:/]
419
+ # # method 4
420
+ #
421
+ # * Create a gzipped copy of a file
422
+ # # method 1
423
+ # rio('afile') > rio('afile.gz').gzip
424
+ # # method 2
425
+ # rio('afile.gz').gzip < rio('afile')
426
+ # # method 3
427
+ # rio('afile.gz').gzip.print!( rio('afile').contents )
428
+ #
429
+ # * Create an ungzipped copy of a gzipped file
430
+ # # method 1
431
+ # rio('afile') < rio('afile.gz').gzip
432
+ # # method 2
433
+ # rio('afile.gz').gzip > rio('afile')
434
+ # # method 3
435
+ # rio('afile').print!( rio('afile.gz').gzip.contents )
436
+ #
437
+ # * Copy the first 100 lines of gzipped file on a webserver into a local file
438
+ # # method 1
439
+ # rio('http://aserver/afile.gz').gzip.lines(0...100) > rio('afile')
440
+ #
441
+ #
442
+ # * Create a file composed of a header from another file, the output of the 'ps' command, some text and
443
+ # its creation time pulled from the daytime server running on your localhost
444
+ # # method 1
445
+ # rio('out') < [ rio('header'), rio(?-,'ps'), "Created on ", rio('tcp://:daytime') ]
446
+ # # method 2
447
+ # rio('out') < rio('header') << rio(?-,'ps') << "Created on: " << rio("tcp://:daytime")
448
+ #
449
+ #
450
+ # ---
451
+ #
452
+ # === Reading multiple files
453
+ # ario = rio('adir')
454
+ # string = ""
455
+ # array = []
456
+ #
457
+ # * Count the lines of code in a directory tree of ruby source files
458
+ # # method 1
459
+ # cnt = ario.all.files('*.rb').skiplines[/^\s*#/,/^\s*$/].size
460
+ # # method 2
461
+ # cnt = ario.all.files('*.rb').skiplines(/^\s*#/,/^\s*$/).inject(0) { |sum,l| sum += 1 }
462
+ #
463
+ # * Concatanate the contents of all .txt files in a directory into an array
464
+ # # method 1
465
+ # array = ario.lines.files['*.txt']
466
+ # # method 2
467
+ # array = ario.files('*.txt').lines[]
468
+ # # method 3
469
+ # ario.files('*.txt').lines > array
470
+ #
471
+ # * Concatanate the first line of all .txt files in a directory into an array
472
+ # # method 1
473
+ # array = ario.lines(0).files['*.txt']
474
+ # # method 2
475
+ # array = ario.files('*.txt').lines[0]
476
+ # # method 3
477
+ # ario.files('*.txt').lines(0) > array
478
+ #
479
+ # * Copy all .txt files (but only their first ten lines) in a directory into another directiory
480
+ # # method 1
481
+ # ario.files('*.txt').lines(0...10) > rio('another_dir')
482
+ #
483
+ # ---
484
+ #
485
+ # === Read and write using Standard IO
486
+ # string = ""
487
+ # array = []
488
+ #
489
+ # * Prompt for input and return what was typed
490
+ # # method 1
491
+ # ans = rio(?-).chomp.print("Type Something: ").gets
492
+ # # method 2
493
+ # stdio = rio(?-).chomp
494
+ # ans = stdio.print("Type Something: ").gets
495
+ #
496
+ # * Create a Rio tied to stdin or stdout, depending on how it is used
497
+ # stdio = rio(?-)
498
+ #
499
+ # * Create a Rio tied to stderr
500
+ # stderr = rio(?=)
501
+ #
502
+ # * Write a string to stdout
503
+ # # method 1
504
+ # rio(?-).puts("Hello World")
505
+ # # method 2
506
+ # rio(?-) << "Hello World\n"
507
+ # # method 3
508
+ # rio(?-) < "Hello World\n"
509
+ #
510
+ # * Read a string from stdin with the input chomped
511
+ # # method 1
512
+ # ans = rio(?-).chomp.gets
513
+ # # method 2
514
+ # stdio = rio(?-).chomp
515
+ # ans = stdio.gets
516
+ #
517
+ # * Read from stdin until end of file with the result going into a string
518
+ # # method 1
519
+ # rio(?-) >> string
520
+ # # method 2
521
+ # rio(?-) > string
522
+ #
523
+ # * Read from stdin until end of file with the chomped lines going into an array
524
+ # # method 1
525
+ # rio(?-).chomp >> array
526
+ # # method 2
527
+ # rio(?-).chomp > array
528
+ #
529
+ # * Read from stdin until end of file with the result going into a file
530
+ # # method 1
531
+ # rio(?-) > rio('afile')
532
+ # # method 2
533
+ # rio('afile') < rio(?-)
534
+ #
535
+ # * Read from stdin until end of file with the result appended to a file
536
+ # # method 1
537
+ # rio(?-) >> rio('afile')
538
+ # # method 2
539
+ # rio('afile') << rio(?-)
540
+ #
541
+ # * Write a message to stderr
542
+ # # method 1
543
+ # rio(?=).puts("Hello Error")
544
+ # # method 2
545
+ # rio(?=) << "Hello Error\n"
546
+ # # method 3
547
+ # rio(?=) < "Hello Error\n"
548
+ #
549
+ # * Dump a file to stdout
550
+ # # method 1
551
+ # rio('afile') > ?-
552
+ # # method 2
553
+ # rio('afile') > rio(?-)
554
+ # # method 3
555
+ # rio(?-) << rio('afile')
556
+ # # method 4
557
+ # rio('afile') >> ?-
558
+ # # method 5
559
+ # rio(?-) < rio('afile')
560
+ # # method 6
561
+ # rio(?-).print(rio('afile').contents)
562
+ #
563
+ # * Emulate a simplified unix 'head' command which reads from stdin and writes the first 10 lines to stdout
564
+ # # method 1
565
+ # rio(?-).lines(0..9) > ?-
566
+ #
567
+ # ---
568
+ #
569
+ # === Reading and writing from processes as one might do with popen
570
+ #
571
+ # * Read the output of the 'ps' command into an array without the header line or the line representing
572
+ # the 'ps' command itself
573
+ # ps = rio(?-,'ps -a').skiplines[0,/ps$/]
574
+ #
575
+ # * Run an external program, copying its input from one location and its output to another,
576
+ # and make it look very much like a shell command.
577
+ #
578
+ # infile = rio(?","Hello Kitty\n")
579
+ # outfile = rio('out.txt')
580
+ #
581
+ # # method 1
582
+ # cat = rio(?-,'cat').w!
583
+ # cat <infile >outfile
584
+ #
585
+ # # method 2
586
+ # infile | 'cat' | outfile
587
+ #
588
+ # ---
589
+ #
590
+ # === Renaming and moving files
591
+ # string = ""
592
+ # array = []
593
+ #
594
+ # * Rename the file 'a' to 'b'
595
+ # # method 1
596
+ # rio('a').rename('b')
597
+ # # method 2
598
+ # rio('a').rename.filename = 'b'
599
+ #
600
+ # * Rename a file and leave the Rio referencing the files old name
601
+ # ario = rio('a')
602
+ # # method 1
603
+ # ario.rename('b')
604
+ #
605
+ # * Rename a file and change the Rio to reference the new file name
606
+ # ario = rio('a')
607
+ # # method 1
608
+ # ario.rename!('b')
609
+ #
610
+ # * Rename the file 'index.htm' to 'index.html'
611
+ # # method 1
612
+ # rio('index.htm').rename('index.html')
613
+ # # method 2
614
+ # rio('index.htm').rename.extname = '.html'
615
+ #
616
+ # * Rename the file 'index.html' to 'welcome.html'
617
+ # # method 1
618
+ # rio('index.html').rename('welecome.html')
619
+ # # method 2
620
+ # rio('index.htm').rename.basename = 'welcome'
621
+ #
622
+ # * Move a file from directory 'src' to directory 'dst'
623
+ # # method 1
624
+ # rio('src/afile').rename('dst/afile')
625
+ # # method 2
626
+ # rio('src/afile').rename.dirname = 'dst'
627
+ #
628
+ # * Change a file to have the extension '.html' leaving the rest of it as is
629
+ # # method 1
630
+ # ario.rename.extname = '.html'
631
+ #
632
+ # * Change a files basename to 'rio4ruby' without changing its extension
633
+ # # method 1
634
+ # ario.rename.basename = 'rio4ruby'
635
+ #
636
+ # * Change a file ending with '.tar.gz' to end with '.tgz'
637
+ # # method 1
638
+ # ario.rename.ext('.tar.gz').extname = '.tgz'
639
+ #
640
+ # * Change the extension of all files with the extension '.htm' in a directory to have the
641
+ # extension '.html'
642
+ # # method 1
643
+ # rio('adir').rename.files('*.htm') do |htmfile|
644
+ # htmlfile.extname = '.html'
645
+ # end
646
+ # # method 2
647
+ # rio('adir').files('*.htm') do |htmfile|
648
+ # htmlfile.rename.extname = '.html'
649
+ # end
650
+ #
651
+ # * Change the extension of all files with the extension '.htm' in a directory and its
652
+ # subdirectories to have the extension '.html'
653
+ # # method 1
654
+ # rio('adir').rename.all.files('*.htm') do |htmfile|
655
+ # htmfile.extname = '.html'
656
+ # end
657
+ # # method 2
658
+ # rio('adir').all.files('*.htm') do |htmfile|
659
+ # htmfile.rename.extname = '.html'
660
+ # end
661
+ #
662
+ # * Move a file in an arbitrary directory into the current working directory.
663
+ # # method 1
664
+ # rio('arb/i/trary/di/rec/tory/afile').rename.dirname = '.'
665
+ #
666
+ #
667
+ # ---
668
+ #
669
+ # === Manipulate a Rio's path
670
+ # string = ""
671
+ # array = []
672
+ #
673
+ # * Create a Rio with an additional subdirectory appended
674
+ # ap = rio('adir')
675
+ # # method 1
676
+ # ap /= 'subdirectory'
677
+ # # method 2
678
+ # ap = ap.join('subdirectory')
679
+ # # method 3
680
+ # ap = rio(ap,'subdirectory')
681
+ #
682
+ # * Create a Rio from an array of subdirectories
683
+ # dirs = ['adir','subdir1','subdir2']
684
+ # # method 1
685
+ # ario = rio(dirs)
686
+ #
687
+ # * Create an array of subdirectories from a Rio
688
+ # # method 1
689
+ # anarray = rio('adir/subdir1/subdir2').split
690
+ #
691
+ # * Append a string to a path
692
+ # # method 1
693
+ # ario = rio('apath') + astring
694
+ # # method 2
695
+ # ario = rio('apath')
696
+ # ario += astring
697
+ #
698
+ # * create a directory 'links' with a symlink pointing to each .rb file in directory 'lib' (including subdirectories)
699
+ # lib = rio('lib')
700
+ # links = rio('links').delete!.mkdir
701
+ # lib.all.files("*.rb") do |f|
702
+ # f.symlink( f.dirname.sub(/^#{lib}/,links).mkdir )
703
+ # end
704
+ #
705
+ # ----
27
706
  #
28
707
  # Suggested Reading
29
708
  # * RIO::Doc::SYNOPSIS
30
709
  # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
710
  # * RIO::Rio
34
- #
35
-
36
-
37
- module RIO
38
- module Doc #:doc:
39
- =begin rdoc
40
-
41
- = Rio - Ruby I/O Facilitator
42
-
43
- Rio is a facade for most of the standard ruby classes that deal with I/O;
44
- providing a simple, intuitive, succinct interface to the functionality
45
- provided by IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI
46
- and others. Rio also provides an application level interface which allows many
47
- common I/O idioms to be expressed succinctly.
48
-
49
- == HOWTO...
50
-
51
- === Read a single file
52
- ario = rio('afile')
53
- string = ""
54
- array = []
55
-
56
- * Read a file into a string.
57
- # method 1
58
- string = ario.contents
59
- # method 2
60
- ario > string
61
-
62
- * Append a file onto a string.
63
- # method 1
64
- ario >> string
65
- # method 2
66
- string += ario.contents
67
-
68
- * Read lines of a file into an array
69
- # method 1
70
- array = ario[]
71
- # method 2
72
- ario > array
73
- # method 3
74
- array = ario.to_a
75
- # method 4
76
- array = ario.readlines
77
-
78
- * Append lines of a file into an array
79
- # method 1
80
- ario >> array
81
- # method 2
82
- array += ario.lines[]
83
-
84
- * Read the first 10 lines of a file into an array
85
- # method 1
86
- array = ario[0...10]
87
- # method 2
88
- array = ario.lines[0...10]
89
- # method 3
90
- ario.lines(0...10) > array
91
-
92
- * Read lines of a file into an array, with each line chomped
93
- # method 1
94
- array = ario.chomp[]
95
- # method 2
96
- array = ario.chomp.lines[]
97
- # method 3
98
- ario.chomp > array
99
-
100
- * Append the first 10 lines of a file into an array, with each line chomped
101
- # method 1
102
- array += ario.chomp[0...10]
103
- # method 2
104
- array += ario.chomp.lines[0...10]
105
- # method 3
106
- ario.chomp.lines(0...10) >> array
107
-
108
- * Read all lines starting with 'require' into an array, with each line chomped
109
- # method 1
110
- array = ario.chomp[/^\s*require/]
111
- # method 2
112
- array = ario.chomp.lines[/^\s*require/]
113
- # method 3
114
- ario.chomp.lines(/^\s*require/) > array
115
-
116
- * Read a gzipped file into a string
117
- # method 1
118
- rio('afile.gz').gzip > string
119
- # method 2
120
- string = rio('afile.gz').gzip.contents
121
-
122
- * Append a gzipped file into a string
123
- # method 1
124
- rio('afile.gz').gzip >> string
125
- # method 2
126
- string += rio('afile.gz').gzip.contents
127
-
128
- * Iterate through all the lines of a file
129
- # method 1
130
- rio('afile').lines { |line| ... }
131
- # method 2
132
- rio('afile').each { |line| ... }
133
- # method 3
134
- rio('afile').each_line { |line| ... }
135
-
136
-
137
- * Iterate through the lines of a gzipped file
138
- rio('afile.gz').gzip { |line| ... }
139
-
140
- * Iterate through all non-empty lines of a gzipped file, with each line chomped
141
- rio('afile.gz').gzip.chomp.skiplines(:empty?) { |line| ... }
142
-
143
- * Iterate through the first 100 lines of a file
144
- # method 1
145
- rio('afile').lines(0...100) { |line| ... }
146
-
147
- * Iterate through the first line and all ruby comment lines in a gzipped file
148
- rio('afile.rb.gz').gzip.lines(0,/^\s*#/) { |line| ... }
149
-
150
- * Iterate through the lines of a ruby file that are neither empty nor comments, with all lines chomped
151
- rio('afile.rb').chomp.skiplines(/^\s*#/,:empty?) { |line| ... }
152
-
153
- * Read all the comment lines from a ruby file into an array with all lines chomped
154
- # method 1
155
- array = rio('afile.rb').chomp[/^\s*#/]
156
- # method 2
157
- array = rio('afile.rb').chomp.lines[/^\s*#/]
158
- # method 3
159
- rio('afile.rb').chomp.lines(/^\s*#/) > array
160
-
161
-
162
- * Read lines of a file into an array, with each line chomped, skipping any lines longer than 1024 chars
163
- # method 1
164
- array = ario.chomp[proc{ |line| line.length <= 1024}]
165
- # method 2
166
- ario.chomp.lines(proc{ |line| line.length <= 1024}) > array
167
- # method 3
168
- array = ario.chomp.skiplines[proc{ |line| line.length > 1024}]
169
- # method 4
170
- array = ario.chomp.lines(proc{ |line| line.length <= 1024}).to_a
171
-
172
- ---
173
-
174
- === Write to a single file
175
-
176
- ario = rio('afile')
177
- string = "A String\n"
178
- array = ["Line 0\n","Line 1\n"]
179
-
180
- * Write a string to a file, leaving the Rio open
181
- # method 1
182
- ario.puts(string)
183
- # method 2
184
- ario.print(string)
185
- # method 3
186
- ario.noautoclose < string
187
-
188
- * Write a string to a file and close the file
189
- # method 1
190
- rio('afile') < string
191
- # method 2
192
- ario.print!(string)
193
- # method 3
194
- ario.print(string).close
195
-
196
- * Append a string to a file, leaving the Rio open
197
- # method 1
198
- ario.a.puts(string)
199
- # method 2
200
- ario.a.print(string)
201
- # method 3
202
- ario.noautoclose << string
203
-
204
- * Append a string to a file and close the file
205
- # method 1
206
- rio('afile') << string
207
- # method 2
208
- rio('afile').a.print!(string)
209
- # method 3
210
- rio('afile').a.print(string).close
211
-
212
- * Write an array to a file, leaving the Rio open
213
- # method 1
214
- ario = rio('afile').nocloseoncopy
215
- ario << array
216
- # method 2
217
- ario.noautoclose < array
218
-
219
- * Write an array to a file and close the file
220
- # method 1
221
- rio('afile') < array
222
-
223
-
224
- ---
225
-
226
- === Select records
227
- ario = rio('afile')
228
- string = ""
229
- array = []
230
-
231
- * Put lines one thru ten and line 100 into an array
232
- # method 1
233
- array = ario[0..9,99]
234
- # method 2
235
- array = ario.lines[0..9,99]
236
- # method 3
237
- ario.lines(0..9,99) > array
238
-
239
- * Put lines one thru ten,line 100 and lines starting with 'rio4ruby' into an array
240
- # method 1
241
- array = ario[0..9,99,/^rio4ruby/]
242
- # method 2
243
- array = ario.lines[0..9,99,/^rio4ruby/]
244
- # method 3
245
- ario.lines(0..9,99,/^rio4ruby/) > array
246
-
247
- * Put lines that are longer than 128 bytes into an array
248
- # method 1
249
- array = ario[proc{ |l| l.length > 128}]
250
- # method 2
251
- array = ario.lines[proc{ |l| l.length > 128}]
252
- # method 3
253
- array = ario.skiplines[proc{ |l| l.length <= 128}]
254
- # method 4
255
- array = ario.skip.lines[proc{ |l| l.length <= 128}]
256
-
257
- * Copy all lines that do not start with 'rio4ruby' into another file
258
- # method 1
259
- ario.skiplines(/^rio4ruby/) > rio('another_file')
260
- # method 2
261
- ario.lines.skiplines(/^rio4ruby/) > rio('another_file')
262
- # method 3
263
- rio('another_file') < ario.skiplines(/^rio4ruby/)
264
-
265
- * Copy the first 10 lines and lines starting with 'rio4ruby', but exclude any lines longer than 128 bytes
266
- # method 1
267
- ario.lines(0...10,/^rio4ruby/).skiplines(proc{ |l| l.length > 128}] > rio('another_file')
268
- # method 2
269
- rio('another_file') < ario.lines(0...10,/^rio4ruby/).skiplines(proc{ |l| l.length > 128})
270
-
271
-
272
-
273
- ---
274
-
275
- === Select directory entries
276
- ario = rio('adir')
277
- string = ""
278
- array = []
279
-
280
- * Put all entries with the extension '.txt' into an array
281
- # method 1
282
- array = ario['*.txt']
283
- # method 2
284
- array = ario[/\.txt$/]
285
- # method 3
286
- array = ario.entries['*.txt']
287
-
288
- * Put all files with the extension '.txt' into an array
289
- # method 1
290
- array = ario.files['*.txt']
291
- # method 2
292
- array = ario.files[/\.txt$/]
293
- # method 3
294
- array = ario.files['*.txt']
295
-
296
- * Put all entries with the extension '.txt' into an array, including those in subdirectories
297
- # method 1
298
- array = ario.all['*.txt']
299
- # method 2
300
- array = ario.all[/\.txt$/]
301
- # method 3
302
- array = ario.all.entries['*.txt']
303
-
304
- * Put all entries with the extension '.txt' into an array, including those in subdirectories, except those
305
- in subdirectories name '.svn'
306
- # method 1
307
- array = ario.norecurse('.svn').all['*.txt']
308
- # method 2
309
- array = ario.norecurse(/^\.svn$/).all[/\.txt$/]
310
- # method 3
311
- array = ario.norecurse('.svn').entries['*.txt']
312
- # method 4
313
- array = ario.entries('*.txt').norecurse('.svn').to_a
314
- # method 5
315
- array = ario.norecurse('.svn')['*.txt']
316
-
317
- * Put all directories into an array
318
- # method 1
319
- array = ario.dirs[]
320
- # method 2
321
- array = ario.dirs.to_a
322
-
323
- * Put all directories (recursively) into an array
324
- # method 1
325
- array = ario.all.dirs[]
326
- # method 2
327
- array = ario.all.dirs.to_a
328
-
329
- * Put all entries (recursively) into an array, but limit the depth of recursion to 2
330
- # method 1
331
- array = ario.norecurse(3).to_a
332
-
333
-
334
- * Iterate through ruby files in a directory and subdirectories skipping
335
- those in the '.svn', and 'pkg' directories
336
- # method 1
337
- is_ruby_exe = proc{ |f| f.executable? and f[0][0] =~ /^#!.+ruby/ }
338
- ario.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) { |f| ... }
339
- # method 2
340
- is_ruby_exe = proc{ |f| f.executable? and f.gets =~ /^#!.+ruby/ }
341
- ario.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) { |f| ... }
342
-
343
- * Put all files excluding those that are symlinks to files in an array
344
- # method 1
345
- array = ario.skipfiles[:symlink?]
346
- # method 2
347
- array = ario.skipfiles(:symlink?).files[]
348
- # method 3
349
- array = ario.skipfiles(:symlink?).to_a
350
- # method 4
351
- array = ario.files.skipfiles[:symlink?]
352
-
353
- * Put all entries that are not files (or symlinks to files) into an array
354
- # method 1
355
- array = ario.skipfiles[]
356
- # method 2
357
- array = ario.skipfiles.to_a
358
-
359
- * Put all entries that are symlinks to files into an array
360
- # method 1
361
- array = ario.files[proc{|f| f.file? and f.symlink?}]
362
- # method 2
363
- array = ario.files(proc{|f| f.file? and f.symlink?}).to_a
364
-
365
- * Put all directories except those named '.svn' into an array
366
- # method 1
367
- array = ario.skipdirs['.svn']
368
- # method 2
369
- array = ario.skipdirs[/^\.svn$/]
370
- # method 3
371
- array = ario.skipdirs('.svn').to_a
372
- # method 4
373
- array = ario.skipdirs('.svn').dirs[]
374
- # method 5
375
- array = ario.skipdirs('.svn')[]
376
-
377
-
378
- ---
379
-
380
- === Read and writing files
381
- ario = rio('afile')
382
- string = ""
383
- array = []
384
-
385
- * Copy the contents of one file into another file
386
- # method 1
387
- rio('srcfile') > rio('dstfile')
388
- # method 2
389
- rio('dstfile') < rio('srcfile')
390
- # method 3
391
- rip('dstfile').print!(rio('srcfile').contents)
392
-
393
- * Append the contents of one file to another file
394
- # method 1
395
- rio('srcfile') >> rio('dstfile')
396
- # method 2
397
- rio('dstfile') << rio('srcfile')
398
- # method 3
399
- rip('dstfile').a.print!(rio('srcfile').contents)
400
-
401
- * Copy the first 10 lines of one file to another file
402
- # method 1
403
- rio('srcfile').lines(0...10) > rio('dstfile')
404
- # method 2
405
- rio('dstfile') < rio('srcfile').lines(0...10)
406
- # method 3
407
- rio('dstfile') < rio('srcfile').lines[0...10]
408
-
409
- * Concatenate several files into one
410
- # method 1
411
- rio('dstfile') < [ rio('src1'), rio('src2'), rio('src3') ]
412
- # method 2
413
- rio('dstfile') < rio('src1') << rio('src2') << rio('src3')
414
-
415
- * Copy a web page into a file
416
- # method 1
417
- rio('http://ruby-doc.org/') > rio('afile')
418
- # method 2
419
- rio('afile') < rio('http://ruby-doc.org/')
420
- # method 3
421
- rio('afile').print!(rio('http://ruby-doc.org/').contents)
422
-
423
- * Append the output of the daytime server running on the localhost to a file
424
- # method 1
425
- rio("tcp://localhost:daytime") >> rio('afile')
426
- # method 2
427
- rio("tcp:",'localhost','daytime') >> rio('afile')
428
- # method 3
429
- rio('afile') << rio("tcp://:daytime")
430
- # method 4
431
- rio('afile') << rio("tcp://:13")
432
-
433
- * Copy the first line and all lines containing 'http:' to a file
434
- # method 1
435
- rio('srcfile').lines(0,/http:/) > rio('dstfile')
436
- # method 2
437
- rio('dstfile') < rio('srcfile').lines(0,/http:/)
438
- # method 3
439
- rio('dstfile') < rio('srcfile').lines[0,/http:/]
440
- # method 4
441
-
442
- * Create a gzipped copy of a file
443
- # method 1
444
- rio('afile') > rio('afile.gz').gzip
445
- # method 2
446
- rio('afile.gz').gzip < rio('afile')
447
- # method 3
448
- rio('afile.gz').gzip.print!( rio('afile').contents )
449
-
450
- * Create an ungzipped copy of a gzipped file
451
- # method 1
452
- rio('afile') < rio('afile.gz').gzip
453
- # method 2
454
- rio('afile.gz').gzip > rio('afile')
455
- # method 3
456
- rio('afile').print!( rio('afile.gz').gzip.contents )
457
-
458
- * Copy the first 100 lines of gzipped file on a webserver into a local file
459
- # method 1
460
- rio('http://aserver/afile.gz').gzip.lines(0...100) > rio('afile')
461
-
462
-
463
- * Create a file composed of a header from another file, the output of the 'ps' command, some text and
464
- its creation time pulled from the daytime server running on your localhost
465
- # method 1
466
- rio('out') < [ rio('header'), rio(?-,'ps'), "Created on ", rio('tcp://:daytime') ]
467
- # method 2
468
- rio('out') < rio('header') << rio(?-,'ps') << "Created on: " << rio("tcp://:daytime")
469
-
470
-
471
- ---
472
-
473
- === Reading multiple files
474
- ario = rio('adir')
475
- string = ""
476
- array = []
477
-
478
- * Count the lines of code in a directory tree of ruby source files
479
- # method 1
480
- cnt = ario.all.files('*.rb').skiplines[/^\s*#/,/^\s*$/].size
481
- # method 2
482
- cnt = ario.all.files('*.rb').skiplines(/^\s*#/,/^\s*$/).inject(0) { |sum,l| sum += 1 }
483
-
484
- * Concatanate the contents of all .txt files in a directory into an array
485
- # method 1
486
- array = ario.lines.files['*.txt']
487
- # method 2
488
- array = ario.files('*.txt').lines[]
489
- # method 3
490
- ario.files('*.txt').lines > array
491
-
492
- * Concatanate the first line of all .txt files in a directory into an array
493
- # method 1
494
- array = ario.lines(0).files['*.txt']
495
- # method 2
496
- array = ario.files('*.txt').lines[0]
497
- # method 3
498
- ario.files('*.txt').lines(0) > array
499
-
500
- * Copy all .txt files (but only their first ten lines) in a directory into another directiory
501
- # method 1
502
- ario.files('*.txt').lines(0...10) > rio('another_dir')
503
-
504
- ---
505
-
506
- === Read and write using Standard IO
507
- string = ""
508
- array = []
509
-
510
- * Prompt for input and return what was typed
511
- # method 1
512
- ans = rio(?-).chomp.print("Type Something: ").gets
513
- # method 2
514
- stdio = rio(?-).chomp
515
- ans = stdio.print("Type Something: ").gets
516
-
517
- * Create a Rio tied to stdin or stdout, depending on how it is used
518
- stdio = rio(?-)
519
-
520
- * Create a Rio tied to stderr
521
- stderr = rio(?=)
522
-
523
- * Write a string to stdout
524
- # method 1
525
- rio(?-).puts("Hello World")
526
- # method 2
527
- rio(?-) << "Hello World\n"
528
- # method 3
529
- rio(?-) < "Hello World\n"
530
-
531
- * Read a string from stdin with the input chomped
532
- # method 1
533
- ans = rio(?-).chomp.gets
534
- # method 2
535
- stdio = rio(?-).chomp
536
- ans = stdio.gets
537
-
538
- * Read from stdin until end of file with the result going into a string
539
- # method 1
540
- rio(?-) >> string
541
- # method 2
542
- rio(?-) > string
543
-
544
- * Read from stdin until end of file with the chomped lines going into an array
545
- # method 1
546
- rio(?-).chomp >> array
547
- # method 2
548
- rio(?-).chomp > array
549
-
550
- * Read from stdin until end of file with the result going into a file
551
- # method 1
552
- rio(?-) > rio('afile')
553
- # method 2
554
- rio('afile') < rio(?-)
555
-
556
- * Read from stdin until end of file with the result appended to a file
557
- # method 1
558
- rio(?-) >> rio('afile')
559
- # method 2
560
- rio('afile') << rio(?-)
561
-
562
- * Write a message to stderr
563
- # method 1
564
- rio(?=).puts("Hello Error")
565
- # method 2
566
- rio(?=) << "Hello Error\n"
567
- # method 3
568
- rio(?=) < "Hello Error\n"
569
-
570
- * Dump a file to stdout
571
- # method 1
572
- rio('afile') > ?-
573
- # method 2
574
- rio('afile') > rio(?-)
575
- # method 3
576
- rio(?-) << rio('afile')
577
- # method 4
578
- rio('afile') >> ?-
579
- # method 5
580
- rio(?-) < rio('afile')
581
- # method 6
582
- rio(?-).print(rio('afile').contents)
583
-
584
- * Emulate a simplified unix 'head' command which reads from stdin and writes the first 10 lines to stdout
585
- # method 1
586
- rio(?-).lines(0..9) > ?-
587
-
588
- ---
589
-
590
- === Reading and writing from processes as one might do with popen
591
-
592
- * Read the output of the 'ps' command into an array without the header line or the line representing
593
- the 'ps' command itself
594
- ps = rio(?-,'ps -a').skiplines[0,/ps$/]
595
-
596
- * Run an external program, copying its input from one location and its output to another,
597
- and make it look very much like a shell command.
598
-
599
- infile = rio(?","Hello Kitty\n")
600
- outfile = rio('out.txt')
601
-
602
- # method 1
603
- cat = rio(?-,'cat').w!
604
- cat <infile >outfile
605
-
606
- # method 2
607
- infile | 'cat' | outfile
608
-
609
- ---
610
-
611
- === Renaming and moving files
612
- string = ""
613
- array = []
614
-
615
- * Rename the file 'a' to 'b'
616
- # method 1
617
- rio('a').rename('b')
618
- # method 2
619
- rio('a').rename.filename = 'b'
620
-
621
- * Rename a file and leave the Rio referencing the files old name
622
- ario = rio('a')
623
- # method 1
624
- ario.rename('b')
625
-
626
- * Rename a file and change the Rio to reference the new file name
627
- ario = rio('a')
628
- # method 1
629
- ario.rename!('b')
630
-
631
- * Rename the file 'index.htm' to 'index.html'
632
- # method 1
633
- rio('index.htm').rename('index.html')
634
- # method 2
635
- rio('index.htm').rename.extname = '.html'
636
-
637
- * Rename the file 'index.html' to 'welcome.html'
638
- # method 1
639
- rio('index.html').rename('welecome.html')
640
- # method 2
641
- rio('index.htm').rename.basename = 'welcome'
642
-
643
- * Move a file from directory 'src' to directory 'dst'
644
- # method 1
645
- rio('src/afile').rename('dst/afile')
646
- # method 2
647
- rio('src/afile').rename.dirname = 'dst'
648
-
649
- * Change a file to have the extension '.html' leaving the rest of it as is
650
- # method 1
651
- ario.rename.extname = '.html'
652
-
653
- * Change a files basename to 'rio4ruby' without changing its extension
654
- # method 1
655
- ario.rename.basename = 'rio4ruby'
656
-
657
- * Change a file ending with '.tar.gz' to end with '.tgz'
658
- # method 1
659
- ario.rename.ext('.tar.gz').extname = '.tgz'
660
-
661
- * Change the extension of all files with the extension '.htm' in a directory to have the
662
- extension '.html'
663
- # method 1
664
- rio('adir').rename.files('*.htm') do |htmfile|
665
- htmlfile.extname = '.html'
666
- end
667
- # method 2
668
- rio('adir').files('*.htm') do |htmfile|
669
- htmlfile.rename.extname = '.html'
670
- end
671
-
672
- * Change the extension of all files with the extension '.htm' in a directory and its
673
- subdirectories to have the extension '.html'
674
- # method 1
675
- rio('adir').rename.all.files('*.htm') do |htmfile|
676
- htmfile.extname = '.html'
677
- end
678
- # method 2
679
- rio('adir').all.files('*.htm') do |htmfile|
680
- htmfile.rename.extname = '.html'
681
- end
682
-
683
- * Move a file in an arbitrary directory into the current working directory.
684
- # method 1
685
- rio('arb/i/trary/di/rec/tory/afile').rename.dirname = '.'
686
-
687
-
688
- ---
689
-
690
- === Manipulate a Rio's path
691
- string = ""
692
- array = []
693
-
694
- * Create a Rio with an additional subdirectory appended
695
- ap = rio('adir')
696
- # method 1
697
- ap /= 'subdirectory'
698
- # method 2
699
- ap = ap.join('subdirectory')
700
- # method 3
701
- ap = rio(ap,'subdirectory')
702
-
703
- * Create a Rio from an array of subdirectories
704
- dirs = ['adir','subdir1','subdir2']
705
- # method 1
706
- ario = rio(dirs)
707
-
708
- * Create an array of subdirectories from a Rio
709
- # method 1
710
- anarray = rio('adir/subdir1/subdir2').split
711
-
712
- * Append a string to a path
713
- # method 1
714
- ario = rio('apath') + astring
715
- # method 2
716
- ario = rio('apath')
717
- ario += astring
718
-
719
- * create a directory 'links' with a symlink pointing to each .rb file in directory 'lib' (including subdirectories)
720
- lib = rio('lib')
721
- links = rio('links').delete!.mkdir
722
- lib.all.files("*.rb") do |f|
723
- f.symlink( f.dirname.sub(/^#{lib}/,links).mkdir )
724
- end
725
-
726
- ----
727
-
728
- Suggested Reading
729
- * RIO::Doc::SYNOPSIS
730
- * RIO::Doc::INTRO
731
- * RIO::Rio
732
711
 
733
- =end
734
712
  module HOWTO
735
713
  end
736
714
  end