rio 0.3.4 → 0.3.6

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 (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
@@ -198,6 +198,19 @@ module RIO
198
198
  #
199
199
  # This is Rio's interface to IO#popen
200
200
  #
201
+ # ===== Creating a Rio Pipe
202
+ #
203
+ # A Rio Pipe is a sequence of Rios that are run with the output of each being
204
+ # copied to the input of the next.
205
+ #
206
+ # <tt>rio(?|, ario, ...)</tt> (mnemonic: '|' is the Unix pipe operator)
207
+ #
208
+ # <tt>rio(:cmdpipe, ario, ...)</tt>
209
+ #
210
+ #
211
+ # See also Rio#|
212
+ #
213
+ #
201
214
  def rio(*args,&block) # :yields: self
202
215
  Rio.rio(*args,&block)
203
216
  end
@@ -0,0 +1,56 @@
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
+ require 'rio/context/cxx.rb'
39
+ module RIO
40
+ module Cx
41
+ module Methods
42
+ def copying_to() cx['copying_to'] = true; self end
43
+ def copying_to?() cx['copying_to'] end
44
+ def copying_to_done() cx.delete('copying_to'); self end
45
+
46
+ def copying_from() cx['copying_from'] = true; self end
47
+ def copying_from?() cx['copying_from'] end
48
+ def copying_from_done() cx.delete('copying_from'); self end
49
+
50
+ def copying(dest) dest.copying_to; copying_from end
51
+ def copying?() copying_to? or copying_from? end
52
+ def copying_done(dest) dest.copying_to_done; copying_from_done end
53
+ end
54
+ end
55
+ end
56
+
@@ -44,6 +44,7 @@ require 'rio/context/skip'
44
44
  require 'rio/filter'
45
45
  require 'rio/context/closeoneof'
46
46
  require 'rio/context/gzip'
47
+ require 'rio/context/copying'
47
48
 
48
49
  module RIO
49
50
  module Cx #:nodoc: all
@@ -101,35 +101,53 @@ module RIO
101
101
  include Util::Input
102
102
  def >>(arg)
103
103
  cpclose(arg) {
104
- case arg
105
- when ::Array,::String,::IO then cpto_obj_(arg)
106
- else _cpto_rio(arg,:<<)
107
- end
108
- self
104
+ apto_(arg)
109
105
  }
110
106
  end
111
107
  def >(arg)
112
108
  cpclose(arg) {
113
- case arg
114
- when ::Array,::String then cpto_obj_(arg.clear)
115
- when ::IO then cpto_obj_(arg)
116
- else _cpto_rio(arg,:<)
117
- end
118
- self
109
+ cpto_(arg)
119
110
  }
120
111
  end
121
112
  alias :copy_to :>
122
113
  alias :append_to :>>
123
- private
124
114
 
125
- def _cpto_rio(arg,sym)
115
+ protected
116
+ def cpto_(arg)
117
+ case arg
118
+ when ::Array then cpto_array_(arg.clear)
119
+ when ::String then cpto_string_(arg.clear)
120
+ when ::IO then cpto_obj_(arg)
121
+ else cpto_rio_(arg,:<)
122
+ end
123
+ self
124
+ end
125
+ def apto_(arg)
126
+ case arg
127
+ when ::Array then cpto_array_(arg)
128
+ when ::String then cpto_string_(arg)
129
+ when ::IO then cpto_obj_(arg)
130
+ else cpto_rio_(arg,:<<)
131
+ end
132
+ self
133
+ end
134
+
135
+ def cpto_array_(arg)
136
+ cpto_obj_(arg)
137
+ end
138
+ def cpto_string_(arg)
139
+ cpto_obj_(arg)
140
+ end
141
+
142
+ def cpto_rio_(arg,sym)
126
143
  ario = ensure_rio(arg)
127
144
  ario = ario.join(self.filename) if ario.dir?
128
145
  ario.cpclose {
129
146
  ario = ario.iostate(sym)
130
- self.each do |el|
131
- ario << el
132
- end
147
+ self.copying(ario).each { |el|
148
+ ario.putrec(el)
149
+ # ario << el
150
+ }.copying_done(ario)
133
151
  ario
134
152
  }
135
153
  end
@@ -137,26 +155,27 @@ module RIO
137
155
 
138
156
  module Output
139
157
  include Util::Output
140
- def <<(arg) cpclose { _cpfrom(arg) } end
141
- def <(arg) cpclose { _cpfrom(arg) } end
158
+ def <<(arg) cpclose { cpfrom_(arg) } end
159
+ def <(arg) cpclose { cpfrom_(arg) } end
142
160
  alias :copy_from :<
143
161
  alias :append_from :<<
144
162
 
145
- private
163
+ protected
146
164
 
147
- def _cpfrom(arg)
165
+ def cpfrom_(arg)
148
166
  case arg
149
167
  when ::Array then cpfrom_array_(arg)
150
168
  when ::IO then cpfrom_obj_(arg)
151
169
  when ::String then self.put_(arg)
152
- else _cpfrom_rio(arg)
170
+ else cpfrom_rio_(arg)
153
171
  end
154
172
  self
155
173
  end
156
- def _cpfrom_rio(arg)
157
- ensure_rio(arg).each do |el|
158
- self << el
159
- end
174
+ def cpfrom_rio_(arg)
175
+ ensure_rio(arg).copying(self).each { |el|
176
+ self.putrec(el)
177
+ # self << el
178
+ }.copying_done(self)
160
179
  end
161
180
  end
162
181
  end
@@ -222,21 +241,21 @@ module RIO
222
241
  module Dir
223
242
  module Output
224
243
  include Util::Output
225
- def <<(arg) _cpfrom(arg); self end
226
- def <(arg) _cpfrom(arg); self end
244
+ def <<(arg) cpfrom_(arg); self end
245
+ def <(arg) cpfrom_(arg); self end
227
246
  alias :copy_from :<
228
247
  alias :append_from :<<
229
248
 
230
249
  private
231
250
 
232
- def _cpfrom(arg)
251
+ def cpfrom_(arg)
233
252
  case arg
234
253
  when ::Array then cpfrom_array_(arg)
235
- else _cpfrom_rio(ensure_rio(arg))
254
+ else cpfrom_rio_(ensure_rio(arg))
236
255
  end
237
256
  end
238
- def _cpfrom_rio(ario)
239
- #p callstr('_cpfrom_rio',ario)
257
+ def cpfrom_rio_(ario)
258
+ #p callstr('cpfrom_rio_',ario)
240
259
  dest = self.join(ario.filename)
241
260
  case
242
261
  when ario.symlink?
@@ -256,14 +275,14 @@ module RIO
256
275
  def >>(arg)
257
276
  case arg
258
277
  when ::Array then cpto_obj_(arg)
259
- else _cpto_rio(ensure_rio(arg))
278
+ else cpto_rio_(ensure_rio(arg))
260
279
  end
261
280
  self
262
281
  end
263
282
  def >(arg)
264
283
  case arg
265
284
  when ::Array then cpto_obj_(arg.clear)
266
- else _cpto_rio(ensure_rio(arg))
285
+ else cpto_rio_(ensure_rio(arg))
267
286
  end
268
287
  self
269
288
  end
@@ -272,7 +291,7 @@ module RIO
272
291
 
273
292
  private
274
293
 
275
- def _cpto_rio(ario)
294
+ def cpto_rio_(ario)
276
295
  ario = ario.join(self.filename) if ario.exist?
277
296
  nostreamenum.cpto_obj_(ario.mkdir)
278
297
  end
@@ -562,12 +562,18 @@ IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI, Zlib, and CSV.
562
562
  the 'ps' command itself
563
563
  ps = rio(?-,'ps -a').skiplines[0,/ps$/]
564
564
 
565
- * Run an external program, copying its input from one location and its output from another,
565
+ * Run an external program, copying its input from one location and its output to another,
566
566
  and make it look very much like a shell command.
567
+
568
+ infile = rio(?","Hello Kitty\n")
569
+ outfile = rio('out.txt')
570
+
567
571
  # method 1
568
- ans = ""
569
572
  cat = rio(?-,'cat').w!
570
- cat <"Hello Kitty\n" >ans
573
+ cat <infile >outfile
574
+
575
+ # method 2
576
+ infile | 'cat' | outfile
571
577
 
572
578
  ---
573
579
 
@@ -918,14 +918,14 @@ using the copy operators.
918
918
 
919
919
  Rio provides two methods for selecting fields from CSV records in a
920
920
  manner similar to that provided for selecting lines -- Rio#columns and
921
- Rio#nocolumns.
921
+ Rio#skipcolumns.
922
922
 
923
923
  rio('f.csv').puts!(["h0,h1,h2,h3","f0,f1,f2,f3"])
924
924
 
925
925
  rio('f.csv').csv.columns(0).to_a #==>[["h0"], ["f0"]]
926
- rio('f.csv').csv.nocolumns(0).to_a #==>[["h1", "h2", "h3"], ["f1", "f2", "f3"]]
926
+ rio('f.csv').csv.skipcolumns(0).to_a #==>[["h1", "h2", "h3"], ["f1", "f2", "f3"]]
927
927
  rio('f.csv').csv.columns(1..2).to_a #==>[["h1", "h2"], ["f1", "f2"]]
928
- rio('f.csv').csv.nocolumns(1..2).to_a #==>[["h0", "h3"], ["f0", "f3"]]
928
+ rio('f.csv').csv.skipcolumns(1..2).to_a #==>[["h0", "h3"], ["f0", "f3"]]
929
929
 
930
930
  Rio#columns can, of course be used with the +each+ and the copy
931
931
  operators:
@@ -934,6 +934,116 @@ operators:
934
934
  rio('out').contents #==>"h0,h1\nf0,f1\n"
935
935
 
936
936
 
937
+ ==== YAML mode
938
+
939
+ Rio uses the YAML class from the Ruby standard library to provide
940
+ support for reading and writing YAML files. Normally
941
+ using <tt>(skip)records</tt> is identical to <tt>(skip)lines</tt> because
942
+ while +records+ only selects and does not specify the record-type,
943
+ +lines+ is the default.
944
+
945
+ The YAML extension distingishes between items selected using
946
+ Rio#records, Rio#rows and Rio#lines. Rio returns objects
947
+ loaded via YAML#load when +records+ is used; returns the YAML text
948
+ as a String when +rows+ is used; and
949
+ returns lines as Strings as normal when +lines+ is used.
950
+ +records+ is the default. In yaml-mode, <tt>(skip)records</tt> can be called
951
+ as <tt>(skip)objects</tt> and <tt>(skip)rows</tt> can be called as
952
+ <tt>(skip)documents</tt>
953
+
954
+ To read a single YAML document, Rio provides #getobj and #load
955
+ For example, consider the following partial 'database.yml' from
956
+ the rails distribution:
957
+
958
+ development:
959
+ adapter: mysql
960
+ database: rails_development
961
+
962
+ test:
963
+ adapter: mysql
964
+ database: rails_test
965
+
966
+
967
+ To get the object represented in the yaml file:
968
+
969
+ rio('database.yml').yaml.load
970
+ ==>{"development"=>{"adapter"=>"mysql", "database"=>"rails_development"},
971
+ "test"=>{"adapter"=>"mysql", "database"=>"rails_test"}}
972
+
973
+ Or one could read parts of the file like so:
974
+
975
+ rio('database.yml').yaml.getobj['development']['database']
976
+ ==>"rails_development"
977
+
978
+ Single objects can be written using #putobj and #putobj!
979
+ which is aliased to #dump
980
+
981
+ anobject = {
982
+ 'production' => {
983
+ 'adapter' => 'mysql',
984
+ 'database' => 'rails_production',
985
+ }
986
+ }
987
+ rio('afile.yaml').yaml.dump(anobject)
988
+
989
+ The YAML extension changes the way the grande copy operators
990
+ interpret their argument. Rio#< (copy-from) and Rio#<< (append-from)
991
+ treat an array as an array of objects which are converted using their
992
+ #to_yaml method before writing.
993
+
994
+ rio('afile.yaml').yaml < [obj1, obj2, obj3]
995
+
996
+ Because of this, copying an ::Array must be done like this:
997
+
998
+ rio('afile.yaml').yaml < [anarray]
999
+
1000
+ If their argument is a Rio or ::IO it is iterate through as normal,
1001
+ with each record converted using its to_yaml method.
1002
+
1003
+ For all other objects, the result of their +to_yaml+ operator is simply written.
1004
+
1005
+ rio('afile.yaml').yaml < anobject
1006
+
1007
+ Rio#> (copy-to) and Rio#>> (append-to) will fill an array with with all selected
1008
+ YAML documents in the Rio. For non-arrays, the yaml text is copied. (This may change
1009
+ if a useful reasonable alternative can be found)
1010
+
1011
+ rio('afile.yaml').yaml > anarray # load all YAML documents from 'afile.yaml'
1012
+
1013
+ Single objects can be written using Rio#putrec (aliased to Rio#putobj and Rio#dump)
1014
+
1015
+ rio('afile.yaml').yaml.putobj(anobject)
1016
+
1017
+ Single objects can be loaded using Rio#getrec (aliase to Rio#getobj and Rio#load)
1018
+
1019
+ anobject = rio('afile.yaml').yaml.getobj
1020
+
1021
+ Note that other than this redefinition of what a record is and how the copy
1022
+ operators interpret their argument, a Rio in yaml-mode is just like any other
1023
+ Rio. And all the things you can do with any Rio come for free.
1024
+ They can be iterated over using #each and read into an array using #[]
1025
+ just like any other Rio. All the selection criteria are identical also.
1026
+
1027
+ Get the first three objects into an array:
1028
+
1029
+ array_of_objects = rio('afile.yaml').yaml[0..2]
1030
+
1031
+ Iterate over only YAML documents that are a kind_of ::Hash use:
1032
+
1033
+ rio('afile.yaml').yaml(::Hash) {|ahash| ...}
1034
+
1035
+ This takes advantage of the fact that the default for matching records is <tt>===</tt>
1036
+
1037
+ Selecting records using a Proc can be used as normal:
1038
+
1039
+ anarray = rio('afile.yaml').yaml(proc{|anobject| ...}).to_a
1040
+
1041
+ One could even use the copy operator to convert a CSV file to a YAML representation of
1042
+ the same data:
1043
+
1044
+ rio('afile.yaml').yaml < rio('afile.csv').csv
1045
+
1046
+
937
1047
  ---
938
1048
 
939
1049
 
@@ -36,17 +36,22 @@
36
36
 
37
37
 
38
38
  require 'rio/ext/csv'
39
+ require 'rio/ext/yaml'
39
40
  module RIO
40
41
  module Ext #:nodoc: all
41
- OUTPUT_SYMS = CSV::Output.instance_methods.build_hash { |sym| [sym.to_s,1] }
42
+ OUTPUT_SYMS = (CSV::Output.instance_methods + YAML::Output.instance_methods).build_hash { |sym| [sym.to_s,1] }
43
+
42
44
  module Cx
43
45
  include CSV::Cx
46
+ include YAML::Cx
44
47
  end
45
48
  end
46
49
  module Ext
47
50
  module Input
48
51
  def add_extensions(obj)
52
+ #p "add_extensions(#{obj.inspect})"
49
53
  obj.extend(CSV::Input) if obj.csv?
54
+ obj.extend(YAML::Input) if obj.yaml?
50
55
  obj
51
56
  end
52
57
  module_function :add_extensions
@@ -54,6 +59,7 @@ module RIO
54
59
  module Output
55
60
  def add_extensions(obj)
56
61
  obj.extend(CSV::Output) if obj.csv?
62
+ obj.extend(YAML::Output) if obj.yaml?
57
63
  obj
58
64
  end
59
65
  module_function :add_extensions
@@ -55,11 +55,16 @@ module RIO
55
55
  end
56
56
  protected :csv_
57
57
  def columns(*ranges,&block)
58
- @cnames = nil
59
- cx['col_args'] = ranges.flatten
60
- cxx('columns',true,&block)
58
+ if skipping?
59
+ cx['skipping'] = false
60
+ skipcolumns(*args,&block)
61
+ else
62
+ @cnames = nil
63
+ cx['col_args'] = ranges.flatten
64
+ cxx('columns',true,&block)
65
+ end
61
66
  end
62
- def nocolumns(*ranges,&block)
67
+ def skipcolumns(*ranges,&block)
63
68
  @cnames = nil
64
69
  cx['nocol_args'] = ranges.flatten
65
70
  cxx('columns',true,&block)
@@ -99,8 +104,10 @@ module RIO
99
104
  #p "#{callstr('to_rec_',raw_rec,@recno)} ; itertype=#{cx['stream_itertype']}"
100
105
  case cx['stream_itertype']
101
106
  when 'lines'
102
- raw_rec.extend(RIO::Ext::CSV::Str)
103
- raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs'])
107
+ unless copying_from?
108
+ raw_rec.extend(RIO::Ext::CSV::Str)
109
+ raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs'])
110
+ end
104
111
  raw_rec
105
112
  when 'records'
106
113
  _l2record(raw_rec,cx['csv_fs'],cx['csv_rs'])
@@ -153,8 +160,10 @@ module RIO
153
160
  def _l2record(line,fs,rs)
154
161
  #p callstr('_l2record',line,fs,rs,cols)
155
162
  fields = trim(::CSV.parse_line(line,fs,rs))
156
- fields.extend(RIO::Ext::CSV::Ary)
157
- fields.csv_rec_to_s = _rec_to_s_proc(fs,rs)
163
+ unless copying_from?
164
+ fields.extend(RIO::Ext::CSV::Ary)
165
+ fields.csv_rec_to_s = _rec_to_s_proc(fs,rs)
166
+ end
158
167
  fields
159
168
  end
160
169
  def cnames(num)