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,88 @@
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 'net/ftp'
39
+ require 'rio/ioh'
40
+ module RIO
41
+ module FTP
42
+ class IOH < RIO::IOH::Base
43
+ def each(&block)
44
+ names.each do |s|
45
+ yield s
46
+ end
47
+ self
48
+ end
49
+ def close()
50
+ @ios.close unless closed?
51
+ @ios = nil
52
+ end
53
+ def closed?() @ios.nil? end
54
+ def chdir(dir,&block)
55
+ if block_given?
56
+ wd = @ios.pwd
57
+ @ios.chdir(dir) unless dir == wd
58
+ rtn = yield self
59
+ @ios.chdir(wd) unless dir == wd
60
+ return rtn
61
+ else
62
+ @ios.chdir(dir)
63
+ end
64
+ self
65
+ end
66
+ def list()
67
+ @ios.list
68
+ end
69
+ def nlst()
70
+ @ios.nlst
71
+ end
72
+ def names()
73
+ begin
74
+ @ios.nlst
75
+ rescue ::Net::FTPTempError
76
+ []
77
+ end
78
+ end
79
+ extend Forwardable
80
+ def_instance_delegators(:handle,:pwd,:mkdir,:rename,:put,:delete,:rmdir,:mdtm,:mtime,:root_dir)
81
+
82
+ def callstr(func,*args)
83
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
84
+ end
85
+
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,126 @@
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/match'
39
+ module RIO
40
+ module Grande #:nodoc: all
41
+ include Match::Common
42
+ def [](*args)
43
+ #p "#{callstr('[]',*args)} ss_type=#{cx['ss_type']} stream_iter=#{stream_iter?}"
44
+ ss_args = cx['ss_args'] = args
45
+ if ss_args and (ss_type = ss_type?(_ss_keys()))
46
+ return self.__send__(ss_type,*(ss_args)).to_a
47
+ else
48
+ return to_a()
49
+ end
50
+ end
51
+ end
52
+ end
53
+ module RIO
54
+ module Grande
55
+ module Dir
56
+
57
+ def each_(*args,&block)
58
+ #p "#{callstr('each_',*args)} sel=#{cx['sel'].inspect} nosel=#{cx['nosel'].inspect}"
59
+ sel = Match::Entry::Selector.new(cx['sel'],cx['nosel'])
60
+ selfstr = (self.to_s == '.' ? nil : self.to_s)
61
+ self.ioh.each do |estr|
62
+ next if estr =~ /^\.(\.)?$/
63
+ begin
64
+ erio = new_rio_cx(selfstr ? Impl::U.join(selfstr,estr) : estr )
65
+
66
+ if stream_iter?
67
+ _add_stream_iter_cx(erio).each(&block) if erio.file? and sel.match?(erio)
68
+ else
69
+ yield _add_iter_cx(erio) if sel.match?(erio)
70
+ end
71
+
72
+ if cx.has_key?('all') and erio.dir?
73
+ rsel = Match::Entry::Selector.new(cx['r_sel'],cx['r_nosel'])
74
+ _add_recurse_iter_cx(erio).each(&block) if rsel.match?(erio)
75
+ end
76
+
77
+ rescue ::Errno::ENOENT, ::URI::InvalidURIError => ex
78
+ $stderr.puts(ex.message+". Skipping.")
79
+ end
80
+ end
81
+ closeoneof? ? self.close.softreset : self
82
+ end
83
+
84
+
85
+
86
+ private
87
+
88
+ def _ss_keys() Cx::SS::ENTRY_KEYS + Cx::SS::STREAM_KEYS end
89
+ CX_ALL_SKIP_KEYS = ['retrystate']
90
+ def _add_recurse_iter_cx(ario)
91
+ new_cx = ario.cx
92
+ cx.keys.reject { |k| CX_ALL_SKIP_KEYS.include?(k) }.each { |k|
93
+ new_cx.set_(k,cx[k])
94
+ }
95
+ ario.cx = new_cx
96
+ ario
97
+ end
98
+ def _add_cx(ario,keys)
99
+ new_cx = ario.cx
100
+ keys.each {|k|
101
+ next unless cx.has_key?(k)
102
+ new_cx.set_(k,cx[k])
103
+ }
104
+ ario.cx = new_cx
105
+ end
106
+ CX_DIR_ITER_KEYS = %w[sel nosel]
107
+ CX_STREAM_ITER_KEYS = %w[stream_rectype stream_itertype stream_sel stream_nosel]
108
+ def _add_iter_cx(ario)
109
+ if nostreamenum?
110
+ _add_cx(ario,CX_DIR_ITER_KEYS)
111
+ end
112
+ _add_stream_iter_cx(ario)
113
+ end
114
+ def _add_stream_iter_cx(ario)
115
+ _add_cx(ario,CX_STREAM_ITER_KEYS)
116
+ new_cx = ario.cx
117
+ if stream_iter?
118
+ new_cx.set_('ss_args',cx['ss_args']) if cx.has_key?('ss_args')
119
+ new_cx.set_('ss_type',cx['ss_type']) if cx.has_key?('ss_type')
120
+ end
121
+ ario.cx = new_cx
122
+ ario
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,101 @@
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/base'
39
+
40
+ module RIO
41
+ class Handle < Base #:nodoc: all
42
+ attr_accessor :target
43
+ def initialize(st=nil)
44
+ @target = st
45
+ end
46
+ def initialize_copy(*args)
47
+ #p callstr('initialize_copy',*args)
48
+ super
49
+ @target = @target.clone
50
+ end
51
+ def method_missing(sym,*args,&block)
52
+ # p callstr('method_missing',*args)
53
+ @target.__send__(sym,*args,&block)
54
+ end
55
+ def t_instance_of?(*args) @target.instance_of?(*args) end
56
+ def t_kind_of?(*args) @target.kind_of?(*args) end
57
+ def t_class(*args) @target.class(*args) end
58
+ def to_s() @target.to_s() end
59
+ def split(*args,&block) @target.split(*args,&block) end
60
+ def callstr(func,*args)
61
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
62
+ end
63
+ end
64
+ end
65
+
66
+ if $0 == __FILE__
67
+ eval DATA.read, nil, $0, __LINE__+4
68
+ end
69
+
70
+ __END__
71
+
72
+ require 'test/unit'
73
+
74
+ class TC_Handle < Test::Unit::TestCase
75
+ def test_handle
76
+ assert_nothing_raised {
77
+ h = Handle.new()
78
+ }
79
+ h = Handle.new()
80
+ assert_nil(h.v)
81
+ object = String.new("Zippy")
82
+ h = FwdHandle.new(object,$stdout)
83
+ s = "Hello World\n"
84
+
85
+ rtn = h.fwd_rtn(:write,s)
86
+ assert_equal(rtn,s.length)
87
+
88
+ rtn = h.fwd_rtn_obj(:write,s)
89
+ assert_same(rtn,object)
90
+
91
+ rtn = h.fwd_rtn_new(:write,s)
92
+ assert_equal(object.class,rtn.class)
93
+ assert_not_same(object,rtn)
94
+ assert_equal(rtn,s.length.to_s)
95
+
96
+ rtn = h.write(s)
97
+ p rtn
98
+ # assert_equal(sdocdir,docdir.to_s)
99
+ # assert_instance_of(RIO::Rio,doc,"catpath does not return an FS")
100
+ end
101
+ end
@@ -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
+ end
41
+ end
42
+
43
+ require 'rio/if/internal'
44
+ require 'rio/if/basic'
45
+ require 'rio/if/methods'
46
+ require 'rio/if/grande'
47
+
48
+ require 'rio/if/test'
49
+ require 'rio/if/path'
50
+ require 'rio/if/fileordir'
51
+ require 'rio/if/file'
52
+ require 'rio/if/dir'
53
+ require 'rio/if/stream'
@@ -0,0 +1,64 @@
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
+ def to_rl() target.to_rl end
42
+
43
+ # Returns the length of the Rio's String representation
44
+ #
45
+ # To get the size of the underlying file system object use Rio#size
46
+ def length() target.length end
47
+
48
+ # Equality - calls to_s on the other object and compares it with the value returned by Rio#to_s
49
+ def ==(other) target == other end
50
+
51
+ # Equality (for case statements) same as Rio#==
52
+ def ===(other) target === other end
53
+
54
+ # Rios are hashed based on their String representation
55
+ def hash() target.hash end
56
+
57
+ # Returns true if their String representations are eql?
58
+ def eql?(other) target.eql?(other) end
59
+
60
+ # Match - invokes other.=~, passing the value returned by Rio#to_s
61
+ def =~(other) target =~ other end
62
+
63
+ end
64
+ end
@@ -0,0 +1,362 @@
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
+ # Calls Dir#chdir.
41
+ #
42
+ # Changes the current working directory of the process to the directory specified by the Rio.
43
+ # Raises a SystemCallError (probably Errno::ENOENT) if the target directory does not exist or
44
+ # if the Rio does not reference a directory.
45
+ #
46
+ # If a block is given changes to the directory specified by the rio for the length of the block
47
+ # and changes back outside the block
48
+ #
49
+ # Returns the Rio
50
+ #
51
+ # rio('/home').chdir # change the current working directory to /home
52
+ # # the working directory here is /home
53
+ # rio('/tmp/data/mydata').delete!.mkpath.chdir {
54
+ # # the working directory here is /tmp/data/mydata
55
+ # }
56
+ # # the working directory here is /home
57
+ #
58
+ def chdir(&block) target.chdir(&block) end
59
+
60
+
61
+
62
+ # Grande Directory Selection Method
63
+ #
64
+ # Sets the rio to return directories. _args_ can be used to select which directories are returned.
65
+ # ario.files(*args) do |f|
66
+ # f.directory? #=> true
67
+ # end
68
+ # No aguments selects all directories.
69
+ # if _args_ are:
70
+ # Regexp:: selects matching directories
71
+ # glob:: selects matching directories
72
+ # Proc:: called for each directory. the directory is processed unless the proc returns false
73
+ # Symbol:: sent to each directory. Each directory is processed unless the symbol returns false
74
+ #
75
+ # If a block is given, behaves like <tt>ario.dirs(*args).each(&block)</tt>
76
+ #
77
+ # See also Rio#files, Rio#entries, Rio#nodirs
78
+ #
79
+ # rio('adir').dirs { |frio| ... } # process all directories in 'adir'
80
+ # rio('adir').all.dirs { |frio| ... } # same thing recursively
81
+ # rio('adir').dirs(/^\./) { |frio| ...} # process dot directories
82
+ # rio('adir').dirs[/^\./] # return an array of dot directories
83
+ # rio('adir').dirs[:symlink?] # an array of symlinks to directories
84
+ #
85
+ def dirs(*args,&block) target.dirs(*args,&block); self end
86
+
87
+ # Grande Directory Exclude Method
88
+ #
89
+ # If no args are provided selects anything but directories.
90
+ # ario.nodirs do |el|
91
+ # el.directory? #=> false
92
+ # end
93
+ # If args are provided, sets the rio to select directories as with Rio#dirs, but the arguments are
94
+ # used to determine which directories will *not* be processed
95
+ #
96
+ # If a block is given behaves like
97
+ # ario.nodirs(*args).each(&block)
98
+ #
99
+ # See Rio#dirs
100
+ #
101
+ # rio('adir').nodirs { |ent| ... } # iterate through everything except directories
102
+ # rio('adir').nodirs(/^\./) { |drio| ... } # iterate through directories, skipping dot directories
103
+ #
104
+ #
105
+ def nodirs(*args,&block) target.nodirs(*args,&block); self end
106
+
107
+
108
+ # Grande Directory Entry Selection Method
109
+ #
110
+ # No aguments selects all entries.
111
+ #
112
+ # if +args+ are:
113
+ # Regexp:: selects matching entries
114
+ # glob:: selects matching entries
115
+ # Proc:: called for each entry. the entry is processed unless the proc returns false
116
+ # Symbol:: sent to each entry. Each entry is processed unless the symbol returns false
117
+ #
118
+ # If a block is given, behaves like <tt>ario.etries(*args).each(&block)</tt>
119
+ #
120
+ # See also Rio#files, Rio#dirs, Rio#noentries
121
+ #
122
+ # rio('adir').entries { |frio| ... } # process all entries in 'adir'
123
+ # rio('adir').all.entries { |frio| ... } # same thing recursively
124
+ # rio('adir').entries(/^\./) { |frio| ...} # process entries starting with a dot
125
+ # rio('adir').entries[/^\./] # return an array of all entries starting with a dot
126
+ # rio('adir').entries[:symlink?] # an array of symlinks in 'adir'
127
+ #
128
+ def entries(*args,&block) target.entries(*args,&block); self end
129
+
130
+
131
+ # Grande File Selection Method
132
+ #
133
+ # Sets the rio to return files. +args+ can be used to select which files are returned.
134
+ # ario.files(*args) do |f|
135
+ # f.file? #=> true
136
+ # end
137
+ # No aguments selects all files.
138
+ #
139
+ # If +args+ are:
140
+ # Regexp:: selects matching files
141
+ # glob:: selects matching files
142
+ # Proc:: called for each file. the file is processed unless the proc returns false
143
+ # Symbol:: sent to each file. Each file is processed unless the symbol returns false
144
+ #
145
+ # If a block is given, behaves like <tt>ario.files(*args).each</tt>
146
+ #
147
+ # See also Rio#dirs, Rio#entries, Rio#nofiles
148
+ #
149
+ # rio('adir').files { |frio| ... } # process all files in 'adir'
150
+ # rio('adir').all.files { |frio| ... } # same thing recursively
151
+ # rio('adir').files('*.rb') { |frio| ...} # process .rb files
152
+ # rio('adir').files['*.rb'] # return an array of .rb files
153
+ # rio('adir').files[/\.rb$/] # same thing using a regular expression
154
+ # rio('adir').files[:symlink?] # an array of symlinks to files
155
+ #
156
+ # For Rios that refer to files, +files(*args)+ causes the file to be processed only if
157
+ # it meets the criteria specified by the args.
158
+ #
159
+ # rio('afile.z').files['*.z'] #=> [rio('afile.z')]
160
+ # rio('afile.q').files['*.z'] #=> []
161
+ #
162
+ # Example
163
+ #
164
+ # Problem:
165
+ #
166
+ # Need an array of all ruby programs in a directory and its subdirectories, skipping those in _subversion_ (.svn)
167
+ # directories. For the purposes of this problem, a Ruby program is defined as a file ending with .rb or a file
168
+ # that is executable and whose shebang line contains 'ruby'
169
+ #
170
+ # rio(path).norecurse('.svn').files['*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ }]
171
+ #
172
+ # Explanation:
173
+ #
174
+ # Create a Rio for a directory
175
+ # rio(path)
176
+ # Specify that '.svn' directories should not be included in recursion.
177
+ # rio(path).norecurse('.svn')
178
+ # Select files
179
+ # rio(path).norecurse('.svn').files
180
+ # Limit to files ending with '.rb'
181
+ # rio(path).norecurse('.svn').files('*.rb')
182
+ # Also allow files that are both executable and whose first line is a shebang-ruby line
183
+ # rio(path).norecurse('.svn').files('*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ })
184
+ # Return an array rather than iterating thru them
185
+ # rio(path).norecurse('.svn').files['*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ }]
186
+ #
187
+ def files(*args,&block) target.files(*args,&block); self end
188
+
189
+ # Grande File Exclude Method
190
+ #
191
+ # If no args are provided selects anything but files.
192
+ # ario.nofiles do |el|
193
+ # el.file? #=> false
194
+ # end
195
+ # If args are provided, sets the rio to select files as with Rio#files, but the arguments are
196
+ # used to determine which files will *not* be processed
197
+ #
198
+ # If a block is given behaves like <tt>ario.nofiles(*args).each(&block)</tt>
199
+ #
200
+ # See Rio#files
201
+ #
202
+ # rio('adir').nofiles { |ent| ... } # iterate through everything except files
203
+ # rio('adir').nofiles(*~) { |frio| ... } # iterate through files, skipping those ending with a tilde
204
+ #
205
+ #
206
+ def nofiles(*args,&block) target.nofiles(*args,&block); self end
207
+
208
+
209
+ # Returns +true+ if the rio is in +all+ (recursive) mode. See Rio#all
210
+ #
211
+ # adir = rio('adir').all.dirs
212
+ # adir.all? # true
213
+ # adir.each do |subdir|
214
+ # subdir.all? # true
215
+ # end
216
+ #
217
+ # rio('adir').all? # false
218
+ #
219
+ def all?() target.all?() end
220
+
221
+
222
+ # Grande Directory Recursion Method
223
+ #
224
+ # Sets the Rio to all mode (recursive)
225
+ #
226
+ # When called with a block, behaves as if all.each(&block) had been called
227
+ #
228
+ # +all+ causes subsequent calls to +files+ or +dirs+ to be applied recursively
229
+ # to subdirectories
230
+ #
231
+ # rio('adir').all.files('*.[ch]').each { |file| ... } # process all c language source files in adir
232
+ # # and all subdirectories of adir
233
+ # rio('adir').all.files(/\.[ch]$/) { |file| ... } # same as above
234
+ # rio('adir').files("*.[ch]").all { |file| ... } # once again
235
+ # rio('adir').all.files["*.[ch]"] # same, but return an array instead of iterating
236
+ #
237
+ def all(arg=true,&block) target.all(arg,&block); self end
238
+
239
+
240
+ # Grande Directory Recursion Selection Method
241
+ #
242
+ # Sets the Rio to recurse into directories like Rio#all. If no args are provided behaves like Rio#all.
243
+ # If args are provided, they are processed like Rio#dirs, to select which subdirectories should
244
+ # be recursed into. Rio#recurse always implies Rio#all.
245
+ #
246
+ # +args+ may be one or more of:
247
+ # Regexp:: recurse into matching subdirectories
248
+ # glob:: recurse into matching subdirectories
249
+ # Proc:: called for each directory. The directory is recursed into unless the proc returns false
250
+ # Symbol:: sent to each directory. Each directory is recursed into unless the symbol returns false
251
+ #
252
+ # If a block is given, behaves like <tt>ario.recurse(*args).each(&block)</tt>
253
+ #
254
+ # See also Rio#norecurse, Rio#all, Rio#dirs
255
+ #
256
+ # rio('adir').all.recurse('test*') { |drio| ... } # process all entries and all entries in subdirectories
257
+ # # starting with 'test' -- recursively
258
+ #
259
+ def recurse(*args,&block) target.recurse(*args,&block); self end
260
+
261
+
262
+ # Grande Directory Recursion Exclude Method
263
+ #
264
+ # Sets the Rio to recurse into directories like Rio#all. If no args are provided, no
265
+ # directories will be recursed into. If args are provided, behaves like Rio#recurse, except
266
+ # that mathcing will *not* be recursed into
267
+ #
268
+ # rio('adir').norecurse('.svn') { |drio| ... } # recurse, skipping subversion directories
269
+ #
270
+ def norecurse(*args,&block) target.norecurse(*args,&block); self end
271
+
272
+
273
+ # Calls Find#find
274
+ #
275
+ # Uses Find#find to find all entries recursively for a Rio that
276
+ # specifies a directory. Note that there are other ways to recurse through
277
+ # a directory structure using a Rio. See Rio#each and Rio#all.
278
+ #
279
+ # Calls the block passing a Rio for each entry found. The Rio inherits
280
+ # attrubutes from the directory Rio.
281
+ #
282
+ # Returns itself
283
+ #
284
+ # rio('adir').find { |entrio| puts "#{entrio}: #{entrio.file?}" }
285
+ #
286
+ # rio('adir').chomp.find do |entrio|
287
+ # next unless entrio.file?
288
+ # lines = entrio[0..10] # lines are chomped because 'chomp' was inherited
289
+ # end
290
+ #
291
+ def find(*args,&block) target.find_entries(*args,&block); self end
292
+
293
+
294
+ # Calls Dir#glob
295
+ #
296
+ # Returns the filenames found by expanding the pattern given in string,
297
+ # either as an array or as parameters to the block. In both cases the filenames
298
+ # are expressed as a Rio.
299
+ # Note that this pattern is not a regexp (it�s closer to a shell glob).
300
+ # See File::fnmatch for details of file name matching and the meaning of the flags parameter.
301
+ #
302
+ #
303
+ def glob(string,*args,&block) target.glob(string,*args,&block) end
304
+
305
+
306
+ # Calls Dir#rmdir
307
+ #
308
+ # Deletes the directory referenced by the Rio.
309
+ # Raises a subclass of SystemCallError if the directory isn�t empty.
310
+ # Returns the Rio. If the directory does not exist, just returns the Rio.
311
+ #
312
+ # See also Rio#rmtree, Rio#delete, Rio#delete!
313
+ #
314
+ # rio('adir').rmdir # remove the empty directory 'adir'
315
+ #
316
+ def rmdir() target.rmdir(); self end
317
+
318
+
319
+ # Calls FileUtils#rmtree
320
+ #
321
+ # Removes a directory Rio recursively. Returns the Rio.
322
+ # If the directory does not exist, simply returns the Rio
323
+ #
324
+ # If called with a block, behaves as if rmtree.each(&block) had been called
325
+ #
326
+ # See also Rio#delete!
327
+ #
328
+ # rio('adir').rmtree # removes the directory 'adir' recursively
329
+ #
330
+ # # delete the directory 'adir', recreate it and then change to the new directory
331
+ # rio('adir/asubdir').rmtree.mkpath.chdir {
332
+ # ...
333
+ # }
334
+ #
335
+ #
336
+ def rmtree() target.rmtree(); self end
337
+
338
+ # Calls FileUtils#mkpath
339
+ #
340
+ # Makes a new directory named by the Rio and any directories in its path that do not exist.
341
+ #
342
+ # Returns the Rio. If the directory already exists, just returns the Rio.
343
+ #
344
+ # rio('adir/a/b').mkpath
345
+ def mkpath(&block) target.mkpath(&block); self end
346
+
347
+
348
+ # Calls FileUtils#mkdir
349
+ #
350
+ # Makes a new directory named by the Rio with permissions specified by the optional parameter.
351
+ # The permissions may be modified by the value of File::umask
352
+ #
353
+ # Returns the Rio. If the directory already exists, just returns the Rio.
354
+ #
355
+ # rio('adir').mkdir
356
+ def mkdir(*args,&block) target.mkdir(*args,&block); self end
357
+
358
+
359
+
360
+ end
361
+ end
362
+