rio 0.3.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 (395) hide show
  1. data/COPYING +340 -0
  2. data/ChangeLog +755 -0
  3. data/README +65 -0
  4. data/RUNME.1st.rb +75 -0
  5. data/Rakefile +312 -0
  6. data/VERSION +1 -0
  7. data/doc/README_MSWIN32.txt +39 -0
  8. data/doc/RELEASE_NOTES +130 -0
  9. data/doc/generators/template/html/rio.rb +895 -0
  10. data/doc/rdoc/classes/Kernel.html +181 -0
  11. data/doc/rdoc/classes/Kernel.src/M000183.html +18 -0
  12. data/doc/rdoc/classes/RIO.html +508 -0
  13. data/doc/rdoc/classes/RIO.src/M000001.html +18 -0
  14. data/doc/rdoc/classes/RIO.src/M000002.html +18 -0
  15. data/doc/rdoc/classes/RIO.src/M000003.html +18 -0
  16. data/doc/rdoc/classes/RIO/Doc.html +138 -0
  17. data/doc/rdoc/classes/RIO/Doc/HOWTO.html +1031 -0
  18. data/doc/rdoc/classes/RIO/Doc/INTRO.html +1116 -0
  19. data/doc/rdoc/classes/RIO/Doc/MISC.html +443 -0
  20. data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +325 -0
  21. data/doc/rdoc/classes/RIO/Rio.html +6333 -0
  22. data/doc/rdoc/classes/RIO/Rio.src/M000004.html +18 -0
  23. data/doc/rdoc/classes/RIO/Rio.src/M000005.html +20 -0
  24. data/doc/rdoc/classes/RIO/Rio.src/M000006.html +27 -0
  25. data/doc/rdoc/classes/RIO/Rio.src/M000007.html +27 -0
  26. data/doc/rdoc/classes/RIO/Rio.src/M000008.html +16 -0
  27. data/doc/rdoc/classes/RIO/Rio.src/M000009.html +18 -0
  28. data/doc/rdoc/classes/RIO/Rio.src/M000010.html +20 -0
  29. data/doc/rdoc/classes/RIO/Rio.src/M000011.html +16 -0
  30. data/doc/rdoc/classes/RIO/Rio.src/M000012.html +16 -0
  31. data/doc/rdoc/classes/RIO/Rio.src/M000013.html +16 -0
  32. data/doc/rdoc/classes/RIO/Rio.src/M000014.html +16 -0
  33. data/doc/rdoc/classes/RIO/Rio.src/M000015.html +16 -0
  34. data/doc/rdoc/classes/RIO/Rio.src/M000016.html +16 -0
  35. data/doc/rdoc/classes/RIO/Rio.src/M000017.html +16 -0
  36. data/doc/rdoc/classes/RIO/Rio.src/M000018.html +16 -0
  37. data/doc/rdoc/classes/RIO/Rio.src/M000019.html +16 -0
  38. data/doc/rdoc/classes/RIO/Rio.src/M000020.html +16 -0
  39. data/doc/rdoc/classes/RIO/Rio.src/M000021.html +16 -0
  40. data/doc/rdoc/classes/RIO/Rio.src/M000022.html +16 -0
  41. data/doc/rdoc/classes/RIO/Rio.src/M000023.html +16 -0
  42. data/doc/rdoc/classes/RIO/Rio.src/M000024.html +16 -0
  43. data/doc/rdoc/classes/RIO/Rio.src/M000025.html +16 -0
  44. data/doc/rdoc/classes/RIO/Rio.src/M000026.html +16 -0
  45. data/doc/rdoc/classes/RIO/Rio.src/M000027.html +16 -0
  46. data/doc/rdoc/classes/RIO/Rio.src/M000028.html +16 -0
  47. data/doc/rdoc/classes/RIO/Rio.src/M000029.html +16 -0
  48. data/doc/rdoc/classes/RIO/Rio.src/M000030.html +16 -0
  49. data/doc/rdoc/classes/RIO/Rio.src/M000031.html +16 -0
  50. data/doc/rdoc/classes/RIO/Rio.src/M000032.html +16 -0
  51. data/doc/rdoc/classes/RIO/Rio.src/M000033.html +16 -0
  52. data/doc/rdoc/classes/RIO/Rio.src/M000034.html +16 -0
  53. data/doc/rdoc/classes/RIO/Rio.src/M000035.html +16 -0
  54. data/doc/rdoc/classes/RIO/Rio.src/M000036.html +16 -0
  55. data/doc/rdoc/classes/RIO/Rio.src/M000037.html +16 -0
  56. data/doc/rdoc/classes/RIO/Rio.src/M000038.html +16 -0
  57. data/doc/rdoc/classes/RIO/Rio.src/M000039.html +16 -0
  58. data/doc/rdoc/classes/RIO/Rio.src/M000040.html +16 -0
  59. data/doc/rdoc/classes/RIO/Rio.src/M000041.html +16 -0
  60. data/doc/rdoc/classes/RIO/Rio.src/M000042.html +16 -0
  61. data/doc/rdoc/classes/RIO/Rio.src/M000043.html +16 -0
  62. data/doc/rdoc/classes/RIO/Rio.src/M000044.html +16 -0
  63. data/doc/rdoc/classes/RIO/Rio.src/M000045.html +16 -0
  64. data/doc/rdoc/classes/RIO/Rio.src/M000046.html +16 -0
  65. data/doc/rdoc/classes/RIO/Rio.src/M000047.html +16 -0
  66. data/doc/rdoc/classes/RIO/Rio.src/M000048.html +16 -0
  67. data/doc/rdoc/classes/RIO/Rio.src/M000049.html +16 -0
  68. data/doc/rdoc/classes/RIO/Rio.src/M000050.html +16 -0
  69. data/doc/rdoc/classes/RIO/Rio.src/M000051.html +16 -0
  70. data/doc/rdoc/classes/RIO/Rio.src/M000052.html +16 -0
  71. data/doc/rdoc/classes/RIO/Rio.src/M000053.html +16 -0
  72. data/doc/rdoc/classes/RIO/Rio.src/M000054.html +16 -0
  73. data/doc/rdoc/classes/RIO/Rio.src/M000055.html +16 -0
  74. data/doc/rdoc/classes/RIO/Rio.src/M000056.html +16 -0
  75. data/doc/rdoc/classes/RIO/Rio.src/M000057.html +16 -0
  76. data/doc/rdoc/classes/RIO/Rio.src/M000058.html +16 -0
  77. data/doc/rdoc/classes/RIO/Rio.src/M000059.html +16 -0
  78. data/doc/rdoc/classes/RIO/Rio.src/M000060.html +16 -0
  79. data/doc/rdoc/classes/RIO/Rio.src/M000061.html +16 -0
  80. data/doc/rdoc/classes/RIO/Rio.src/M000062.html +16 -0
  81. data/doc/rdoc/classes/RIO/Rio.src/M000063.html +16 -0
  82. data/doc/rdoc/classes/RIO/Rio.src/M000064.html +16 -0
  83. data/doc/rdoc/classes/RIO/Rio.src/M000065.html +16 -0
  84. data/doc/rdoc/classes/RIO/Rio.src/M000066.html +16 -0
  85. data/doc/rdoc/classes/RIO/Rio.src/M000067.html +16 -0
  86. data/doc/rdoc/classes/RIO/Rio.src/M000068.html +16 -0
  87. data/doc/rdoc/classes/RIO/Rio.src/M000069.html +16 -0
  88. data/doc/rdoc/classes/RIO/Rio.src/M000070.html +16 -0
  89. data/doc/rdoc/classes/RIO/Rio.src/M000071.html +16 -0
  90. data/doc/rdoc/classes/RIO/Rio.src/M000072.html +16 -0
  91. data/doc/rdoc/classes/RIO/Rio.src/M000073.html +16 -0
  92. data/doc/rdoc/classes/RIO/Rio.src/M000074.html +16 -0
  93. data/doc/rdoc/classes/RIO/Rio.src/M000075.html +16 -0
  94. data/doc/rdoc/classes/RIO/Rio.src/M000076.html +16 -0
  95. data/doc/rdoc/classes/RIO/Rio.src/M000077.html +16 -0
  96. data/doc/rdoc/classes/RIO/Rio.src/M000078.html +16 -0
  97. data/doc/rdoc/classes/RIO/Rio.src/M000079.html +16 -0
  98. data/doc/rdoc/classes/RIO/Rio.src/M000080.html +16 -0
  99. data/doc/rdoc/classes/RIO/Rio.src/M000081.html +16 -0
  100. data/doc/rdoc/classes/RIO/Rio.src/M000082.html +16 -0
  101. data/doc/rdoc/classes/RIO/Rio.src/M000083.html +16 -0
  102. data/doc/rdoc/classes/RIO/Rio.src/M000084.html +16 -0
  103. data/doc/rdoc/classes/RIO/Rio.src/M000085.html +16 -0
  104. data/doc/rdoc/classes/RIO/Rio.src/M000086.html +16 -0
  105. data/doc/rdoc/classes/RIO/Rio.src/M000087.html +16 -0
  106. data/doc/rdoc/classes/RIO/Rio.src/M000088.html +16 -0
  107. data/doc/rdoc/classes/RIO/Rio.src/M000089.html +16 -0
  108. data/doc/rdoc/classes/RIO/Rio.src/M000090.html +16 -0
  109. data/doc/rdoc/classes/RIO/Rio.src/M000091.html +16 -0
  110. data/doc/rdoc/classes/RIO/Rio.src/M000092.html +16 -0
  111. data/doc/rdoc/classes/RIO/Rio.src/M000093.html +16 -0
  112. data/doc/rdoc/classes/RIO/Rio.src/M000094.html +16 -0
  113. data/doc/rdoc/classes/RIO/Rio.src/M000095.html +16 -0
  114. data/doc/rdoc/classes/RIO/Rio.src/M000096.html +16 -0
  115. data/doc/rdoc/classes/RIO/Rio.src/M000097.html +16 -0
  116. data/doc/rdoc/classes/RIO/Rio.src/M000098.html +16 -0
  117. data/doc/rdoc/classes/RIO/Rio.src/M000099.html +16 -0
  118. data/doc/rdoc/classes/RIO/Rio.src/M000100.html +16 -0
  119. data/doc/rdoc/classes/RIO/Rio.src/M000101.html +16 -0
  120. data/doc/rdoc/classes/RIO/Rio.src/M000102.html +16 -0
  121. data/doc/rdoc/classes/RIO/Rio.src/M000103.html +16 -0
  122. data/doc/rdoc/classes/RIO/Rio.src/M000104.html +16 -0
  123. data/doc/rdoc/classes/RIO/Rio.src/M000105.html +16 -0
  124. data/doc/rdoc/classes/RIO/Rio.src/M000106.html +16 -0
  125. data/doc/rdoc/classes/RIO/Rio.src/M000107.html +16 -0
  126. data/doc/rdoc/classes/RIO/Rio.src/M000108.html +16 -0
  127. data/doc/rdoc/classes/RIO/Rio.src/M000109.html +16 -0
  128. data/doc/rdoc/classes/RIO/Rio.src/M000110.html +16 -0
  129. data/doc/rdoc/classes/RIO/Rio.src/M000111.html +16 -0
  130. data/doc/rdoc/classes/RIO/Rio.src/M000112.html +16 -0
  131. data/doc/rdoc/classes/RIO/Rio.src/M000113.html +16 -0
  132. data/doc/rdoc/classes/RIO/Rio.src/M000114.html +16 -0
  133. data/doc/rdoc/classes/RIO/Rio.src/M000115.html +16 -0
  134. data/doc/rdoc/classes/RIO/Rio.src/M000116.html +16 -0
  135. data/doc/rdoc/classes/RIO/Rio.src/M000117.html +16 -0
  136. data/doc/rdoc/classes/RIO/Rio.src/M000118.html +16 -0
  137. data/doc/rdoc/classes/RIO/Rio.src/M000119.html +16 -0
  138. data/doc/rdoc/classes/RIO/Rio.src/M000120.html +16 -0
  139. data/doc/rdoc/classes/RIO/Rio.src/M000121.html +16 -0
  140. data/doc/rdoc/classes/RIO/Rio.src/M000122.html +16 -0
  141. data/doc/rdoc/classes/RIO/Rio.src/M000123.html +16 -0
  142. data/doc/rdoc/classes/RIO/Rio.src/M000124.html +16 -0
  143. data/doc/rdoc/classes/RIO/Rio.src/M000125.html +16 -0
  144. data/doc/rdoc/classes/RIO/Rio.src/M000126.html +16 -0
  145. data/doc/rdoc/classes/RIO/Rio.src/M000127.html +16 -0
  146. data/doc/rdoc/classes/RIO/Rio.src/M000128.html +16 -0
  147. data/doc/rdoc/classes/RIO/Rio.src/M000129.html +16 -0
  148. data/doc/rdoc/classes/RIO/Rio.src/M000130.html +16 -0
  149. data/doc/rdoc/classes/RIO/Rio.src/M000131.html +16 -0
  150. data/doc/rdoc/classes/RIO/Rio.src/M000132.html +16 -0
  151. data/doc/rdoc/classes/RIO/Rio.src/M000133.html +16 -0
  152. data/doc/rdoc/classes/RIO/Rio.src/M000134.html +16 -0
  153. data/doc/rdoc/classes/RIO/Rio.src/M000135.html +16 -0
  154. data/doc/rdoc/classes/RIO/Rio.src/M000136.html +16 -0
  155. data/doc/rdoc/classes/RIO/Rio.src/M000137.html +16 -0
  156. data/doc/rdoc/classes/RIO/Rio.src/M000138.html +16 -0
  157. data/doc/rdoc/classes/RIO/Rio.src/M000139.html +16 -0
  158. data/doc/rdoc/classes/RIO/Rio.src/M000140.html +16 -0
  159. data/doc/rdoc/classes/RIO/Rio.src/M000141.html +16 -0
  160. data/doc/rdoc/classes/RIO/Rio.src/M000142.html +16 -0
  161. data/doc/rdoc/classes/RIO/Rio.src/M000143.html +16 -0
  162. data/doc/rdoc/classes/RIO/Rio.src/M000144.html +16 -0
  163. data/doc/rdoc/classes/RIO/Rio.src/M000145.html +16 -0
  164. data/doc/rdoc/classes/RIO/Rio.src/M000146.html +16 -0
  165. data/doc/rdoc/classes/RIO/Rio.src/M000147.html +16 -0
  166. data/doc/rdoc/classes/RIO/Rio.src/M000148.html +16 -0
  167. data/doc/rdoc/classes/RIO/Rio.src/M000149.html +16 -0
  168. data/doc/rdoc/classes/RIO/Rio.src/M000150.html +16 -0
  169. data/doc/rdoc/classes/RIO/Rio.src/M000151.html +16 -0
  170. data/doc/rdoc/classes/RIO/Rio.src/M000152.html +16 -0
  171. data/doc/rdoc/classes/RIO/Rio.src/M000153.html +16 -0
  172. data/doc/rdoc/classes/RIO/Rio.src/M000154.html +16 -0
  173. data/doc/rdoc/classes/RIO/Rio.src/M000155.html +16 -0
  174. data/doc/rdoc/classes/RIO/Rio.src/M000156.html +16 -0
  175. data/doc/rdoc/classes/RIO/Rio.src/M000157.html +16 -0
  176. data/doc/rdoc/classes/RIO/Rio.src/M000158.html +16 -0
  177. data/doc/rdoc/classes/RIO/Rio.src/M000159.html +16 -0
  178. data/doc/rdoc/classes/RIO/Rio.src/M000160.html +16 -0
  179. data/doc/rdoc/classes/RIO/Rio.src/M000161.html +16 -0
  180. data/doc/rdoc/classes/RIO/Rio.src/M000162.html +16 -0
  181. data/doc/rdoc/classes/RIO/Rio.src/M000163.html +16 -0
  182. data/doc/rdoc/classes/RIO/Rio.src/M000164.html +16 -0
  183. data/doc/rdoc/classes/RIO/Rio.src/M000165.html +16 -0
  184. data/doc/rdoc/classes/RIO/Rio.src/M000166.html +16 -0
  185. data/doc/rdoc/classes/RIO/Rio.src/M000167.html +16 -0
  186. data/doc/rdoc/classes/RIO/Rio.src/M000168.html +16 -0
  187. data/doc/rdoc/classes/RIO/Rio.src/M000169.html +16 -0
  188. data/doc/rdoc/classes/RIO/Rio.src/M000170.html +16 -0
  189. data/doc/rdoc/classes/RIO/Rio.src/M000171.html +16 -0
  190. data/doc/rdoc/classes/RIO/Rio.src/M000172.html +16 -0
  191. data/doc/rdoc/classes/RIO/Rio.src/M000173.html +16 -0
  192. data/doc/rdoc/classes/RIO/Rio.src/M000174.html +16 -0
  193. data/doc/rdoc/classes/RIO/Rio.src/M000175.html +16 -0
  194. data/doc/rdoc/classes/RIO/Rio.src/M000176.html +16 -0
  195. data/doc/rdoc/classes/RIO/Rio.src/M000177.html +16 -0
  196. data/doc/rdoc/classes/RIO/Rio.src/M000178.html +16 -0
  197. data/doc/rdoc/classes/RIO/Rio.src/M000179.html +16 -0
  198. data/doc/rdoc/classes/RIO/Rio.src/M000180.html +16 -0
  199. data/doc/rdoc/classes/RIO/Rio.src/M000181.html +16 -0
  200. data/doc/rdoc/classes/RIO/Rio.src/M000182.html +16 -0
  201. data/doc/rdoc/created.rid +1 -0
  202. data/doc/rdoc/files/README.html +215 -0
  203. data/doc/rdoc/files/lib/rio/constructor_rb.html +142 -0
  204. data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +135 -0
  205. data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +135 -0
  206. data/doc/rdoc/files/lib/rio/doc/MISC_rb.html +135 -0
  207. data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +135 -0
  208. data/doc/rdoc/files/lib/rio/if/basic_rb.html +135 -0
  209. data/doc/rdoc/files/lib/rio/if/dir_rb.html +135 -0
  210. data/doc/rdoc/files/lib/rio/if/file_rb.html +135 -0
  211. data/doc/rdoc/files/lib/rio/if/fileordir_rb.html +135 -0
  212. data/doc/rdoc/files/lib/rio/if/grande_rb.html +135 -0
  213. data/doc/rdoc/files/lib/rio/if/internal_rb.html +135 -0
  214. data/doc/rdoc/files/lib/rio/if/methods_rb.html +135 -0
  215. data/doc/rdoc/files/lib/rio/if/path_rb.html +135 -0
  216. data/doc/rdoc/files/lib/rio/if/stream_rb.html +135 -0
  217. data/doc/rdoc/files/lib/rio/if/test_rb.html +135 -0
  218. data/doc/rdoc/files/lib/rio/kernel_rb.html +142 -0
  219. data/doc/rdoc/files/lib/rio_rb.html +153 -0
  220. data/doc/rdoc/fr_class_index.html +34 -0
  221. data/doc/rdoc/fr_file_index.html +44 -0
  222. data/doc/rdoc/fr_method_index.html +210 -0
  223. data/doc/rdoc/index.html +24 -0
  224. data/doc/rdoc/rdoc-style.css +384 -0
  225. data/doc/rfc1738.txt +1403 -0
  226. data/doc/rfc959.txt +3933 -0
  227. data/ex/colx.rb +6 -0
  228. data/ex/findinruby +19 -0
  229. data/ex/findruby +11 -0
  230. data/ex/prompt.rb +25 -0
  231. data/ex/rgb.txt.gz +0 -0
  232. data/ex/riocat +35 -0
  233. data/ex/riogunzip +31 -0
  234. data/ex/riogzip +24 -0
  235. data/ex/tolf +11 -0
  236. data/lib/rio.rb +163 -0
  237. data/lib/rio/abstract_method.rb +57 -0
  238. data/lib/rio/argv.rb +57 -0
  239. data/lib/rio/arrayio.rb +199 -0
  240. data/lib/rio/arycopy.rb +44 -0
  241. data/lib/rio/assert.rb +115 -0
  242. data/lib/rio/base.rb +59 -0
  243. data/lib/rio/constructor.rb +183 -0
  244. data/lib/rio/context.rb +117 -0
  245. data/lib/rio/context/chomp.rb +53 -0
  246. data/lib/rio/context/closeoneof.rb +50 -0
  247. data/lib/rio/context/cxx.rb +67 -0
  248. data/lib/rio/context/dir.rb +92 -0
  249. data/lib/rio/context/gzip.rb +51 -0
  250. data/lib/rio/context/methods.rb +196 -0
  251. data/lib/rio/context/stream.rb +170 -0
  252. data/lib/rio/cp.rb +305 -0
  253. data/lib/rio/cxdir.rb +79 -0
  254. data/lib/rio/dir.rb +145 -0
  255. data/lib/rio/doc.rb +45 -0
  256. data/lib/rio/doc/HOWTO.rb +691 -0
  257. data/lib/rio/doc/INTRO.rb +579 -0
  258. data/lib/rio/doc/MISC.rb +257 -0
  259. data/lib/rio/doc/SYNOPSIS.rb +170 -0
  260. data/lib/rio/entrysel.rb +162 -0
  261. data/lib/rio/exception.rb +42 -0
  262. data/lib/rio/exception/copy.rb +98 -0
  263. data/lib/rio/exception/open.rb +62 -0
  264. data/lib/rio/exception/state.rb +74 -0
  265. data/lib/rio/ext.rb +62 -0
  266. data/lib/rio/ext/csv.rb +261 -0
  267. data/lib/rio/factory.rb +236 -0
  268. data/lib/rio/file.rb +77 -0
  269. data/lib/rio/filter/chomp.rb +61 -0
  270. data/lib/rio/filter/closeoneof.rb +103 -0
  271. data/lib/rio/filter/gzip.rb +58 -0
  272. data/lib/rio/ftp.rb +275 -0
  273. data/lib/rio/ftp/conn.rb +167 -0
  274. data/lib/rio/ftp/ioh.rb +88 -0
  275. data/lib/rio/grande.rb +126 -0
  276. data/lib/rio/handle.rb +101 -0
  277. data/lib/rio/if.rb +53 -0
  278. data/lib/rio/if/basic.rb +64 -0
  279. data/lib/rio/if/dir.rb +362 -0
  280. data/lib/rio/if/file.rb +57 -0
  281. data/lib/rio/if/fileordir.rb +247 -0
  282. data/lib/rio/if/grande.rb +510 -0
  283. data/lib/rio/if/internal.rb +53 -0
  284. data/lib/rio/if/methods.rb +612 -0
  285. data/lib/rio/if/path.rb +413 -0
  286. data/lib/rio/if/stream.rb +599 -0
  287. data/lib/rio/if/test.rb +219 -0
  288. data/lib/rio/impl/path.rb +82 -0
  289. data/lib/rio/ioh.rb +137 -0
  290. data/lib/rio/iomode.rb +96 -0
  291. data/lib/rio/kernel.rb +47 -0
  292. data/lib/rio/local.rb +63 -0
  293. data/lib/rio/match.rb +51 -0
  294. data/lib/rio/matchrecord.rb +254 -0
  295. data/lib/rio/open3.rb +69 -0
  296. data/lib/rio/ops/create.rb +78 -0
  297. data/lib/rio/ops/dir.rb +302 -0
  298. data/lib/rio/ops/either.rb +117 -0
  299. data/lib/rio/ops/file.rb +94 -0
  300. data/lib/rio/ops/path.rb +292 -0
  301. data/lib/rio/ops/stream.rb +84 -0
  302. data/lib/rio/ops/stream/input.rb +237 -0
  303. data/lib/rio/ops/stream/output.rb +96 -0
  304. data/lib/rio/ops/stream/read.rb +84 -0
  305. data/lib/rio/ops/stream/write.rb +58 -0
  306. data/lib/rio/ops/symlink.rb +70 -0
  307. data/lib/rio/path.rb +117 -0
  308. data/lib/rio/path/reset.rb +70 -0
  309. data/lib/rio/record.rb +59 -0
  310. data/lib/rio/rectype.rb +86 -0
  311. data/lib/rio/rl/base.rb +147 -0
  312. data/lib/rio/rl/builder.rb +166 -0
  313. data/lib/rio/rl/ioi.rb +66 -0
  314. data/lib/rio/rl/path.rb +141 -0
  315. data/lib/rio/rl/uri.rb +118 -0
  316. data/lib/rio/scheme/aryio.rb +89 -0
  317. data/lib/rio/scheme/cmdio.rb +74 -0
  318. data/lib/rio/scheme/fd.rb +65 -0
  319. data/lib/rio/scheme/ftp.rb +73 -0
  320. data/lib/rio/scheme/http.rb +81 -0
  321. data/lib/rio/scheme/path.rb +100 -0
  322. data/lib/rio/scheme/stderr.rb +56 -0
  323. data/lib/rio/scheme/stdio.rb +71 -0
  324. data/lib/rio/scheme/strio.rb +82 -0
  325. data/lib/rio/scheme/sysio.rb +61 -0
  326. data/lib/rio/scheme/tcp.rb +74 -0
  327. data/lib/rio/scheme/tempfile.rb +104 -0
  328. data/lib/rio/state.rb +209 -0
  329. data/lib/rio/state/error.rb +73 -0
  330. data/lib/rio/stream.rb +181 -0
  331. data/lib/rio/stream/base.rb +50 -0
  332. data/lib/rio/stream/duplex.rb +76 -0
  333. data/lib/rio/stream/open.rb +203 -0
  334. data/lib/rio/symantics.rb +46 -0
  335. data/lib/rio/to_rio.rb +57 -0
  336. data/lib/rio/uri/file.rb +145 -0
  337. data/lib/rio/version.rb +52 -0
  338. data/setup.rb +1331 -0
  339. data/test/1.rb +14 -0
  340. data/test/mswin32.rb +28 -0
  341. data/test/once.rb +7 -0
  342. data/test/runtests.rb +12 -0
  343. data/test/runtests_gem.rb +15 -0
  344. data/test/tc/abs.rb +349 -0
  345. data/test/tc/all.rb +42 -0
  346. data/test/tc/cd1.rb +116 -0
  347. data/test/tc/clearsel.rb +69 -0
  348. data/test/tc/closeoncopy.rb +91 -0
  349. data/test/tc/closeoneof.rb +194 -0
  350. data/test/tc/copy-from.rb +183 -0
  351. data/test/tc/copy-to.rb +94 -0
  352. data/test/tc/copy.rb +72 -0
  353. data/test/tc/copyarray.rb +191 -0
  354. data/test/tc/copydest.rb +50 -0
  355. data/test/tc/copydir.rb +192 -0
  356. data/test/tc/copydirlines.rb +124 -0
  357. data/test/tc/copylines.rb +40 -0
  358. data/test/tc/copynonex.rb +121 -0
  359. data/test/tc/create.rb +104 -0
  360. data/test/tc/csv.rb +229 -0
  361. data/test/tc/dir.rb +79 -0
  362. data/test/tc/dirautoclose.rb +70 -0
  363. data/test/tc/dirent.rb +180 -0
  364. data/test/tc/dirss.rb +84 -0
  365. data/test/tc/each.rb +111 -0
  366. data/test/tc/each_break.rb +241 -0
  367. data/test/tc/edf.rb +82 -0
  368. data/test/tc/entary.rb +230 -0
  369. data/test/tc/eq.rb +101 -0
  370. data/test/tc/expand_path.rb +94 -0
  371. data/test/tc/ext.rb +115 -0
  372. data/test/tc/fileno.rb +95 -0
  373. data/test/tc/getrec.rb +140 -0
  374. data/test/tc/lineno.rb +197 -0
  375. data/test/tc/lines.rb +66 -0
  376. data/test/tc/methods.rb +185 -0
  377. data/test/tc/misc.rb +473 -0
  378. data/test/tc/nolines.rb +205 -0
  379. data/test/tc/noqae.rb +873 -0
  380. data/test/tc/once.rb +6 -0
  381. data/test/tc/overload.rb +137 -0
  382. data/test/tc/pa.rb +159 -0
  383. data/test/tc/pathop.rb +63 -0
  384. data/test/tc/paths.rb +147 -0
  385. data/test/tc/qae.rb +494 -0
  386. data/test/tc/qae_riovar.rb +500 -0
  387. data/test/tc/records.rb +69 -0
  388. data/test/tc/rename.rb +224 -0
  389. data/test/tc/rename_assign.rb +48 -0
  390. data/test/tc/sub.rb +49 -0
  391. data/test/tc/symlink.rb +177 -0
  392. data/test/tc/symlink0.rb +298 -0
  393. data/test/tc/symlink1.rb +115 -0
  394. data/test/tc/testcase.rb +152 -0
  395. metadata +461 -0
@@ -0,0 +1,53 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 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
+ # To create the documentation for Rio run the command
25
+ # rake rdoc
26
+ # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+
38
+ module RIO
39
+ class Rio
40
+ # This is an internal function and is not needed in client code.
41
+ # It returns the internal 'Context' object.
42
+ #def cx() target.cx() end
43
+
44
+ # This is an internal function and should not normally be needed in client code.
45
+ # It closes a Rio and returns it to its 'reset' state.
46
+ def reset() target.reset() end
47
+
48
+ # This is an internal function and is not needed in client code.
49
+ # It returns the internal 'Rio Resource Locator' object.
50
+ def rl() target.rl() end
51
+
52
+ end
53
+ end
@@ -0,0 +1,612 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 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
+ # To create the documentation for Rio run the command
25
+ # rake rdoc
26
+ # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+
38
+ module RIO
39
+ class Rio
40
+
41
+ # Sets the rio to read lines and returns the Rio
42
+ #
43
+ # If called with a block behaves as if lines(*args).each(&block) had been called
44
+ #
45
+ # If args are provided they may be one or more of the following:
46
+ # Regexp:: any matching record will be processed
47
+ # Range:: specifies a range of records (zero-based) to be included
48
+ # Integer:: interpreted as a one element range of lines to be processed
49
+ # Proc:: a proc which will be called for each record, records are included unless nil or false is returned
50
+ # Symbol:: a symbol which will _sent_ to each record, records are included unless nil or false is returned
51
+ #
52
+ # rio('f.txt').lines(/^\s*#/) { |line| ... } # iterate over comment-only lines
53
+ # rio('f.txt').lines(/^\s*#/).each { |line| ... } # same as above
54
+ #
55
+ # rio('f.txt').lines(1,7..9) > rio('anotherfile.txt') # copy lines 1,7,8 and 9 to anotherfile.txt
56
+ #
57
+ # rio('f.txt').lines(1...3).to_a # return an array containing lines 1 and 2 of f.txt
58
+ # rio('f.txt').lines[1...3] # same thing
59
+ #
60
+ def lines(*args,&block) target.lines(*args,&block); self end
61
+
62
+ # Sets the rio to read bytes and returns the rio
63
+ #
64
+ # _n_ specifies the number of bytes to be returned on each iteration of Rio#each or by Rio#getrec. If _args_
65
+ # are provided, they are treated as record selectors as if <tt>ario.bytes(n).records(*args)</tt> had been
66
+ # called. See also Rio#records, Rio#lines, Rio#each, Rio#[]
67
+ #
68
+ # If called with a block behaves as if <tt>ario.bytes(n,*args).each(&block)</tt> had been called
69
+ #
70
+ # rio('f.dat').bytes(1024) { |rec| ... } # iterate through f.txt 1024 bytes at a time
71
+ # rio('f.dat').bytes(1024).each { |rec| ... } # same as above
72
+ #
73
+ # rio('f.dat').bytes(1024,0..4) { |rec| ... } # iterate through the first five 1024 byte blocks
74
+ #
75
+ # rio('f.dat').bytes(64).to_a # return the contents of f.dat as an array of 64 byte chunks
76
+ #
77
+ # rio('f.dat').bytes(512).records(0,7..9) > rio('dfile.dat') # copy 512-byte blocks 0,7,8 and 9 to dfile.dat
78
+ #
79
+ # rio('f.dat').bytes(2048).records[0...10] # return an array containing the first 10 2K blocks of f.dat
80
+ # rio('f.dat').bytes(2048)[0...10] # same thing
81
+ #
82
+ # rio('f.dat').bytes { |bytestr| ... } # iterate over f.dat 1 byte at a time.
83
+ # rio('f.dat').bytes[0...100] # returns an array of the first 100 bytes of f.dat
84
+ #
85
+ def bytes(n=1,*args,&block) target.bytes(n,*args,&block); self end
86
+
87
+ # Specifies which records will be iterated through by Rio#each or returned by Rio#getrec
88
+ #
89
+ # If called with a block behaves as if <tt>records(*args).each(&block)</tt> had been called
90
+ #
91
+ # Returns the Rio
92
+ #
93
+ # If no args are provided, all records are selected. What constitutes a record is affected by Rio#lines,Rio#bytes,
94
+ # and extensions such as Rio#csv.
95
+ #
96
+ # If args are provided they may be one or more of the following:
97
+ # [Regexp]
98
+ # any matching record will be iterated over by Rio#each or returned by Rio#getrec
99
+ # [Integer]
100
+ # specifies a record-number (zero-based) to be iterated over by Rio#each or returned by Rio#getrec
101
+ # [Range]
102
+ # specifies a range of records (zero-based) to included in the iteration
103
+ # [Proc]
104
+ # a proc which will be called for each record, records are included unless nil or false is returned
105
+ # [Symbol]
106
+ # a symbol which will _sent_ to each record, records are included unless nil or false is returned
107
+ #
108
+ # Note in the following examples that since +lines+ is the default <tt>ario.records(*args)</tt>
109
+ # is effectively the same as <tt>ario.lines(*args)</tt>.
110
+ #
111
+ # rio('afile').records(0) { |line| ... } # iterate over the first line of 'afile'
112
+ # rio('afile').records(0,5..7)) { |line| ... } # iterate over lines 0,5,6 and 7
113
+ # rio('afile').records(/Zippy/) { |line| ... } # iterate over all lines containing 'Zippy'
114
+ # rio('afile').lines(0,/^\s*#/) { |line| ... } # iterate over the first line and comment lines
115
+ # rio('afile').records(0,/^\s*#/) { |line| ... } # same thing
116
+ # rio('afile').lines(proc { |rec,rnum,rio| rnum == 0 || rec =~ /^\s*#/ }) { |line| ... } # same thing
117
+ # rio('afile').chomp.lines(proc { |rec,rnum,rio| rec.size > 0 }) { |line| ... } # non-empty lines
118
+ # # return array containing line 0, all comment lines and any line containing the filename of the Rio
119
+ # rio('afile').lines[0,/^\s*#/,proc { |rec,rnum,ario| rec =~ /#{ario.filename}/ }]
120
+ #
121
+ #
122
+ def records(*args,&block) target.records(*args,&block); self end
123
+
124
+ # Specifies records which should *not* be iterated through by Rio#each or returned by Rio#getrec
125
+ #
126
+ # If called with a block behaves as if norecords(*args).each(&block) had been called
127
+ #
128
+ # Returns the Rio
129
+ #
130
+ # See also Rio#records, Rio#nolines, Rio#lines
131
+ #
132
+ # If no args are provided, no records are rejected. What constitutes a record is affected by Rio#lines,Rio#bytes,
133
+ # and extensions such as Rio#csv.
134
+ #
135
+ # If args are provided they may be one or more of the following:
136
+ # Regexp:: any matching record will not be processed
137
+ # Integer:: specifies a record-number (zero-based) to be skipped
138
+ # Range:: specifies a range of records (zero-based) to be excluded
139
+ # Proc:: a proc which will be called for each record, records are excluded unless nil or false is returned
140
+ # Symbol:: a symbol which will _sent_ to each record, records are excluded unless nil or false is returned
141
+ #
142
+ # Note in the following examples that since +lines+ is the default record
143
+ # type <tt>ario.norecords(*args)</tt> is effectively
144
+ # the same as <tt>ario.nolines(*args)</tt>.
145
+ #
146
+ # rio('afile').norecords(0) { |line| ... } # iterate over all but the first line of 'afile'
147
+ # rio('afile').norecords(0,5..7)) { |line| ... } # don't iterate over lines 0,5,6 and 7
148
+ # rio('afile').norecords(/Zippy/) { |line| ... } # skip all lines containing 'Zippy'
149
+ # rio('afile').chomp.nolines(:empty?) { |line| ... } # skip empty lines
150
+ #
151
+ def norecords(*args,&block) target.norecords(*args,&block); self end
152
+
153
+ # Sets the Rio to read lines and specifies lines which should *not* be iterated through by Rio#each or
154
+ # returned by Rio#getrec
155
+ #
156
+ # If called with a block behaves as if <tt>nolines(*args).each(&block)</tt> had been called
157
+ #
158
+ # Returns the Rio
159
+ #
160
+ # See also Rio#lines, Rio#records
161
+ #
162
+ # If no args are provided, no lines are rejected.
163
+ #
164
+ # If args are provided they may be one or more of the following:
165
+ # [Regexp] any matching line will not be processed
166
+ # [Integer] specifies a line-number (zero-based) to be skipped
167
+ # [Range] specifies a range of lines (zero-based) to be excluded
168
+ # [Proc] a proc which will be called for each line, lines are excluded unless nil or false is returned
169
+ # [Symbol] a symbol which will _sent_ to each line, lines are excluded unless nil or false is returned
170
+ #
171
+ # rio('afile').nolines(0) { |line| ... } # iterate over all but the first line of 'afile'
172
+ # rio('afile').nolines(0,5..7)) { |line| ... } # don't iterate over lines 0,5,6 and 7
173
+ # rio('afile').nolines(/Zippy/) { |line| ... } # skip all lines containing 'Zippy'
174
+ # rio('afile').chomp.nolines(:empty?) { |line| ... } # skip empty lines
175
+ #
176
+ def nolines(*args,&block) target.nolines(*args,&block); self end
177
+
178
+
179
+
180
+ # Sets the Rio to read rows and specifies rows which should be iterated through
181
+ # by Rio#each or returned by Rio#getrec
182
+ # Rio#rows is intended for use by extensions, where the concept of a row is reasonable.
183
+ # In the absensence of an extension behaves like Rio#records
184
+ def rows(*args,&block) target.rows(*args,&block); self end
185
+
186
+ # Sets the Rio to read rows and specifies lines which should *not* be iterated
187
+ # through by Rio#each or returned by Rio#getrec
188
+ # Rio#norows is intended for use by extensions, where the concept of a row is
189
+ # reasonable. In the absensence of an extension behaves like Rio#norecords
190
+ def norows(*args,&block) target.norows(*args,&block); self end
191
+
192
+ # Sets the implicit output mode to 'a'.
193
+ #
194
+ # This is the mode Rio will use for output when no mode is specified
195
+ #
196
+ # Rios normally don't need to be opened or have their open mode specified. A Rio determines the mode
197
+ # based on the file system object and on the action specified. For instance when a Rio encounters
198
+ # a +read+ on a file it opens the file for reading using File#open and calls IO#read; when it encounters
199
+ # a +read+ on a directory it knows to use Dir#open and call Dir#read. When it encounters a Rio#puts, it knows
200
+ # to perform a File#open, and call IO#puts on the returned handle. By default when a method requires
201
+ # a file be opened for writing the file is opened with a mode of 'w'. Rio#a changes this implicit
202
+ # output mode to 'a'.
203
+ #
204
+ # Note that this is not the same as setting the output mode *explicitly*, as in rio('afile').mode('a').
205
+ # When the mode is set explicitly using Rio#mode, the mode specified will be used regardless of
206
+ # the operation being performed. The Rio#a method only affects how Rio opens a file when
207
+ # it sees an operator that requires writing, and must determine for itself how to open it.
208
+ #
209
+ # rio('afile').puts!('Hello World') # call IO#puts on a file handle opened in 'w' mode
210
+ # rio('afile').a.puts!('Hello World') # call IO#puts on a file handle opened in 'a' mode
211
+ #
212
+ # See also Rio#a!, Rio#w! for setting the implicit output mode 'a+' and 'w+' respectively
213
+ #
214
+ # The methods Rio#a, Rio#a!, Rio#w, Rio#w!, Rio#r, Rio#r! set the +implicit+ open mode
215
+ # to 'a','a+','w','w+','r' and 'r+' respectively.
216
+ def a() target.a(); self end
217
+
218
+
219
+ # Sets the implicit output mode to 'a+'.
220
+ #
221
+ # The implicit output mode is the mode Rio will use for output when no mode is specified.
222
+ #
223
+ # Returns the Rio
224
+ #
225
+ # See the discussion for Rio#a.
226
+ #
227
+ def a!() target.a!(); self end
228
+
229
+
230
+ # Sets the implicit input mode to 'r'.
231
+ #
232
+ # The implicit input mode is the mode Rio will use for input when no mode is specified.
233
+ #
234
+ # Returns the Rio
235
+ #
236
+ # See the discussion for Rio#a.
237
+ #
238
+ # Since 'r' is the implicit input mode used by default, this method
239
+ # is probably uneeded.
240
+ #
241
+ def r() target.r(); self end
242
+
243
+
244
+ # Sets the implicit input mode to 'r+'.
245
+ #
246
+ # The implicit input mode is the mode Rio will use for input when no mode is specified.
247
+ #
248
+ # Returns the Rio
249
+ #
250
+ # See the discussion for Rio#a.
251
+ #
252
+ def r!() target.r!(); self end
253
+
254
+
255
+ # Sets the implicit output mode to 'w'.
256
+ #
257
+ # The implicit output mode is the mode Rio will use for output when no mode is specified.
258
+ #
259
+ # Returns the Rio
260
+ #
261
+ # See the discussion for Rio#a.
262
+ #
263
+ # Since 'w' is the implicit output mode used by default, this method
264
+ # is uneeded, is considered experimental and may be removed at any time.
265
+ #
266
+ def w() target.w(); self end
267
+
268
+
269
+ # Sets the implicit output mode to 'w+'.
270
+ #
271
+ # The implicit output mode is the mode Rio will use for output when no mode is specified.
272
+ #
273
+ # Returns the Rio
274
+ #
275
+ # See the discussion for Rio#a.
276
+ #
277
+ def w!() target.w!(); self end
278
+
279
+
280
+ # Set the Rio's closeoneof mode.
281
+ #
282
+ # ario.closeoneof(&block) => ario
283
+ #
284
+ # +closeoneof+ causes a Rio to be closed automatically whenever the end of
285
+ # file is reached. This is handled at the IO level, and thus affects
286
+ # all methods that read from a rio (Rio#readlines, Rio#to_a, Rio#each Rio#gets etc.)
287
+ # Because +closeoneof+ must be on for many of Rio's most useful idioms,
288
+ # it is on by default. +closeoneof+ can be turned off using Rio#nocloseoneof.
289
+ #
290
+ # If a block is given behaves like <tt>ario.closeoneof.each(&block)</tt> had been called
291
+ #
292
+ # Returns the Rio
293
+ #
294
+ # ario = rio('afile')
295
+ # lines = ario.readlines
296
+ # ario.closed? #=> true
297
+ #
298
+ # ario = rio('afile').nocloseoneof
299
+ # lines = ario.readlines
300
+ # ario.closed? #=> false
301
+ # ario.close # must be explicitly closed
302
+ #
303
+ # +closeoneof+ is ignored by directory Rios, however, setting it on a directory Rio
304
+ # causes each file Rio returned while iterating to inherit the directory's setting
305
+ #
306
+ # rio('adir').files do |file|
307
+ # file.closeoneof? #=> true
308
+ # end
309
+ #
310
+ # rio('adir').files.nocloseoneof do |file|
311
+ # file.closeoneof? #=> false
312
+ # end
313
+ #
314
+ # rio('adir').files.nocloseoneof['*.rb'] # array of .rb file Rios in adir with closeoneof off
315
+ #
316
+ # drio = rio('adir').files
317
+ # frio1 = drio.read
318
+ # frio1.closeoneof? #=> true
319
+ # drio.nocloseoneof
320
+ # frio2 = drio.read
321
+ # frio2.closeoneof? #=> false
322
+ #
323
+ #
324
+ def closeoneof(arg=true,&block) target.closeoneof(arg,&block); self end
325
+
326
+
327
+ # Set the Rio's closeoneof mode to false
328
+ # ario.nocloseoneof(&block) => ario
329
+ # See Rio#closeoneof
330
+ #
331
+ # If a block is given behaves like
332
+ # ario.nocloseoneof.each(&block)
333
+ #
334
+ # Returns the Rio
335
+ #
336
+ # ario = rio('afile')
337
+ # lines = ario.to_a
338
+ # ario.closed? #=> true
339
+ #
340
+ # ario = rio('afile').nocloseoneof
341
+ # lines = ario.to_a
342
+ # ario.closed? #=> false
343
+ # ario.close # must be explicitly closed
344
+ def nocloseoneof(arg=false,&block) target.nocloseoneof(arg,&block); self end
345
+
346
+
347
+ # Query a Rio's closeoneof mode
348
+ # ario.closeoneof? => true or false
349
+ #
350
+ # See Rio#closeoneof and Rio#nocloseoneof
351
+ #
352
+ # ario = rio('afile')
353
+ # ario.closeoneof? #=> true
354
+ # lines = ario.to_a
355
+ # ario.closed? #=> true
356
+ #
357
+ # ario = rio('afile').nocloseoneof
358
+ # ario.closeoneof? #=> false
359
+ # lines = ario.to_a
360
+ # ario.closed? #=> false
361
+ # ario.close # must be explicitly closed
362
+ def closeoneof?() target.closeoneof?() end
363
+
364
+
365
+
366
+ # Set a Rio's closeoncopy mode
367
+ #
368
+ # ario.closeoncopy(&block) => ario
369
+ #
370
+ # Rio#closeoncopy causes the Rio being written to to be closed when using
371
+ # a grande copy operator. While Rio#closeoneof causes all Rio's to be closed
372
+ # when reading to the end of file, it does not affect Rios being written to.
373
+ # Rio#closeoncopy only affects the Rio being written to and only when a
374
+ # grande copy operator is used. +closeoncopy+ is on by default, with one exception.
375
+ #
376
+ # dest = rio('destfile')
377
+ # dest < rio('srcfile')
378
+ # dest.closed? #=> true
379
+ #
380
+ # dest = rio('destfile').nocloseoncopy
381
+ # dest < rio('srcfile')
382
+ # dest.closed? #=> false
383
+ # dest.close # must be explicitly closed
384
+ #
385
+ # dest = rio('destfile')
386
+ # dest.print(rio('srcfile').slurp)
387
+ # dest.closed? #=> false (Rio#print is not a copy operator)
388
+ # dest.close
389
+ #
390
+ #
391
+ # ==== The Exception
392
+ #
393
+ # When a block is passed directly to the rio constructor +closeoncopy+ is turned off.
394
+ #
395
+ # rio('afile') { |file|
396
+ # file.closeoncopy? #=> false
397
+ # file < a_string
398
+ # file.closed? #=> false
399
+ # }
400
+ # # The file is now closed. See Rio#rio for more informatioin
401
+ #
402
+ # ==== Why?
403
+ #
404
+ # Some of my favorite Rio idioms are its copy one-liners
405
+ #
406
+ # rio('afile') < a_string # put a string into a file
407
+ # rio('afile') < an_array # put an array into a file
408
+ # rio('afile') < rio('anotherfile').lines(1..10) # copy the first 10 lines of anotherfile into afile
409
+ # rio('afile.gz').gzip < rio('anotherfile').lines(1..10) # same thing into a gzipped file
410
+ #
411
+ # In each of these cases, 'afile' would remain open after the copy and furthermore
412
+ # since the destination Rio was not saved in a variable, There is no way to close file.
413
+ # Without closeoncopy Something like this would be required:
414
+ #
415
+ # ario = rio('afile')
416
+ # ario < something_else
417
+ # ario.close
418
+ #
419
+ # Or this...
420
+ #
421
+ # ario = rio('afile') < something_else
422
+ # ario.close
423
+ #
424
+ # Or this...
425
+ #
426
+ # (rio('afile') < something_else).close
427
+ # One line, but ugly, and prone to error.
428
+ #
429
+ # What I want is this:
430
+ #
431
+ # rio('afile') < something_else
432
+ #
433
+ # Simple. I want to copy this to that, I point the arrow and it works.
434
+ #
435
+ # In perl the rio's destructor would be called, because there are no remaining references to the Rio
436
+ # However, it my understanding and experience that in Ruby the finalizer will not necessarily be
437
+ # called at this point. Calling all gurus: If I am missing something,
438
+ # and there is a way to make this work without closeoncopy,
439
+ # please contact the author.
440
+ #
441
+ def closeoncopy(arg=true,&block) target.closeoncopy(arg,&block); self end
442
+
443
+
444
+ # Set a Rio's closeoncopy mode to false
445
+ #
446
+ # ario.nocloseoncopy(&block) => ario
447
+ #
448
+ # See Rio#closeoncopy
449
+ #
450
+ def nocloseoncopy(arg=false,&block) target.nocloseoncopy(arg,&block); self end
451
+
452
+
453
+ # Query a Rio's closeoncopy mode
454
+ #
455
+ # ario.closeoncopy? => true or false
456
+ #
457
+ # See Rio#closeoncopy
458
+ #
459
+ def closeoncopy?() target.closeoncopy?() end
460
+
461
+
462
+ # Rio#autorewind?
463
+ #
464
+ #
465
+ #def autorewind?() target.autorewind?() end
466
+
467
+
468
+ # Rio#autorewind
469
+ #
470
+ #
471
+ #def autorewind(arg=true,&block) target.autorewind(arg,&block); self end
472
+
473
+
474
+ # Rio#noautorewind
475
+ #
476
+ #
477
+ #def noautorewind(arg=false,&block) target.noautorewind(arg,&block); self end
478
+
479
+
480
+ # Queries the Rio's chomp-mode.
481
+ # See Rio#chomp.
482
+ #
483
+ #
484
+ def chomp?() target.chomp?() end
485
+
486
+
487
+ # Sets the Rio to chomp lines and returns the Rio
488
+ #
489
+ # When called with a block, behaves as if chomp.each(&block) had been called
490
+ #
491
+ # chomp causes lines returned by each, to_a, readlines, readline, gets, each_line etc.
492
+ # to be chomped before iterated over or assigned
493
+ #
494
+ # rio('f.txt').chomp.each { |line| ... } # Block is called with lines already chomped
495
+ #
496
+ # rio('f.txt').chomp { |line| ... } # same as above
497
+ #
498
+ # rio('f.txt').chomp.to_a # returns the lines of f.txt chomped
499
+ #
500
+ # rio('f.txt').chomp.lines(1..2).to_a # returns an array containg lines 1 and 2 of the file after being chomped
501
+ #
502
+ # This would have similar results to rio('f.txt').lines(1..2).to_a.map{ |line| line.chomp}
503
+ #
504
+ # rio('f.txt').lines(1..2).chomp.to_a # same as above
505
+ #
506
+ # rio('f.txt').chomp.readlines # returns the lines of f.txt chomped
507
+ #
508
+ # rio('f.txt').chomp.gets # returns the first line of 'f.txt' chomped
509
+ #
510
+ # rio('f.txt').chomp > an_array # copies the chomped lines of f.txt into an_array
511
+ #
512
+ # # fill an array with all the 'require' lines in all the .rb files (recursively) in adir
513
+ # # chomping each line
514
+ # an_array = []
515
+ # rio('adir').chomp.all.files("*.rb") { |file|
516
+ # an_array << file.lines(/^\s*require/)
517
+ # }
518
+ #
519
+ def chomp(arg=true,&block) target.chomp(arg,&block); self end
520
+
521
+
522
+ # Sets the Rio to gzip mode.
523
+ # ario.gzip #=> ario
524
+ # If applied to a Rio that is being read from Reads
525
+ # through a <tt>Zlib::GzipReader</tt>; If applied to a Rio that is being written to
526
+ # writes through a <tt>Zlib::GzipWriter</tt>.
527
+ #
528
+ # Returns the Rio
529
+ #
530
+ # If a block is given, acts like <tt>ario.gzip.each(&block)</tt>
531
+ #
532
+ # rio('afile') > rio('afile.gz').gzip # gzip a file
533
+ # rio('afile.gz').gzip < rio('afile') # same thing
534
+ #
535
+ # rio('afile.gz').gzip > rio('afile') # ungzip a file
536
+ # rio('afile') < rio('afile.gz').gzip # same thing
537
+ #
538
+ # rio('afile.gz').gzip.chomp { |line| ...} # process each chomped line of a gzipped file
539
+ # rio('afile.gz').gzip[0..9] # an array containing the first 10 lines of a gzipped file
540
+ #
541
+ def gzip(&block) target.gzip(true,&block); self end
542
+
543
+
544
+ # Queries the Rio's gzip-mode
545
+ # ario.gzip? #=> true or false
546
+ # See Rio#gzip
547
+ #
548
+ def gzip?() target.gzip?() end
549
+
550
+
551
+ # Rio#inputmode?
552
+ #
553
+ #
554
+ #def inputmode?() target.inputmode?() end
555
+
556
+
557
+
558
+ # Rio#outputmode?
559
+ #
560
+ #
561
+ #def outputmode?() target.outputmode?() end
562
+
563
+
564
+ # Sets the 'sync-mode' of the underlying IO using IO#sync=
565
+ # ario.sync(boolean=true,&block) => ario
566
+ # Sets the Rio so that its 'sync mode' will be set to +true+ or +false+ when opened, or set
567
+ # it immediatly if already open. When sync mode is
568
+ # true, all output is immediately flushed to the underlying operating
569
+ # system and is not buffered internally. Returns the rio. See
570
+ # also Rio#fsync, Rio#nosync, Rio#sync?.
571
+ #
572
+ # If a block is given behaves like <tt>ario.sync(arg).each(&block)</tt>
573
+ #
574
+ # f = rio("testfile").sync.puts("Hello World")
575
+ # f.sync? # => true
576
+ #
577
+ def sync(arg=true,&block) target.sync(arg,&block); self end
578
+
579
+ # Similar to IO#sync= false
580
+ # ario.nosync(&block) => ario
581
+ # Sets the Rio so that its 'sync mode' will be set to +false+ when opened, or set
582
+ # it immediatly if already open. When sync mode is
583
+ # true, all output is immediately flushed to the underlying operating
584
+ # system and is not buffered internally. Returns the rio. See
585
+ # also Rio#fsync, Rio#sync, Rio#sync?.
586
+ #
587
+ # If a block is given behaves like <tt>ario.nosync.each(&block)</tt>
588
+ #
589
+ # f = rio("testfile").sync.puts("Hello World")
590
+ # f.sync? # => true
591
+ # f.nosync
592
+ # f.sync? # => false
593
+ #
594
+ def nosync(arg=false,&block) target.nosync(arg,&block); self end
595
+
596
+ # Query the current 'sync mode' with IO#sync
597
+ # ario.sync? => true or false
598
+ # Returns the current ``sync mode'' of _ario_. When sync mode is true,
599
+ # all output is immediately flushed to the underlying operating
600
+ # system and is not buffered by Ruby internally. See also +Rio#fsync+,
601
+ # Rio#sync, Rio#nosync
602
+ #
603
+ # f = rio("testfile")
604
+ # f.sync? #=> false
605
+ #
606
+ def sync?() target.sync?() end
607
+
608
+
609
+
610
+
611
+ end
612
+ end