rio 0.4.2 → 0.5.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 (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,20 +18,9 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
26
  require 'rio/context/cxx.rb'
@@ -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,20 +18,9 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
26
  require 'rio/context/cxx.rb'
@@ -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,20 +18,9 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
26
  require 'rio/exception/copy'
@@ -108,7 +97,6 @@ module RIO
108
97
  end
109
98
  end
110
99
  def cpfrom_array_(ary)
111
- #p "CPFROM_ARRAY_"
112
100
  ary.inject(self) { |anio,el| anio << el }
113
101
  end
114
102
  end
@@ -163,14 +151,12 @@ module RIO
163
151
 
164
152
  def cpto_rio_(arg,sym)
165
153
  ario = ensure_rio(arg)
166
- #p ario
167
154
  ario = ario.join(self.filename) if ario.dir?
155
+
168
156
  ario.cpclose {
169
157
  ario = ario.iostate(sym)
170
158
  self.copying(ario).each { |el|
171
- # p el
172
159
  ario.putrec(el)
173
- # ario << el
174
160
  }.copying_done(ario)
175
161
  ario
176
162
  }
@@ -198,10 +184,9 @@ module RIO
198
184
  end
199
185
  def cpfrom_rio_(arg)
200
186
  ario = ensure_rio(arg)
201
- #p ario.cx
202
187
 
203
188
  ario.copying(self).each { |el|
204
- self << el
189
+ self.putrec(el)
205
190
  }.copying_done(self)
206
191
  end
207
192
  end
@@ -0,0 +1,67 @@
1
+ #--
2
+ # ===========================================================================
3
+ # Copyright (c) 2005-2012 Christopher Kleckner
4
+ # All rights reserved
5
+ #
6
+ # This file is part of the Rio library for ruby.
7
+ #
8
+ # Rio is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Rio is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Rio; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # ===========================================================================
22
+ #++
23
+ #
24
+
25
+ require 'forwardable'
26
+ require 'rio/alturi'
27
+
28
+ module RIO
29
+ class CxURI
30
+ def initialize(r)
31
+ case r
32
+ when ::RIO::Rio
33
+ u = r.uri
34
+ @parts = ::Alt::URI::Gen::URIParts.parse(u.to_s)
35
+ self.fragment = r.cx
36
+ else
37
+ @parts = ::Alt::URI::Gen::URIParts.parse(r.to_s)
38
+ end
39
+ end
40
+ def to_rio
41
+ nparts = @parts.clone
42
+ cx = self.fragment
43
+ nparts.fragment = nil
44
+ nrio = Rio.rio(nparts.to_s)
45
+ nrio.cx = cx
46
+ nrio
47
+ end
48
+ def fragment=(arg)
49
+ @parts.fragment = arg.nil? ? nil : YAML.dump(arg)
50
+ end
51
+ def fragment
52
+ YAML.load(@parts.fragment) unless @parts.fragment.nil?
53
+ end
54
+
55
+ extend Forwardable
56
+
57
+ def_delegators :@parts, :authority,:scheme,:path
58
+ def_delegators :@parts, :authority=,:scheme=,:path=,:query=,:query
59
+ def_delegators :@parts, :userinfo,:host
60
+ def_delegators :@parts, :userinfo=,:host=,:port=, :port
61
+ def to_s
62
+ @parts.uri
63
+ end
64
+
65
+
66
+ end
67
+ end
@@ -0,0 +1,18 @@
1
+
2
+ module RIO
3
+ module DBG
4
+ def trace_states(tf=true,&block)
5
+ old_trace_states = $trace_states
6
+ begin
7
+ $trace_states = tf
8
+ yield
9
+ ensure
10
+ $trace_states = old_trace_states
11
+ end
12
+ end
13
+ module_function :trace_states
14
+ end
15
+ end
16
+
17
+
18
+
@@ -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,20 +18,9 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
  require 'rio/base'
37
26
 
@@ -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,29 +18,20 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
- require 'rio/ops/path'
38
- require 'rio/ops/dir'
39
- require 'rio/filter/closeoneof'
40
- require 'rio/ioh'
26
+ #require 'rio/ops/path'
27
+ #require 'rio/ops/dir'
28
+ #require 'rio/filter/closeoneof'
29
+ #require 'rio/ioh'
30
+
41
31
  module RIO
42
32
  module Dir #:nodoc: all
43
33
  class Base < State::Base
34
+ fwd :data,:ioh
44
35
  include Ops::Path::Str
45
36
  def open?() !ioh.nil? end
46
37
  end
@@ -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,20 +18,9 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
26
  require 'rio'
@@ -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,281 +18,268 @@
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.
27
- #
28
- # Suggested Reading
29
- # * RIO::Doc::SYNOPSIS
30
- # * RIO::Doc::INTRO
31
- # * RIO::Doc::HOWTO
32
- # * RIO::Doc::EXAMPLES
33
- # * RIO::Rio
34
- #
35
24
 
36
25
 
37
26
  module RIO
38
27
  module Doc
39
- =begin rdoc
40
-
41
-
42
-
43
- The following examples are provided without comment
44
-
45
- array = rio('afile').readlines
46
-
47
- rio('afile') > rio('acopy')
48
-
49
- ary = rio('afile').chomp.lines[0...10]
50
-
51
- rio('adir').rename.all.files('*.htm') do |file|
52
- file.ext = '.html'
53
- end
54
-
55
- A basic familiarity with ruby and shell operations should allow a
56
- casual reader to guess what these examples will do. How they are being
57
- performed may not be what a casual reader might expect. I will
58
- explain these example to illustrate the Rio basics.
59
-
60
- For many more examples please read the HOWTO document and the rdoc
61
- documentation.
62
-
63
- == Example 1.
64
-
65
- array = rio('afile').readlines
66
-
67
- This uses IO#readlines to read the lines of 'afile' into an array.
68
-
69
- === Creating a Rio
70
-
71
- Rio extends the module Kernel by adding one function +rio+, which acts
72
- as a constructor returning a Rio. This constructor builds a
73
- description of the resource the Rio will access (usually a path). It
74
- does not open the resource, check for its existance, or do anything
75
- except remember its specifcation. _rio_ returns the Rio which can be
76
- chained to a Rio method as in this example or stored in a
77
- variable. This coud have been written
78
-
79
- ario = rio('afile')
80
- array = ario.readlines
81
-
82
- ario = rio('afile')
83
-
84
- In this case the resource specified is a relative path. After the
85
- first line the Rio does know or care whether it is a path to a file
86
- nor whether it exists. Rio provides many methods that only deal with a
87
- resource at this level, much as the standard library classes Pathname
88
- and URI. It should be noted at this point that Rio paths stored
89
- internally as a URL as specified in RFC 1738 and therefore use slashes
90
- as separators. A resource can also be specified without separators,
91
- because _rio_ interprets multiple arguments as parts of a path to be
92
- joined, and an array as an array of parts to be joined. So the
93
- following all specify the same resource.
94
-
95
- rio('adir/afile')
96
- rio('adir','afile')
97
- rio(%w/adir afile/)
98
-
99
- The rio constructor can be used to specify non-file-system resources,
100
- but for this example we will restrict our discussion to paths to
101
- entities on file-systems.
102
-
103
- array = ario.readlines
104
-
105
- Now that we have a Rio, we can call one of its methods; in this case
106
- _readlines_. This is an example of using a Rio as a proxy for the
107
- builtin IO#readlines. Given the method _readlines_, the Rio opens
108
- 'afile' for reading, calls readlines on the resulting IO object,
109
- closes the IO object, and returns the lines read.
110
-
111
- == Example 2
112
-
113
- rio('afile') > rio('acopy')
114
-
115
- This copies the file 'afile' into the file 'acopy'.
116
-
117
- The first things that happen here are the creation of the Rios. As
118
- described in Example 1, when created a Rio simply remembers the
119
- specifcation of its resource. In this case, a relative path 'afile' on
120
- the left and a relative path 'acopy' on the right.
121
-
122
- Next the Rio#> (copy-to) method is called on the 'afile' Rio with the
123
- 'acopy' Rio as its argument. If that looks like a greater-than
124
- operator to you, think Unix shell, with Rios '>' is the copy-to
125
- operator.
126
-
127
- Upon seeing the copy-to operator, the Rio has all the information it
128
- needs to proceed. It determines that it must be opened for reading,
129
- that its argument must be opened for writing, and that it's contents
130
- must be copied to the resource referenced by it' argument -- and that
131
- is what it does. Then it closes itself and its argument.
132
-
133
- Consider if we had written this example this way.
134
-
135
- afile = rio('afile')
136
- acopy = rio('acopy')
137
- afile > acopy
138
-
139
- In this case we would still have variables referencing the Rios, and
140
- perhaps we would like do things a little differently than described
141
- above. Be assured that the selection of mode and automatic closing of
142
- files are the default behaviour and can be changed. Say we wanted
143
- 'afile' to remain open so that we could rewind it and make a second
144
- copy, we might do something like this:
145
-
146
- afile = rio('afile').nocloseoneof
147
- afile > rio('acopy1')
148
- afile.rewind > rio('acopy2')
149
- afile.close
150
-
151
- Actually the 'thinking process' of the Rio when it sees a copy-to
152
- operator is much more complex than that described above. If its
153
- argument had been a rio referencing a directory, it would not have
154
- opened itself for reading, but instead used FileUtils#cp to copy
155
- itself; if its argument had been a string, its contents would have
156
- ended up in the string; If its argument had been an array, its lines
157
- would been elements of that array; if its argument had been a socket,
158
- the its contents would have been copied to the socket. See the
159
- documentation for details.
160
-
161
- == Example 3.
162
-
163
- array = rio('afile').chomp.lines[0...10]
164
-
165
- This fills +array+ with the first ten lines of 'afile', with each line chomped
166
-
167
- The casual observer mentioned above might think that +lines+ returns an array of lines and that this
168
- is a simple rewording of <tt>array = rio('afile').readlines[0...10]</tt> or even of
169
- <tt>array = File.new('afile').readlines[0...10]</tt>. They would be wrong.
170
-
171
- +chomp+ is a configuration method which turns on chomp-mode and returns the Rio. Chomp-mode causes all
172
- line oriented read operations to perform a String#chomp on each line
173
-
174
- === Reading files
175
-
176
- Rio provides four methods to select which part of the file is read and
177
- how the file is divided. They are +lines+, +records+, +rows+ and
178
- +bytes+. Briefly, +lines+ specifies that the file should be read line
179
- by line and <tt>bytes(n)</tt> specifies that the file should be read
180
- in _n_ byte chunks. All four take arguments which can be used to
181
- filter lines or chunks in or out. For simple Rios +records+ and +rows+
182
- only specify the filter arguments and are provided for use be
183
- extensions. For example, the CSV extension returns an array of the
184
- columns in a line when +records+ is used. In the absence of an
185
- extension +records+ and +rows+ behave like +lines+.
186
-
187
- First lets rewrite our example as:
188
-
189
- array = rio('afile').chomp.lines(0...10).to_a
190
-
191
- The arguments to lines specify which records are to be read.
192
- Arguments are interpreted based on their class as follows:
193
- * Range - interpreted as a range of record numbers to be read
194
- * Integer - interpreted as a one-element range
195
- * RegExp - only matching records are processed
196
- * Symbol - sent to each record, which is processed unless the result is false or nil
197
- * Proc - called for each record, the record is processed unless the return value is false or nil
198
- See the documentation for details and examples.
199
-
200
- In our example we have specified the Range (0...10). The +lines+
201
- method is just configuring the Rio, it does not trigger any IO
202
- operation. The fact that it was called and the arguments it was called
203
- with are stored away and the Rio is returned for further configuration
204
- or an actual IO operation. When an IO operation is called the Range
205
- will be used to limit processing to the first ten records. For
206
- example:
207
-
208
- rio('afile').lines(0...10) { |line| ... } # block will be called for the first 10 records
209
- rio('afile').lines[0...10] # the first 10 records will be returned in an array
210
- rio('afile').lines(0...10) > rio('acopy') # the first 10 records will be copied to 'acopy'
211
-
212
- "But wait", you say, "In our original example the range was an
213
- argument to the subscript operator, not to +lines+". This works
214
- because the subscript operator processes its arguments as if they had
215
- been arguments to the most-recently-called selection method and then
216
- calls +to_a+ on the rio. So our rewrite of the example does precisely
217
- the same thing as the original
218
-
219
- The big difference between the original example and the
220
- casual-observer's solution is that hers creates an array of the entire
221
- contents and only returns the first 10 while the original only puts 10
222
- records into the array.
223
-
224
- As a sidenote, Rios also have an optimization that can really help in
225
- certain situations. If records are only selected using Ranges, it
226
- stops iterating when it is beyond the point where it could possibly
227
- ever match. This can make a dramatic difference when one is only
228
- interested in the first few lines of very large files.
229
-
230
- == Example 4.
231
-
232
- rio('adir').rename.all.files('*.htm') do |file|
233
- file.ext = '.html'
234
- end
235
-
236
- This changes the extension of all .htm files below 'adir' to '.html'
237
-
238
- First we create the rio as always.
239
-
240
- Next we process the +rename+ method. When used as it is here --
241
- without arguments -- it just turns on rename-mode and returns the Rio.
242
-
243
- +all+ is another configuration method, which causes directories to be
244
- processed recursively
245
-
246
- +files+ is another configuration method. In example 3 we used +lines+
247
- to select what to process when iterating through a file. +files+ is
248
- used to select what to process when iterating through directories. The
249
- arguments to +files+ can be the same as those for +lines+ except that
250
- Ranges can not be used and globs can.
251
-
252
- In our example, the argument to +files+ is a string which is treated
253
- as a glob. As with +lines+, +files+ does not trigger any IO, it just
254
- configures the Rio.
255
-
256
- === There's no action
257
-
258
- The previous examples had something that triggered IO: +readlines+,
259
- +to_a+, +each+, <tt>> (copy-to)</tt>. This example does not. This
260
- example illustrates Rio's 'implied each'. All the configuration
261
- methods will call each for you if a block is given. So, because a
262
- block follows the +files+ method, it calls +each+ and passes it the
263
- block.
264
-
265
- Let's recap. At this point we have a Rio with a resource specified. We
266
- have configured with a couple of modes, 'rename', and 'all', and we
267
- have limited the elements we want to process to entries that are files
268
- and match the glob '*.htm'. +each+ causes the Rio to open the
269
- directory and call the block for each entry that is both a file and
270
- matches the glob. It was also configured with +all+,so it descends
271
- into subdirectories to find further matches and calles the block for
272
- each of them. The argument passed to the block is a Rio referencing
273
- the entry on the file-system.
274
-
275
- The _rename_mode_ we set has had no effect on our iteration at all, so why is it there? In general,
276
- configuration options that are not applicable to a Rio are silently ignored, however, for directories
277
- some of them are passed on to the Rios for each entry when iterating. Since +rename+ is one such option,
278
- The example could have been written:
279
-
280
- rio('adir').all.files('*.htm') do |file|
281
- file.rename.ext = '.html'
282
- end
283
-
284
- The rename-with-no-args method affects the behaviour of the <tt>ext=</tt> option. In this case,
285
- setting it for the directory, rather than for each file in the block seems to make the intent
286
- of the code more clear, but that is a matter of personal taste. See the documentation for more
287
- information on the rename-with-no-args method
288
28
 
289
- == Suggested Reading
290
- * RIO::Doc::SYNOPSIS
291
- * RIO::Doc::INTRO
292
- * RIO::Doc::HOWTO
293
- * RIO::Rio
29
+ ##
30
+ #
31
+ # The following examples are provided without comment
32
+ #
33
+ # array = rio('afile').readlines
34
+ #
35
+ # rio('afile') > rio('acopy')
36
+ #
37
+ # ary = rio('afile').chomp.lines[0...10]
38
+ #
39
+ # rio('adir').rename.all.files('*.htm') do |file|
40
+ # file.ext = '.html'
41
+ # end
42
+ #
43
+ # A basic familiarity with ruby and shell operations should allow a
44
+ # casual reader to guess what these examples will do. How they are being
45
+ # performed may not be what a casual reader might expect. I will
46
+ # explain these example to illustrate the Rio basics.
47
+ #
48
+ # For many more examples please read the HOWTO document and the rdoc
49
+ # documentation.
50
+ #
51
+ # == Example 1.
52
+ #
53
+ # array = rio('afile').readlines
54
+ #
55
+ # This uses IO#readlines to read the lines of 'afile' into an array.
56
+ #
57
+ # === Creating a Rio
58
+ #
59
+ # Rio extends the module Kernel by adding one function +rio+, which acts
60
+ # as a constructor returning a Rio. This constructor builds a
61
+ # description of the resource the Rio will access (usually a path). It
62
+ # does not open the resource, check for its existance, or do anything
63
+ # except remember its specifcation. _rio_ returns the Rio which can be
64
+ # chained to a Rio method as in this example or stored in a
65
+ # variable. This coud have been written
66
+ #
67
+ # ario = rio('afile')
68
+ # array = ario.readlines
69
+ #
70
+ # ario = rio('afile')
71
+ #
72
+ # In this case the resource specified is a relative path. After the
73
+ # first line the Rio does know or care whether it is a path to a file
74
+ # nor whether it exists. Rio provides many methods that only deal with a
75
+ # resource at this level, much as the standard library classes Pathname
76
+ # and URI. It should be noted at this point that Rio paths stored
77
+ # internally as a URL as specified in RFC 1738 and therefore use slashes
78
+ # as separators. A resource can also be specified without separators,
79
+ # because _rio_ interprets multiple arguments as parts of a path to be
80
+ # joined, and an array as an array of parts to be joined. So the
81
+ # following all specify the same resource.
82
+ #
83
+ # rio('adir/afile')
84
+ # rio('adir','afile')
85
+ # rio(%w/adir afile/)
86
+ #
87
+ # The rio constructor can be used to specify non-file-system resources,
88
+ # but for this example we will restrict our discussion to paths to
89
+ # entities on file-systems.
90
+ #
91
+ # array = ario.readlines
92
+ #
93
+ # Now that we have a Rio, we can call one of its methods; in this case
94
+ # _readlines_. This is an example of using a Rio as a proxy for the
95
+ # builtin IO#readlines. Given the method _readlines_, the Rio opens
96
+ # 'afile' for reading, calls readlines on the resulting IO object,
97
+ # closes the IO object, and returns the lines read.
98
+ #
99
+ # == Example 2
100
+ #
101
+ # rio('afile') > rio('acopy')
102
+ #
103
+ # This copies the file 'afile' into the file 'acopy'.
104
+ #
105
+ # The first things that happen here are the creation of the Rios. As
106
+ # described in Example 1, when created a Rio simply remembers the
107
+ # specifcation of its resource. In this case, a relative path 'afile' on
108
+ # the left and a relative path 'acopy' on the right.
109
+ #
110
+ # Next the Rio#> (copy-to) method is called on the 'afile' Rio with the
111
+ # 'acopy' Rio as its argument. If that looks like a greater-than
112
+ # operator to you, think Unix shell, with Rios '>' is the copy-to
113
+ # operator.
114
+ #
115
+ # Upon seeing the copy-to operator, the Rio has all the information it
116
+ # needs to proceed. It determines that it must be opened for reading,
117
+ # that its argument must be opened for writing, and that it's contents
118
+ # must be copied to the resource referenced by it' argument -- and that
119
+ # is what it does. Then it closes itself and its argument.
120
+ #
121
+ # Consider if we had written this example this way.
122
+ #
123
+ # afile = rio('afile')
124
+ # acopy = rio('acopy')
125
+ # afile > acopy
126
+ #
127
+ # In this case we would still have variables referencing the Rios, and
128
+ # perhaps we would like do things a little differently than described
129
+ # above. Be assured that the selection of mode and automatic closing of
130
+ # files are the default behaviour and can be changed. Say we wanted
131
+ # 'afile' to remain open so that we could rewind it and make a second
132
+ # copy, we might do something like this:
133
+ #
134
+ # afile = rio('afile').nocloseoneof
135
+ # afile > rio('acopy1')
136
+ # afile.rewind > rio('acopy2')
137
+ # afile.close
138
+ #
139
+ # Actually the 'thinking process' of the Rio when it sees a copy-to
140
+ # operator is much more complex than that described above. If its
141
+ # argument had been a rio referencing a directory, it would not have
142
+ # opened itself for reading, but instead used FileUtils#cp to copy
143
+ # itself; if its argument had been a string, its contents would have
144
+ # ended up in the string; If its argument had been an array, its lines
145
+ # would been elements of that array; if its argument had been a socket,
146
+ # the its contents would have been copied to the socket. See the
147
+ # documentation for details.
148
+ #
149
+ # == Example 3.
150
+ #
151
+ # array = rio('afile').chomp.lines[0...10]
152
+ #
153
+ # This fills +array+ with the first ten lines of 'afile', with each line chomped
154
+ #
155
+ # The casual observer mentioned above might think that +lines+ returns an array of lines and that this
156
+ # is a simple rewording of <tt>array = rio('afile').readlines[0...10]</tt> or even of
157
+ # <tt>array = File.new('afile').readlines[0...10]</tt>. They would be wrong.
158
+ #
159
+ # +chomp+ is a configuration method which turns on chomp-mode and returns the Rio. Chomp-mode causes all
160
+ # line oriented read operations to perform a String#chomp on each line
161
+ #
162
+ # === Reading files
163
+ #
164
+ # Rio provides four methods to select which part of the file is read and
165
+ # how the file is divided. They are +lines+, +records+, +rows+ and
166
+ # +bytes+. Briefly, +lines+ specifies that the file should be read line
167
+ # by line and <tt>bytes(n)</tt> specifies that the file should be read
168
+ # in _n_ byte chunks. All four take arguments which can be used to
169
+ # filter lines or chunks in or out. For simple Rios +records+ and +rows+
170
+ # only specify the filter arguments and are provided for use be
171
+ # extensions. For example, the CSV extension returns an array of the
172
+ # columns in a line when +records+ is used. In the absence of an
173
+ # extension +records+ and +rows+ behave like +lines+.
174
+ #
175
+ # First lets rewrite our example as:
176
+ #
177
+ # array = rio('afile').chomp.lines(0...10).to_a
178
+ #
179
+ # The arguments to lines specify which records are to be read.
180
+ # Arguments are interpreted based on their class as follows:
181
+ # * Range - interpreted as a range of record numbers to be read
182
+ # * Integer - interpreted as a one-element range
183
+ # * RegExp - only matching records are processed
184
+ # * Symbol - sent to each record, which is processed unless the result is false or nil
185
+ # * Proc - called for each record, the record is processed unless the return value is false or nil
186
+ # See the documentation for details and examples.
187
+ #
188
+ # In our example we have specified the Range (0...10). The +lines+
189
+ # method is just configuring the Rio, it does not trigger any IO
190
+ # operation. The fact that it was called and the arguments it was called
191
+ # with are stored away and the Rio is returned for further configuration
192
+ # or an actual IO operation. When an IO operation is called the Range
193
+ # will be used to limit processing to the first ten records. For
194
+ # example:
195
+ #
196
+ # rio('afile').lines(0...10) { |line| ... } # block will be called for the first 10 records
197
+ # rio('afile').lines[0...10] # the first 10 records will be returned in an array
198
+ # rio('afile').lines(0...10) > rio('acopy') # the first 10 records will be copied to 'acopy'
199
+ #
200
+ # "But wait", you say, "In our original example the range was an
201
+ # argument to the subscript operator, not to +lines+". This works
202
+ # because the subscript operator processes its arguments as if they had
203
+ # been arguments to the most-recently-called selection method and then
204
+ # calls +to_a+ on the rio. So our rewrite of the example does precisely
205
+ # the same thing as the original
206
+ #
207
+ # The big difference between the original example and the
208
+ # casual-observer's solution is that hers creates an array of the entire
209
+ # contents and only returns the first 10 while the original only puts 10
210
+ # records into the array.
211
+ #
212
+ # As a sidenote, Rios also have an optimization that can really help in
213
+ # certain situations. If records are only selected using Ranges, it
214
+ # stops iterating when it is beyond the point where it could possibly
215
+ # ever match. This can make a dramatic difference when one is only
216
+ # interested in the first few lines of very large files.
217
+ #
218
+ # == Example 4.
219
+ #
220
+ # rio('adir').rename.all.files('*.htm') do |file|
221
+ # file.ext = '.html'
222
+ # end
223
+ #
224
+ # This changes the extension of all .htm files below 'adir' to '.html'
225
+ #
226
+ # First we create the rio as always.
227
+ #
228
+ # Next we process the +rename+ method. When used as it is here --
229
+ # without arguments -- it just turns on rename-mode and returns the Rio.
230
+ #
231
+ # +all+ is another configuration method, which causes directories to be
232
+ # processed recursively
233
+ #
234
+ # +files+ is another configuration method. In example 3 we used +lines+
235
+ # to select what to process when iterating through a file. +files+ is
236
+ # used to select what to process when iterating through directories. The
237
+ # arguments to +files+ can be the same as those for +lines+ except that
238
+ # Ranges can not be used and globs can.
239
+ #
240
+ # In our example, the argument to +files+ is a string which is treated
241
+ # as a glob. As with +lines+, +files+ does not trigger any IO, it just
242
+ # configures the Rio.
243
+ #
244
+ # === There's no action
245
+ #
246
+ # The previous examples had something that triggered IO: +readlines+,
247
+ # +to_a+, +each+, <tt>> (copy-to)</tt>. This example does not. This
248
+ # example illustrates Rio's 'implied each'. All the configuration
249
+ # methods will call each for you if a block is given. So, because a
250
+ # block follows the +files+ method, it calls +each+ and passes it the
251
+ # block.
252
+ #
253
+ # Let's recap. At this point we have a Rio with a resource specified. We
254
+ # have configured with a couple of modes, 'rename', and 'all', and we
255
+ # have limited the elements we want to process to entries that are files
256
+ # and match the glob '*.htm'. +each+ causes the Rio to open the
257
+ # directory and call the block for each entry that is both a file and
258
+ # matches the glob. It was also configured with +all+,so it descends
259
+ # into subdirectories to find further matches and calles the block for
260
+ # each of them. The argument passed to the block is a Rio referencing
261
+ # the entry on the file-system.
262
+ #
263
+ # The _rename_mode_ we set has had no effect on our iteration at all, so why is it there? In general,
264
+ # configuration options that are not applicable to a Rio are silently ignored, however, for directories
265
+ # some of them are passed on to the Rios for each entry when iterating. Since +rename+ is one such option,
266
+ # The example could have been written:
267
+ #
268
+ # rio('adir').all.files('*.htm') do |file|
269
+ # file.rename.ext = '.html'
270
+ # end
271
+ #
272
+ # The rename-with-no-args method affects the behaviour of the <tt>ext=</tt> option. In this case,
273
+ # setting it for the directory, rather than for each file in the block seems to make the intent
274
+ # of the code more clear, but that is a matter of personal taste. See the documentation for more
275
+ # information on the rename-with-no-args method
276
+ #
277
+ # == Suggested Reading
278
+ # * RIO::Doc::SYNOPSIS
279
+ # * RIO::Doc::INTRO
280
+ # * RIO::Doc::HOWTO
281
+ # * RIO::Rio
294
282
 
295
- =end
296
283
  module EXAMPLES
297
284
  end
298
285
  end