rio 0.3.4 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (349) hide show
  1. data/ChangeLog +287 -0
  2. data/Rakefile +7 -9
  3. data/VERSION +1 -1
  4. data/doc/ANNOUNCE +20 -1
  5. data/doc/RELEASE_NOTES +41 -0
  6. data/doc/rdoc/classes/Kernel.html +181 -0
  7. data/doc/rdoc/classes/Kernel.src/M000214.html +18 -0
  8. data/doc/rdoc/classes/RIO.html +621 -0
  9. data/doc/rdoc/classes/RIO.src/M000001.html +18 -0
  10. data/doc/rdoc/classes/RIO.src/M000002.html +18 -0
  11. data/doc/rdoc/classes/RIO.src/M000003.html +18 -0
  12. data/doc/rdoc/classes/RIO/Doc.html +138 -0
  13. data/doc/rdoc/classes/RIO/Doc/HOWTO.html +1040 -0
  14. data/doc/rdoc/classes/RIO/Doc/INTRO.html +1613 -0
  15. data/doc/rdoc/classes/RIO/Doc/MISC.html +443 -0
  16. data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +338 -0
  17. data/doc/rdoc/classes/RIO/IF.html +114 -0
  18. data/doc/rdoc/classes/RIO/IF/CSV.html +202 -0
  19. data/doc/rdoc/classes/RIO/IF/CSV.src/M000004.html +19 -0
  20. data/doc/rdoc/classes/RIO/IF/CSV.src/M000005.html +16 -0
  21. data/doc/rdoc/classes/RIO/IF/CSV.src/M000006.html +16 -0
  22. data/doc/rdoc/classes/RIO/IF/YAML.html +499 -0
  23. data/doc/rdoc/classes/RIO/IF/YAML.src/M000007.html +19 -0
  24. data/doc/rdoc/classes/RIO/IF/YAML.src/M000008.html +16 -0
  25. data/doc/rdoc/classes/RIO/IF/YAML.src/M000009.html +16 -0
  26. data/doc/rdoc/classes/RIO/IF/YAML.src/M000010.html +16 -0
  27. data/doc/rdoc/classes/RIO/IF/YAML.src/M000011.html +16 -0
  28. data/doc/rdoc/classes/RIO/IF/YAML.src/M000012.html +16 -0
  29. data/doc/rdoc/classes/RIO/IF/YAML.src/M000013.html +16 -0
  30. data/doc/rdoc/classes/RIO/IF/YAML.src/M000014.html +16 -0
  31. data/doc/rdoc/classes/RIO/IF/YAML.src/M000015.html +16 -0
  32. data/doc/rdoc/classes/RIO/IF/YAML.src/M000016.html +16 -0
  33. data/doc/rdoc/classes/RIO/IF/YAML.src/M000017.html +16 -0
  34. data/doc/rdoc/classes/RIO/Rio.html +7121 -0
  35. data/doc/rdoc/classes/RIO/Rio.src/M000018.html +18 -0
  36. data/doc/rdoc/classes/RIO/Rio.src/M000019.html +20 -0
  37. data/doc/rdoc/classes/RIO/Rio.src/M000020.html +27 -0
  38. data/doc/rdoc/classes/RIO/Rio.src/M000021.html +16 -0
  39. data/doc/rdoc/classes/RIO/Rio.src/M000023.html +19 -0
  40. data/doc/rdoc/classes/RIO/Rio.src/M000024.html +20 -0
  41. data/doc/rdoc/classes/RIO/Rio.src/M000025.html +16 -0
  42. data/doc/rdoc/classes/RIO/Rio.src/M000026.html +16 -0
  43. data/doc/rdoc/classes/RIO/Rio.src/M000027.html +16 -0
  44. data/doc/rdoc/classes/RIO/Rio.src/M000028.html +16 -0
  45. data/doc/rdoc/classes/RIO/Rio.src/M000029.html +16 -0
  46. data/doc/rdoc/classes/RIO/Rio.src/M000030.html +16 -0
  47. data/doc/rdoc/classes/RIO/Rio.src/M000031.html +16 -0
  48. data/doc/rdoc/classes/RIO/Rio.src/M000032.html +16 -0
  49. data/doc/rdoc/classes/RIO/Rio.src/M000033.html +16 -0
  50. data/doc/rdoc/classes/RIO/Rio.src/M000034.html +16 -0
  51. data/doc/rdoc/classes/RIO/Rio.src/M000035.html +16 -0
  52. data/doc/rdoc/classes/RIO/Rio.src/M000036.html +16 -0
  53. data/doc/rdoc/classes/RIO/Rio.src/M000037.html +16 -0
  54. data/doc/rdoc/classes/RIO/Rio.src/M000038.html +16 -0
  55. data/doc/rdoc/classes/RIO/Rio.src/M000039.html +16 -0
  56. data/doc/rdoc/classes/RIO/Rio.src/M000040.html +16 -0
  57. data/doc/rdoc/classes/RIO/Rio.src/M000041.html +16 -0
  58. data/doc/rdoc/classes/RIO/Rio.src/M000042.html +16 -0
  59. data/doc/rdoc/classes/RIO/Rio.src/M000043.html +16 -0
  60. data/doc/rdoc/classes/RIO/Rio.src/M000044.html +16 -0
  61. data/doc/rdoc/classes/RIO/Rio.src/M000045.html +16 -0
  62. data/doc/rdoc/classes/RIO/Rio.src/M000046.html +16 -0
  63. data/doc/rdoc/classes/RIO/Rio.src/M000047.html +16 -0
  64. data/doc/rdoc/classes/RIO/Rio.src/M000048.html +16 -0
  65. data/doc/rdoc/classes/RIO/Rio.src/M000049.html +16 -0
  66. data/doc/rdoc/classes/RIO/Rio.src/M000050.html +16 -0
  67. data/doc/rdoc/classes/RIO/Rio.src/M000051.html +16 -0
  68. data/doc/rdoc/classes/RIO/Rio.src/M000052.html +16 -0
  69. data/doc/rdoc/classes/RIO/Rio.src/M000053.html +16 -0
  70. data/doc/rdoc/classes/RIO/Rio.src/M000054.html +16 -0
  71. data/doc/rdoc/classes/RIO/Rio.src/M000055.html +16 -0
  72. data/doc/rdoc/classes/RIO/Rio.src/M000056.html +16 -0
  73. data/doc/rdoc/classes/RIO/Rio.src/M000057.html +16 -0
  74. data/doc/rdoc/classes/RIO/Rio.src/M000058.html +16 -0
  75. data/doc/rdoc/classes/RIO/Rio.src/M000059.html +16 -0
  76. data/doc/rdoc/classes/RIO/Rio.src/M000060.html +16 -0
  77. data/doc/rdoc/classes/RIO/Rio.src/M000061.html +16 -0
  78. data/doc/rdoc/classes/RIO/Rio.src/M000062.html +16 -0
  79. data/doc/rdoc/classes/RIO/Rio.src/M000063.html +16 -0
  80. data/doc/rdoc/classes/RIO/Rio.src/M000064.html +16 -0
  81. data/doc/rdoc/classes/RIO/Rio.src/M000065.html +16 -0
  82. data/doc/rdoc/classes/RIO/Rio.src/M000066.html +16 -0
  83. data/doc/rdoc/classes/RIO/Rio.src/M000067.html +16 -0
  84. data/doc/rdoc/classes/RIO/Rio.src/M000068.html +16 -0
  85. data/doc/rdoc/classes/RIO/Rio.src/M000069.html +16 -0
  86. data/doc/rdoc/classes/RIO/Rio.src/M000070.html +16 -0
  87. data/doc/rdoc/classes/RIO/Rio.src/M000071.html +16 -0
  88. data/doc/rdoc/classes/RIO/Rio.src/M000072.html +16 -0
  89. data/doc/rdoc/classes/RIO/Rio.src/M000073.html +16 -0
  90. data/doc/rdoc/classes/RIO/Rio.src/M000074.html +16 -0
  91. data/doc/rdoc/classes/RIO/Rio.src/M000075.html +16 -0
  92. data/doc/rdoc/classes/RIO/Rio.src/M000076.html +16 -0
  93. data/doc/rdoc/classes/RIO/Rio.src/M000077.html +16 -0
  94. data/doc/rdoc/classes/RIO/Rio.src/M000078.html +16 -0
  95. data/doc/rdoc/classes/RIO/Rio.src/M000079.html +16 -0
  96. data/doc/rdoc/classes/RIO/Rio.src/M000080.html +16 -0
  97. data/doc/rdoc/classes/RIO/Rio.src/M000081.html +16 -0
  98. data/doc/rdoc/classes/RIO/Rio.src/M000082.html +16 -0
  99. data/doc/rdoc/classes/RIO/Rio.src/M000083.html +16 -0
  100. data/doc/rdoc/classes/RIO/Rio.src/M000084.html +16 -0
  101. data/doc/rdoc/classes/RIO/Rio.src/M000085.html +16 -0
  102. data/doc/rdoc/classes/RIO/Rio.src/M000086.html +16 -0
  103. data/doc/rdoc/classes/RIO/Rio.src/M000087.html +16 -0
  104. data/doc/rdoc/classes/RIO/Rio.src/M000088.html +16 -0
  105. data/doc/rdoc/classes/RIO/Rio.src/M000089.html +16 -0
  106. data/doc/rdoc/classes/RIO/Rio.src/M000090.html +16 -0
  107. data/doc/rdoc/classes/RIO/Rio.src/M000091.html +16 -0
  108. data/doc/rdoc/classes/RIO/Rio.src/M000092.html +16 -0
  109. data/doc/rdoc/classes/RIO/Rio.src/M000093.html +16 -0
  110. data/doc/rdoc/classes/RIO/Rio.src/M000094.html +16 -0
  111. data/doc/rdoc/classes/RIO/Rio.src/M000095.html +16 -0
  112. data/doc/rdoc/classes/RIO/Rio.src/M000096.html +16 -0
  113. data/doc/rdoc/classes/RIO/Rio.src/M000097.html +16 -0
  114. data/doc/rdoc/classes/RIO/Rio.src/M000098.html +16 -0
  115. data/doc/rdoc/classes/RIO/Rio.src/M000099.html +16 -0
  116. data/doc/rdoc/classes/RIO/Rio.src/M000100.html +16 -0
  117. data/doc/rdoc/classes/RIO/Rio.src/M000101.html +16 -0
  118. data/doc/rdoc/classes/RIO/Rio.src/M000102.html +16 -0
  119. data/doc/rdoc/classes/RIO/Rio.src/M000103.html +16 -0
  120. data/doc/rdoc/classes/RIO/Rio.src/M000104.html +16 -0
  121. data/doc/rdoc/classes/RIO/Rio.src/M000105.html +16 -0
  122. data/doc/rdoc/classes/RIO/Rio.src/M000106.html +16 -0
  123. data/doc/rdoc/classes/RIO/Rio.src/M000107.html +16 -0
  124. data/doc/rdoc/classes/RIO/Rio.src/M000108.html +16 -0
  125. data/doc/rdoc/classes/RIO/Rio.src/M000109.html +16 -0
  126. data/doc/rdoc/classes/RIO/Rio.src/M000110.html +16 -0
  127. data/doc/rdoc/classes/RIO/Rio.src/M000111.html +16 -0
  128. data/doc/rdoc/classes/RIO/Rio.src/M000112.html +16 -0
  129. data/doc/rdoc/classes/RIO/Rio.src/M000113.html +16 -0
  130. data/doc/rdoc/classes/RIO/Rio.src/M000114.html +16 -0
  131. data/doc/rdoc/classes/RIO/Rio.src/M000115.html +16 -0
  132. data/doc/rdoc/classes/RIO/Rio.src/M000116.html +16 -0
  133. data/doc/rdoc/classes/RIO/Rio.src/M000117.html +16 -0
  134. data/doc/rdoc/classes/RIO/Rio.src/M000118.html +16 -0
  135. data/doc/rdoc/classes/RIO/Rio.src/M000119.html +16 -0
  136. data/doc/rdoc/classes/RIO/Rio.src/M000120.html +16 -0
  137. data/doc/rdoc/classes/RIO/Rio.src/M000121.html +16 -0
  138. data/doc/rdoc/classes/RIO/Rio.src/M000122.html +16 -0
  139. data/doc/rdoc/classes/RIO/Rio.src/M000123.html +16 -0
  140. data/doc/rdoc/classes/RIO/Rio.src/M000124.html +16 -0
  141. data/doc/rdoc/classes/RIO/Rio.src/M000125.html +16 -0
  142. data/doc/rdoc/classes/RIO/Rio.src/M000126.html +16 -0
  143. data/doc/rdoc/classes/RIO/Rio.src/M000127.html +16 -0
  144. data/doc/rdoc/classes/RIO/Rio.src/M000128.html +16 -0
  145. data/doc/rdoc/classes/RIO/Rio.src/M000129.html +16 -0
  146. data/doc/rdoc/classes/RIO/Rio.src/M000130.html +16 -0
  147. data/doc/rdoc/classes/RIO/Rio.src/M000131.html +16 -0
  148. data/doc/rdoc/classes/RIO/Rio.src/M000132.html +16 -0
  149. data/doc/rdoc/classes/RIO/Rio.src/M000133.html +16 -0
  150. data/doc/rdoc/classes/RIO/Rio.src/M000134.html +16 -0
  151. data/doc/rdoc/classes/RIO/Rio.src/M000135.html +16 -0
  152. data/doc/rdoc/classes/RIO/Rio.src/M000136.html +16 -0
  153. data/doc/rdoc/classes/RIO/Rio.src/M000137.html +16 -0
  154. data/doc/rdoc/classes/RIO/Rio.src/M000138.html +16 -0
  155. data/doc/rdoc/classes/RIO/Rio.src/M000139.html +16 -0
  156. data/doc/rdoc/classes/RIO/Rio.src/M000140.html +16 -0
  157. data/doc/rdoc/classes/RIO/Rio.src/M000141.html +16 -0
  158. data/doc/rdoc/classes/RIO/Rio.src/M000142.html +16 -0
  159. data/doc/rdoc/classes/RIO/Rio.src/M000143.html +16 -0
  160. data/doc/rdoc/classes/RIO/Rio.src/M000144.html +16 -0
  161. data/doc/rdoc/classes/RIO/Rio.src/M000145.html +16 -0
  162. data/doc/rdoc/classes/RIO/Rio.src/M000146.html +16 -0
  163. data/doc/rdoc/classes/RIO/Rio.src/M000147.html +16 -0
  164. data/doc/rdoc/classes/RIO/Rio.src/M000148.html +16 -0
  165. data/doc/rdoc/classes/RIO/Rio.src/M000149.html +16 -0
  166. data/doc/rdoc/classes/RIO/Rio.src/M000150.html +16 -0
  167. data/doc/rdoc/classes/RIO/Rio.src/M000151.html +16 -0
  168. data/doc/rdoc/classes/RIO/Rio.src/M000152.html +16 -0
  169. data/doc/rdoc/classes/RIO/Rio.src/M000153.html +16 -0
  170. data/doc/rdoc/classes/RIO/Rio.src/M000154.html +16 -0
  171. data/doc/rdoc/classes/RIO/Rio.src/M000155.html +16 -0
  172. data/doc/rdoc/classes/RIO/Rio.src/M000156.html +16 -0
  173. data/doc/rdoc/classes/RIO/Rio.src/M000157.html +16 -0
  174. data/doc/rdoc/classes/RIO/Rio.src/M000158.html +16 -0
  175. data/doc/rdoc/classes/RIO/Rio.src/M000159.html +16 -0
  176. data/doc/rdoc/classes/RIO/Rio.src/M000160.html +16 -0
  177. data/doc/rdoc/classes/RIO/Rio.src/M000161.html +16 -0
  178. data/doc/rdoc/classes/RIO/Rio.src/M000162.html +16 -0
  179. data/doc/rdoc/classes/RIO/Rio.src/M000163.html +16 -0
  180. data/doc/rdoc/classes/RIO/Rio.src/M000164.html +16 -0
  181. data/doc/rdoc/classes/RIO/Rio.src/M000165.html +16 -0
  182. data/doc/rdoc/classes/RIO/Rio.src/M000166.html +16 -0
  183. data/doc/rdoc/classes/RIO/Rio.src/M000167.html +16 -0
  184. data/doc/rdoc/classes/RIO/Rio.src/M000168.html +16 -0
  185. data/doc/rdoc/classes/RIO/Rio.src/M000169.html +16 -0
  186. data/doc/rdoc/classes/RIO/Rio.src/M000170.html +16 -0
  187. data/doc/rdoc/classes/RIO/Rio.src/M000171.html +16 -0
  188. data/doc/rdoc/classes/RIO/Rio.src/M000172.html +16 -0
  189. data/doc/rdoc/classes/RIO/Rio.src/M000173.html +16 -0
  190. data/doc/rdoc/classes/RIO/Rio.src/M000174.html +16 -0
  191. data/doc/rdoc/classes/RIO/Rio.src/M000175.html +16 -0
  192. data/doc/rdoc/classes/RIO/Rio.src/M000176.html +16 -0
  193. data/doc/rdoc/classes/RIO/Rio.src/M000177.html +16 -0
  194. data/doc/rdoc/classes/RIO/Rio.src/M000178.html +16 -0
  195. data/doc/rdoc/classes/RIO/Rio.src/M000179.html +16 -0
  196. data/doc/rdoc/classes/RIO/Rio.src/M000180.html +16 -0
  197. data/doc/rdoc/classes/RIO/Rio.src/M000181.html +16 -0
  198. data/doc/rdoc/classes/RIO/Rio.src/M000182.html +16 -0
  199. data/doc/rdoc/classes/RIO/Rio.src/M000183.html +16 -0
  200. data/doc/rdoc/classes/RIO/Rio.src/M000184.html +16 -0
  201. data/doc/rdoc/classes/RIO/Rio.src/M000185.html +16 -0
  202. data/doc/rdoc/classes/RIO/Rio.src/M000186.html +16 -0
  203. data/doc/rdoc/classes/RIO/Rio.src/M000187.html +16 -0
  204. data/doc/rdoc/classes/RIO/Rio.src/M000188.html +16 -0
  205. data/doc/rdoc/classes/RIO/Rio.src/M000189.html +16 -0
  206. data/doc/rdoc/classes/RIO/Rio.src/M000190.html +16 -0
  207. data/doc/rdoc/classes/RIO/Rio.src/M000191.html +16 -0
  208. data/doc/rdoc/classes/RIO/Rio.src/M000192.html +16 -0
  209. data/doc/rdoc/classes/RIO/Rio.src/M000193.html +16 -0
  210. data/doc/rdoc/classes/RIO/Rio.src/M000194.html +16 -0
  211. data/doc/rdoc/classes/RIO/Rio.src/M000195.html +16 -0
  212. data/doc/rdoc/classes/RIO/Rio.src/M000196.html +16 -0
  213. data/doc/rdoc/classes/RIO/Rio.src/M000197.html +16 -0
  214. data/doc/rdoc/classes/RIO/Rio.src/M000198.html +16 -0
  215. data/doc/rdoc/classes/RIO/Rio.src/M000199.html +16 -0
  216. data/doc/rdoc/classes/RIO/Rio.src/M000200.html +16 -0
  217. data/doc/rdoc/classes/RIO/Rio.src/M000201.html +16 -0
  218. data/doc/rdoc/classes/RIO/Rio.src/M000202.html +16 -0
  219. data/doc/rdoc/classes/RIO/Rio.src/M000203.html +16 -0
  220. data/doc/rdoc/classes/RIO/Rio.src/M000204.html +16 -0
  221. data/doc/rdoc/classes/RIO/Rio.src/M000205.html +16 -0
  222. data/doc/rdoc/classes/RIO/Rio.src/M000206.html +16 -0
  223. data/doc/rdoc/classes/RIO/Rio.src/M000207.html +16 -0
  224. data/doc/rdoc/classes/RIO/Rio.src/M000208.html +16 -0
  225. data/doc/rdoc/classes/RIO/Rio.src/M000209.html +16 -0
  226. data/doc/rdoc/classes/RIO/Rio.src/M000210.html +16 -0
  227. data/doc/rdoc/classes/RIO/Rio.src/M000211.html +16 -0
  228. data/doc/rdoc/classes/RIO/Rio.src/M000212.html +16 -0
  229. data/doc/rdoc/classes/RIO/Rio.src/M000213.html +16 -0
  230. data/doc/rdoc/created.rid +1 -0
  231. data/doc/rdoc/files/README.html +243 -0
  232. data/doc/rdoc/files/lib/rio/constructor_rb.html +142 -0
  233. data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +135 -0
  234. data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +135 -0
  235. data/doc/rdoc/files/lib/rio/doc/MISC_rb.html +135 -0
  236. data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +135 -0
  237. data/doc/rdoc/files/lib/rio/if/basic_rb.html +135 -0
  238. data/doc/rdoc/files/lib/rio/if/csv_rb.html +135 -0
  239. data/doc/rdoc/files/lib/rio/if/dir_rb.html +135 -0
  240. data/doc/rdoc/files/lib/rio/if/file_rb.html +135 -0
  241. data/doc/rdoc/files/lib/rio/if/fileordir_rb.html +135 -0
  242. data/doc/rdoc/files/lib/rio/if/grande_entry_rb.html +135 -0
  243. data/doc/rdoc/files/lib/rio/if/grande_rb.html +135 -0
  244. data/doc/rdoc/files/lib/rio/if/grande_stream_rb.html +135 -0
  245. data/doc/rdoc/files/lib/rio/if/internal_rb.html +135 -0
  246. data/doc/rdoc/files/lib/rio/if/path_rb.html +135 -0
  247. data/doc/rdoc/files/lib/rio/if/stream_rb.html +135 -0
  248. data/doc/rdoc/files/lib/rio/if/string_rb.html +135 -0
  249. data/doc/rdoc/files/lib/rio/if/temp_rb.html +135 -0
  250. data/doc/rdoc/files/lib/rio/if/test_rb.html +135 -0
  251. data/doc/rdoc/files/lib/rio/if/yaml_rb.html +135 -0
  252. data/doc/rdoc/files/lib/rio/kernel_rb.html +142 -0
  253. data/doc/rdoc/files/lib/rio_rb.html +154 -0
  254. data/doc/rdoc/fr_class_index.html +37 -0
  255. data/doc/rdoc/fr_file_index.html +49 -0
  256. data/doc/rdoc/fr_method_index.html +241 -0
  257. data/doc/rdoc/index.html +24 -0
  258. data/doc/rdoc/rdoc-style.css +384 -0
  259. data/lib/rio.rb +21 -5
  260. data/lib/rio/constructor.rb +13 -0
  261. data/lib/rio/context/copying.rb +56 -0
  262. data/lib/rio/context/methods.rb +1 -0
  263. data/lib/rio/cp.rb +53 -34
  264. data/lib/rio/doc/HOWTO.rb +9 -3
  265. data/lib/rio/doc/INTRO.rb +113 -3
  266. data/lib/rio/ext.rb +7 -1
  267. data/lib/rio/ext/csv.rb +17 -8
  268. data/lib/rio/ext/yaml.rb +182 -0
  269. data/lib/rio/factory.rb +11 -14
  270. data/lib/rio/filter/closeoneof.rb +12 -31
  271. data/lib/rio/filter/gzip.rb +7 -0
  272. data/lib/rio/if.rb +4 -1
  273. data/lib/rio/if/csv.rb +36 -35
  274. data/lib/rio/if/grande.rb +74 -5
  275. data/lib/rio/if/grande_stream.rb +11 -3
  276. data/lib/rio/if/path.rb +9 -8
  277. data/lib/rio/if/yaml.rb +218 -0
  278. data/lib/rio/ioh.rb +5 -3
  279. data/lib/rio/matchrecord.rb +9 -2
  280. data/lib/rio/ops/dir.rb +2 -1
  281. data/lib/rio/ops/either.rb +9 -9
  282. data/lib/rio/ops/file.rb +4 -1
  283. data/lib/rio/ops/path.rb +26 -20
  284. data/lib/rio/ops/stream.rb +1 -1
  285. data/lib/rio/ops/stream/input.rb +31 -9
  286. data/lib/rio/ops/stream/output.rb +7 -2
  287. data/lib/rio/ops/stream/read.rb +10 -10
  288. data/lib/rio/ops/stream/write.rb +10 -10
  289. data/lib/rio/path.rb +2 -2
  290. data/lib/rio/path/reset.rb +1 -1
  291. data/lib/rio/piper.rb +123 -0
  292. data/lib/rio/piper/cp.rb +81 -0
  293. data/lib/rio/rectype.rb +2 -2
  294. data/lib/rio/rl/base.rb +40 -17
  295. data/lib/rio/rl/builder.rb +8 -47
  296. data/lib/rio/rl/ioi.rb +3 -2
  297. data/lib/rio/rl/path.rb +101 -78
  298. data/lib/rio/rl/pathmethods.rb +95 -0
  299. data/lib/rio/rl/uri.rb +41 -51
  300. data/lib/rio/scheme/cmdio.rb +7 -1
  301. data/lib/rio/scheme/cmdpipe.rb +150 -0
  302. data/lib/rio/scheme/ftp.rb +0 -4
  303. data/lib/rio/scheme/http.rb +0 -2
  304. data/lib/rio/scheme/strio.rb +16 -0
  305. data/lib/rio/scheme/temp.rb +7 -7
  306. data/lib/rio/state.rb +23 -5
  307. data/lib/rio/stream.rb +4 -0
  308. data/lib/rio/stream/duplex.rb +1 -0
  309. data/lib/rio/stream/open.rb +8 -2
  310. data/lib/rio/version.rb +1 -1
  311. data/test/{runtests_gem.rb → gem_runtests.rb} +0 -0
  312. data/test/methods/path.rb +12 -0
  313. data/test/runtests.rb +2 -0
  314. data/test/tc/abs.rb +29 -27
  315. data/test/tc/all.rb +9 -3
  316. data/test/tc/base.rb +31 -0
  317. data/test/tc/cmdpipe.rb +146 -0
  318. data/test/tc/copydir.rb +2 -1
  319. data/test/tc/create.rb +10 -0
  320. data/test/tc/csv.rb +12 -12
  321. data/test/tc/csv2.rb +2 -2
  322. data/test/tc/csv_columns.rb +3 -3
  323. data/test/tc/each_break.rb +21 -8
  324. data/test/tc/expand_path.rb +21 -27
  325. data/test/tc/misc.rb +0 -1
  326. data/test/tc/noqae.rb +29 -21
  327. data/test/tc/overload.rb +14 -11
  328. data/test/tc/piper.rb +146 -0
  329. data/test/tc/riorl.rb +26 -17
  330. data/test/tc/route.rb +51 -0
  331. data/test/tc/skip.rb +8 -6
  332. data/test/tc/split.rb +70 -0
  333. data/test/tc/temp.rb +5 -5
  334. data/test/tc/testcase.rb +1 -0
  335. data/test/tc/yaml.rb +118 -0
  336. metadata +481 -229
  337. data/doc/README_MSWIN32.txt +0 -39
  338. data/ex/colx.rb +0 -8
  339. data/ex/findinruby +0 -23
  340. data/ex/findruby +0 -15
  341. data/ex/passwd_report.rb +0 -8
  342. data/ex/prompt.rb +0 -25
  343. data/ex/rgb.txt.gz +0 -0
  344. data/ex/riocat +0 -35
  345. data/ex/riogunzip +0 -31
  346. data/ex/riogzip +0 -24
  347. data/ex/rioprompt.rb +0 -6
  348. data/ex/tolf +0 -11
  349. data/test/mswin32.rb +0 -28
@@ -0,0 +1,443 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: RIO::Doc::MISC</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td class="class-mod"><strong>Module</strong></td>
53
+ <td class="class-name-in-header">RIO::Doc::MISC</td>
54
+ <td rowspan="2" class="class-header-space-col"></td>
55
+ <td rowspan="2">
56
+ <a class="in-url" href="../../../files/lib/rio/doc/MISC_rb.html">
57
+ lib/rio/doc/MISC.rb
58
+ </a>
59
+ &nbsp;&nbsp;
60
+ </td>
61
+ </tr>
62
+
63
+ </table>
64
+ </div>
65
+ <!-- banner header -->
66
+
67
+ <div id="bodyContent">
68
+
69
+
70
+
71
+ <div id="contextContent">
72
+
73
+ <div id="description">
74
+ <p>
75
+ The following example are provided without comment
76
+ </p>
77
+ <pre>
78
+ array = rio('afile').readlines
79
+
80
+ rio('afile') &gt; rio('acopy')
81
+
82
+ ary = rio('afile').chomp.lines[0...10]
83
+
84
+ rio('adir').rename.all.files('*.htm') do |file|
85
+ file.ext = '.html'
86
+ end
87
+ </pre>
88
+ <p>
89
+ A basic familiarity with ruby and shell operations should allow a casual
90
+ reader to guess what these examples will do. How they are being performed
91
+ may not be what a casual reader might expect. I will explain these example
92
+ to illustrate the <a href="../Rio.html">Rio</a> basics.
93
+ </p>
94
+ <p>
95
+ For many more examples please read the <a href="HOWTO.html">HOWTO</a>
96
+ document and the rdoc documentation.
97
+ </p>
98
+ <h2>Example 1.</h2>
99
+ <pre>
100
+ array = rio('afile').readlines
101
+ </pre>
102
+ <p>
103
+ This uses IO#readlines to read the lines of &#8216;afile&#8217; into an
104
+ array.
105
+ </p>
106
+ <h3>Creating a <a href="../Rio.html">Rio</a></h3>
107
+ <p>
108
+ <a href="../Rio.html">Rio</a> extends the module <a
109
+ href="../../Kernel.html">Kernel</a> by adding one function <em>rio</em>,
110
+ which acts as a constructor returning a <a href="../Rio.html">Rio</a>. This
111
+ constructor builds a description of the resource the <a
112
+ href="../Rio.html">Rio</a> will access (usually a path). It does not open
113
+ the resource, check for its existance, or do anything except remember its
114
+ specifcation. <em>rio</em> returns the <a href="../Rio.html">Rio</a> which
115
+ can be chained to a <a href="../Rio.html">Rio</a> method as in this example
116
+ or stored in a variable. This coud have been written
117
+ </p>
118
+ <pre>
119
+ ario = rio('afile')
120
+ array = ario.readlines
121
+
122
+ ario = rio('afile')
123
+ </pre>
124
+ <p>
125
+ In this case the resource specified is a relative path. After the first
126
+ line the <a href="../Rio.html">Rio</a> does know or care whether it is a
127
+ path to a file nor whether it exists. <a href="../Rio.html">Rio</a>
128
+ provides many methods that only deal with a resource at this level, much as
129
+ the standard library classes Pathname and URI. It should be noted at this
130
+ point that <a href="../Rio.html">Rio</a> paths stored internally as a URL
131
+ as specified in RFC 1738 and therefore use slashes as separators. A
132
+ resource can also be specified without separators, because <em>rio</em>
133
+ interprets multiple arguments as parts of a path to be joined, and an array
134
+ as an array of parts to be joined. So the following all specify the same
135
+ resource.
136
+ </p>
137
+ <pre>
138
+ rio('adir/afile')
139
+ rio('adir','afile')
140
+ rio(%w/adir afile/)
141
+ </pre>
142
+ <p>
143
+ The rio constructor can be used to specify non-file-system resources, but
144
+ for this example we will restrict our discussion to paths to entities on
145
+ file-systems.
146
+ </p>
147
+ <pre>
148
+ array = ario.readlines
149
+ </pre>
150
+ <p>
151
+ Now that we have a <a href="../Rio.html">Rio</a>, we can call one of its
152
+ methods; in this case <em>readlines</em>. This is an example of using a <a
153
+ href="../Rio.html">Rio</a> as a proxy for the builtin IO#readlines. Given
154
+ the method <em>readlines</em>, the <a href="../Rio.html">Rio</a> opens
155
+ &#8216;afile&#8217; for reading, calls readlines on the resulting IO
156
+ object, closes the IO object, and returns the lines read.
157
+ </p>
158
+ <h2>Example 2</h2>
159
+ <pre>
160
+ rio('afile') &gt; rio('acopy')
161
+ </pre>
162
+ <p>
163
+ This copies the file &#8216;afile&#8217; into the file &#8216;acopy&#8217;.
164
+ </p>
165
+ <p>
166
+ The first things that happen here are the creation of the Rios. As
167
+ described in Example 1, when created a <a href="../Rio.html">Rio</a> simply
168
+ remembers the specifcation of its resource. In this case, a relative path
169
+ &#8216;afile&#8217; on the left and a relative path &#8216;acopy&#8217; on
170
+ the right.
171
+ </p>
172
+ <p>
173
+ Next the <a href="../Rio.html">Rio</a>#&gt; (copy-to) method is called on
174
+ the &#8216;afile&#8217; <a href="../Rio.html">Rio</a> with the
175
+ &#8216;acopy&#8217; <a href="../Rio.html">Rio</a> as its argument. If that
176
+ looks like a greater-than operator to you, think Unix shell, with Rios
177
+ &#8217;&gt;&#8217; is the copy-to operator.
178
+ </p>
179
+ <p>
180
+ Upon seeing the copy-to operator, the <a href="../Rio.html">Rio</a> has all
181
+ the information it needs to proceed. It determines that it must be opened
182
+ for reading, that its argument must be opened for writing, and that
183
+ it&#8217;s contents must be copied to the resource referenced by it&#8217;
184
+ argument &#8212; and that is what it does. Then it closes itself and its
185
+ argument.
186
+ </p>
187
+ <p>
188
+ Consider if we had written this example this way.
189
+ </p>
190
+ <pre>
191
+ afile = rio('afile')
192
+ acopy = rio('acopy')
193
+ afile &gt; acopy
194
+ </pre>
195
+ <p>
196
+ In this case we would still have variables referencing the Rios, and
197
+ perhaps we would like do things a little differently than described above.
198
+ Be assured that the selection of mode and automatic closing of files are
199
+ the default behaviour and can be changed. Say we wanted &#8216;afile&#8217;
200
+ to remain open so that we could rewind it and make a second copy, we might
201
+ do something like this:
202
+ </p>
203
+ <pre>
204
+ afile = rio('afile').nocloseoneof
205
+ afile &gt; rio('acopy1')
206
+ afile.rewind &gt; rio('acopy2')
207
+ afile.close
208
+ </pre>
209
+ <p>
210
+ Actually the &#8216;thinking process&#8217; of the <a
211
+ href="../Rio.html">Rio</a> when it sees a copy-to operator is much more
212
+ complex that described above. If its argument had been a rio referencing a
213
+ directory, it would not have opened itself for reading, but instead used
214
+ FileUtils#cp to copy itself; if its argument had been a string, its
215
+ contents would have ended up in the string; If its argument had been an
216
+ array, its lines would been elements of that array; if its argument had
217
+ been a socket, the its contents would have been copied to the socket. See
218
+ the documentation for details.
219
+ </p>
220
+ <h2>Example 3.</h2>
221
+ <pre>
222
+ array = rio('afile').chomp.lines[0...10]
223
+ </pre>
224
+ <p>
225
+ This fills <tt>array</tt> with the first ten lines of &#8216;afile&#8217;,
226
+ with each line chomped
227
+ </p>
228
+ <p>
229
+ The casual observer mentioned above might think that <tt>lines</tt> returns
230
+ an array of lines and that this is a simple rewording of <tt>array = <a
231
+ href="http://0...10">rio('afile').readlines</a></tt> or even of <tt>array =
232
+ <a href="http://0...10">File.new('afile').readlines</a></tt>. They would be
233
+ wrong.
234
+ </p>
235
+ <p>
236
+ <tt>chomp</tt> is a configuration method which turns on chomp-mode and
237
+ returns the <a href="../Rio.html">Rio</a>. Chomp-mode causes all line
238
+ oriented read operations to perform a String#chomp on each line
239
+ </p>
240
+ <h3>Reading files</h3>
241
+ <p>
242
+ <a href="../Rio.html">Rio</a> provides four methods to select which part of
243
+ the file is read and how the file is divided. They are <tt>lines</tt>,
244
+ <tt>records</tt>, <tt>rows</tt> and <tt>bytes</tt>. Briefly, <tt>lines</tt>
245
+ specifies that the file should be read line by line and +bytes(n)+
246
+ specifies that the file should be read in <em>n</em> byte chunks. All four
247
+ take arguments which can be used to filter lines or chunks in or out. For
248
+ simple Rios <tt>records</tt> and <tt>rows</tt> only specify the filter
249
+ arguments and are provided for use be extensions. For example, the CSV
250
+ extension returns an array of the columns in a line when <tt>records</tt>
251
+ is used. In the absence of an extension <tt>records</tt> and <tt>rows</tt>
252
+ behave like <tt>lines</tt>.
253
+ </p>
254
+ <p>
255
+ First lets rewrite our example as:
256
+ </p>
257
+ <pre>
258
+ array = rio('afile').chomp.lines(0...10).to_a
259
+ </pre>
260
+ <p>
261
+ The arguments to lines specify which records are to be read. Arguments are
262
+ interpreted based on their class as follows:
263
+ </p>
264
+ <ul>
265
+ <li>Range - interpreted as a range of record numbers to be read
266
+
267
+ </li>
268
+ <li>Integer - interpreted as a one-element range
269
+
270
+ </li>
271
+ <li>RegExp - only matching records are processed
272
+
273
+ </li>
274
+ <li>Symbol - sent to each record, which is processed unless the result is false
275
+ or nil
276
+
277
+ </li>
278
+ <li>Proc - called for each record, the record is processed unless the return
279
+ value is false or nil
280
+
281
+ </li>
282
+ </ul>
283
+ <p>
284
+ See the documentation for details and examples.
285
+ </p>
286
+ <p>
287
+ In our example we have specified the Range (0...10). The <tt>lines</tt>
288
+ method is just configuring the <a href="../Rio.html">Rio</a>, it does not
289
+ trigger any IO operation. The fact that it was called and the arguments it
290
+ was called with are stored away and the <a href="../Rio.html">Rio</a> is
291
+ returned for further configuration or an actual IO operation. When an IO
292
+ operation is called the Range will be used to limit processing to the first
293
+ ten records. For example:
294
+ </p>
295
+ <pre>
296
+ rio('afile').lines(0...10).each { |line| ... } # block will be called for the first 10 records
297
+ rio('afile').lines(0...10).to_a # the first 10 records will be returned in an array
298
+ rio('afile').lines(0...10) &gt; rio('acopy') # the first 10 records will be copied to 'acopy'
299
+ </pre>
300
+ <p>
301
+ &quot;But wait&quot;, you say, &quot;In our original example the range was
302
+ an argument to the subscript operator, not to <tt>lines</tt>&quot;. This
303
+ works because the subscript operator processes its arguments as if they had
304
+ been arguments to the most-recently-called selection method and then calls
305
+ <tt>to_a</tt> on the rio. So our rewrite of the example does precisely the
306
+ same thing as the original
307
+ </p>
308
+ <p>
309
+ The big difference between the original example and the
310
+ casual-observer&#8217;s solution is that hers creates an array of the
311
+ entire contents and only returns the first 10 while the original only puts
312
+ 10 records into the array.
313
+ </p>
314
+ <p>
315
+ As a sidenote, Rios also have an optimization that can really help in
316
+ certain situations. If records are only selected using Ranges, it stops
317
+ iterating when it is beyond the point where it could possibly ever match.
318
+ This can make a dramatic difference when one is only interested in the
319
+ first few lines of very large files.
320
+ </p>
321
+ <h2>Example 4.</h2>
322
+ <pre>
323
+ rio('adir').rename.all.files('*.htm') do |file|
324
+ file.ext = '.html'
325
+ end
326
+ </pre>
327
+ <p>
328
+ This changes the extension of all .htm files below &#8216;adir&#8217; to
329
+ &#8217;.html&#8217;
330
+ </p>
331
+ <p>
332
+ First we create the rio as always.
333
+ </p>
334
+ <p>
335
+ Next we process the <tt>rename</tt> method. When used as it is here &#8212;
336
+ without arguments &#8212; it just turns on rename-mode and returns the <a
337
+ href="../Rio.html">Rio</a>.
338
+ </p>
339
+ <p>
340
+ <tt>all</tt> is another configuration method, which causes directories to
341
+ be processed recursively
342
+ </p>
343
+ <p>
344
+ <tt>files</tt> is another configuration method. In example 3 we used
345
+ <tt>lines</tt> to select what to process when iterating through a file.
346
+ <tt>files</tt> is used to select what to process when iterating through
347
+ directories. The arguments to <tt>files</tt> can be the same as those for
348
+ <tt>lines</tt> except that Ranges can not be used and globs can.
349
+ </p>
350
+ <p>
351
+ In our example, the argument to <tt>files</tt> is a string which is treated
352
+ as a glob. As with <tt>lines</tt>, <tt>files</tt> does not trigger any IO,
353
+ it just configures the <a href="../Rio.html">Rio</a>.
354
+ </p>
355
+ <h3>There&#8217;s no action</h3>
356
+ <p>
357
+ The previous examples had something that triggered IO: <tt>readlines</tt>,
358
+ <tt>to_a</tt>, <tt>each</tt>, <tt>&gt; (copy-to)</tt>. This example does
359
+ not. This example illustrates <a href="../Rio.html">Rio</a>&#8217;s
360
+ &#8216;implied each&#8217;. All the configuration methods will call each
361
+ for you if a block is given. So, because a block follows the files method,
362
+ it calls <tt>each</tt> and passes it the block.
363
+ </p>
364
+ <p>
365
+ Let&#8217;s recap. At this point we have a <a href="../Rio.html">Rio</a>
366
+ with a resource specified. We have configured with a couple of modes,
367
+ &#8216;rename&#8217;, and &#8216;all&#8217;, and we have limited the
368
+ elements we want to process to entries that are files and match the glob
369
+ &#8217;*.htm&#8217;. <tt>each</tt> causes the <a href="../Rio.html">Rio</a>
370
+ to open the directory and call the block for each entry that is both a file
371
+ and matches the glob. It was also configured with <tt>all</tt>,so it
372
+ descends into subdirectories to find further matches and calles the block
373
+ for each of them. The argument passed to the block is a <a
374
+ href="../Rio.html">Rio</a> referencing the entry on the file-system.
375
+ </p>
376
+ <p>
377
+ The <em>rename_mode</em> we set has had no effect on our iteration at all,
378
+ so why is it there? In general, configuration options that are not
379
+ applicable to a <a href="../Rio.html">Rio</a> are silently ignored,
380
+ however, for directories some of them are passed on to the Rios for each
381
+ entry when iterating. Since <tt>rename</tt> is one such option, The example
382
+ could have been written:
383
+ </p>
384
+ <pre>
385
+ rio('adir').all.files('*.htm') do |file|
386
+ file.rename.ext = '.html'
387
+ end
388
+ </pre>
389
+ <p>
390
+ The rename-with-no-args method affects the behaviour of the <tt>ext=</tt>
391
+ option. In this case, setting it for the directory, rather than for each
392
+ file in the block seems to make the intent of the code more clear, but that
393
+ is a matter of personal taste. See the documentation for more information
394
+ on the rename-with-no-args method
395
+ </p>
396
+ <h2>Suggested Reading</h2>
397
+ <ul>
398
+ <li><a href="SYNOPSIS.html">RIO::Doc::SYNOPSIS</a>
399
+
400
+ </li>
401
+ <li><a href="INTRO.html">RIO::Doc::INTRO</a>
402
+
403
+ </li>
404
+ <li><a href="HOWTO.html">RIO::Doc::HOWTO</a>
405
+
406
+ </li>
407
+ <li><a href="../Rio.html">RIO::Rio</a>
408
+
409
+ </li>
410
+ </ul>
411
+
412
+ </div>
413
+
414
+
415
+ </div>
416
+
417
+
418
+ </div>
419
+
420
+
421
+ <!-- if includes -->
422
+
423
+ <div id="section">
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+ <!-- if method_list -->
433
+
434
+
435
+ </div>
436
+
437
+
438
+ <div id="validator-badges">
439
+ <p><small>Copyright &copy; 2005 Christopher Kleckner. <a href="http://www.gnu.org/licenses/gpl.html">All rights reserved</a>.</small></p>
440
+ </div>
441
+
442
+ </body>
443
+ </html>
@@ -0,0 +1,338 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: RIO::Doc::SYNOPSIS</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td class="class-mod"><strong>Module</strong></td>
53
+ <td class="class-name-in-header">RIO::Doc::SYNOPSIS</td>
54
+ <td rowspan="2" class="class-header-space-col"></td>
55
+ <td rowspan="2">
56
+ <a class="in-url" href="../../../files/lib/rio/doc/SYNOPSIS_rb.html">
57
+ lib/rio/doc/SYNOPSIS.rb
58
+ </a>
59
+ &nbsp;&nbsp;
60
+ </td>
61
+ </tr>
62
+
63
+ </table>
64
+ </div>
65
+ <!-- banner header -->
66
+
67
+ <div id="bodyContent">
68
+
69
+
70
+
71
+ <div id="contextContent">
72
+
73
+ <div id="description">
74
+ <h1><a href="../Rio.html">Rio</a> - Ruby I/O Comfort Class</h1>
75
+ <p>
76
+ <a href="../Rio.html">Rio</a> is a convenience class wrapping much of the
77
+ functionality of IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO,
78
+ OpenURI, Zlib, and CSV.
79
+ </p>
80
+ <h2><a href="SYNOPSIS.html">SYNOPSIS</a></h2>
81
+ <p>
82
+ For the following assume:
83
+ </p>
84
+ <pre>
85
+ astring = &quot;&quot;
86
+ anarray = []
87
+ </pre>
88
+ <p>
89
+ Copy or append a file to a string
90
+ </p>
91
+ <pre>
92
+ rio('afile') &gt; astring # copy
93
+ rio('afile') &gt;&gt; astring # append
94
+ </pre>
95
+ <p>
96
+ Copy or append a string to a file
97
+ </p>
98
+ <pre>
99
+ rio('afile') &lt; astring # copy
100
+ rio('afile') &lt;&lt; astring # append
101
+ </pre>
102
+ <p>
103
+ Copy or append the lines of a file to an array
104
+ </p>
105
+ <pre>
106
+ rio('afile') &gt; anarray
107
+ rio('afile') &gt;&gt; anarray
108
+ </pre>
109
+ <p>
110
+ Copy or append a file to another file
111
+ </p>
112
+ <pre>
113
+ rio('afile') &gt; rio('another_file')
114
+ rio('afile') &gt;&gt; rio('another_file')
115
+ </pre>
116
+ <p>
117
+ Copy a file to a directory
118
+ </p>
119
+ <pre>
120
+ rio('adir') &lt;&lt; rio('afile')
121
+ </pre>
122
+ <p>
123
+ Copy a directory structure to another directory
124
+ </p>
125
+ <pre>
126
+ rio('adir') &gt;&gt; rio('another_directory')
127
+ </pre>
128
+ <p>
129
+ Copy a web-page to a file
130
+ </p>
131
+ <pre>
132
+ rio('http://rubydoc.org/') &gt; rio('afile')
133
+ </pre>
134
+ <p>
135
+ Ways to get the chomped lines of a file into an array
136
+ </p>
137
+ <pre>
138
+ anarray = rio('afile').chomp[] # subscript operator
139
+ rio('afile').chomp &gt; anarray # copy-to operator
140
+ anarray = rio('afile').chomp.to_a # to_a
141
+ anarray = rio('afile').chomp.readlines # IO#readlines
142
+ </pre>
143
+ <p>
144
+ Copy a gzipped file un-gzipping it
145
+ </p>
146
+ <pre>
147
+ rio('afile.gz').gzip &gt; rio('afile')
148
+ </pre>
149
+ <p>
150
+ Copy a plain file, gzipping it
151
+ </p>
152
+ <pre>
153
+ rio('afile.gz').gzip &lt; rio('afile')
154
+ </pre>
155
+ <p>
156
+ Copy a file from a ftp server into a local file un-gzipping it
157
+ </p>
158
+ <pre>
159
+ rio('ftp://host/afile.gz').gzip &gt; rio('afile')
160
+ </pre>
161
+ <p>
162
+ Iterate over the entries in a directory
163
+ </p>
164
+ <pre>
165
+ rio('adir').entries { |entrio| ... }
166
+ </pre>
167
+ <p>
168
+ Iterate over only the files in a directory
169
+ </p>
170
+ <pre>
171
+ rio('adir').files { |entrio| ... }
172
+ </pre>
173
+ <p>
174
+ Iterate over only the .rb files in a directory
175
+ </p>
176
+ <pre>
177
+ rio('adir').files('*.rb') { |entrio| ... }
178
+ </pre>
179
+ <p>
180
+ Iterate over only the <em>dot</em> files in a directory
181
+ </p>
182
+ <pre>
183
+ rio('adir').files(/^\./) { |entrio| ... }
184
+ </pre>
185
+ <p>
186
+ Iterate over the files in a directory and its subdirectories, skipping
187
+ &#8217;.svn&#8217; and &#8216;CVS&#8217; directories
188
+ </p>
189
+ <pre>
190
+ rio('adir').norecurse(/^\.svn$/,'CVS').files { |entrio| ... }
191
+ </pre>
192
+ <p>
193
+ Create an array of the .rb entries in a directory
194
+ </p>
195
+ <pre>
196
+ anarray = rio('adir')['*.rb']
197
+ </pre>
198
+ <p>
199
+ Create an array of the .rb entries in a directory and its subdirectories
200
+ </p>
201
+ <pre>
202
+ anarray = rio('adir').all['*.rb']
203
+ </pre>
204
+ <p>
205
+ Iterate over the .rb files in a directory and its subdirectories
206
+ </p>
207
+ <pre>
208
+ rio('adir').all.files('*.rb') { |entrio| ... }
209
+ </pre>
210
+ <p>
211
+ Copy an entire directory structure and the .rb files within it
212
+ </p>
213
+ <pre>
214
+ rio('adir').dirs.files('*.rb') &gt; rio('another_directory')
215
+ </pre>
216
+ <p>
217
+ Iterate over the first 10 chomped lines of a file
218
+ </p>
219
+ <pre>
220
+ rio('afile').chomp.lines(0..9) { |line| ... }
221
+ </pre>
222
+ <p>
223
+ Put the first 10 chomped lines of a file into an array
224
+ </p>
225
+ <pre>
226
+ anarray = rio('afile').chomp.lines[0..9]
227
+ </pre>
228
+ <p>
229
+ Copy the first 10 lines of a file into another file
230
+ </p>
231
+ <pre>
232
+ rio('afile').lines(0..9) &gt; rio('another_file')
233
+ </pre>
234
+ <p>
235
+ Copy the first 10 lines of a file to stdout
236
+ </p>
237
+ <pre>
238
+ rio('afile').lines(0..9) &gt; rio(?-)
239
+ </pre>
240
+ <p>
241
+ Copy the first 10 lines of a gzipped file on an ftp server to stdout
242
+ </p>
243
+ <pre>
244
+ rio('ftp://host/afile.gz').gzip.lines(0..9) &gt; rio(?-)
245
+ </pre>
246
+ <p>
247
+ Put the first 100 chomped lines of a gzipped file into an array
248
+ </p>
249
+ <pre>
250
+ anarray = rio('afile.gz').chomp.gzip[0...100]
251
+ </pre>
252
+ <p>
253
+ Put chomped lines that start with &#8216;<a
254
+ href="../Rio.html">Rio</a>&#8217; into an array
255
+ </p>
256
+ <pre>
257
+ anarray = rio('afile').chomp[/^Rio/]
258
+ </pre>
259
+ <p>
260
+ Iterate over the non-empty, non-comment chomped lines of a file
261
+ </p>
262
+ <pre>
263
+ rio('afile').chomp.skiplines(:empty?,/^\s*#/) { |line| ... }
264
+ </pre>
265
+ <p>
266
+ Copy the output of th ps command into an array, skipping the header line
267
+ and the ps command entry
268
+ </p>
269
+ <pre>
270
+ rio(?-,'ps -a').skiplines(0,/ps$/) &gt; anarray
271
+ </pre>
272
+ <p>
273
+ Prompt for input and return what was typed
274
+ </p>
275
+ <pre>
276
+ ans = rio(?-).print(&quot;Type Something: &quot;).chomp.gets
277
+ </pre>
278
+ <p>
279
+ Change the extension of all .htm files in a directory and its
280
+ subdirectories to .html
281
+ </p>
282
+ <pre>
283
+ rio('adir').rename.all.files('*.htm') do |htmfile|
284
+ htmfile.extname = '.html'
285
+ end
286
+ </pre>
287
+ <p>
288
+ Create a symbolic link &#8216;asymlink&#8217; in &#8216;adir&#8217; which
289
+ refers to &#8216;adir/afile&#8216;
290
+ </p>
291
+ <pre>
292
+ rio('adir/afile').symlink('adir/asymlink')
293
+ </pre>
294
+ <h3>SUGGESTED READING</h3>
295
+ <ul>
296
+ <li><a href="INTRO.html">RIO::Doc::INTRO</a>
297
+
298
+ </li>
299
+ <li><a href="HOWTO.html">RIO::Doc::HOWTO</a>
300
+
301
+ </li>
302
+ <li><a href="../Rio.html">RIO::Rio</a>
303
+
304
+ </li>
305
+ </ul>
306
+
307
+ </div>
308
+
309
+
310
+ </div>
311
+
312
+
313
+ </div>
314
+
315
+
316
+ <!-- if includes -->
317
+
318
+ <div id="section">
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+ <!-- if method_list -->
328
+
329
+
330
+ </div>
331
+
332
+
333
+ <div id="validator-badges">
334
+ <p><small>Copyright &copy; 2005 Christopher Kleckner. <a href="http://www.gnu.org/licenses/gpl.html">All rights reserved</a>.</small></p>
335
+ </div>
336
+
337
+ </body>
338
+ </html>