wishdev-rio 0.4.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 (296) hide show
  1. data/COPYING +341 -0
  2. data/README +81 -0
  3. data/Rakefile +281 -0
  4. data/build_doc.rb +94 -0
  5. data/doc/ANNOUNCE +159 -0
  6. data/doc/RELEASE_NOTES +308 -0
  7. data/doc/RIOIS +215 -0
  8. data/doc/generators/template/html/rio.css +428 -0
  9. data/doc/generators/template/html/rio.rb +523 -0
  10. data/doc/generators/template/html/ugly.rb +132 -0
  11. data/doc/pkg_def.rb +60 -0
  12. data/doc/rfc1738.txt +1403 -0
  13. data/doc/rfc959.txt +3933 -0
  14. data/ex/catcsv.rb +64 -0
  15. data/ex/colx.rb +8 -0
  16. data/ex/findinruby +15 -0
  17. data/ex/findruby +14 -0
  18. data/ex/passwd_report.rb +8 -0
  19. data/ex/prompt.rb +25 -0
  20. data/ex/rgb.txt.gz +0 -0
  21. data/ex/riocat +42 -0
  22. data/ex/riogunzip +31 -0
  23. data/ex/riogzip +24 -0
  24. data/ex/rioprompt.rb +10 -0
  25. data/ex/targz2zip +17 -0
  26. data/ex/tonl +10 -0
  27. data/lib/rio/abstract_method.rb +56 -0
  28. data/lib/rio/argv.rb +56 -0
  29. data/lib/rio/arycopy.rb +43 -0
  30. data/lib/rio/assert.rb +114 -0
  31. data/lib/rio/base.rb +56 -0
  32. data/lib/rio/callstr.rb +46 -0
  33. data/lib/rio/const.rb +51 -0
  34. data/lib/rio/construct.rb +50 -0
  35. data/lib/rio/constructor.rb +258 -0
  36. data/lib/rio/context/autoclose.rb +72 -0
  37. data/lib/rio/context/copying.rb +55 -0
  38. data/lib/rio/context/cxx.rb +66 -0
  39. data/lib/rio/context/dir.rb +120 -0
  40. data/lib/rio/context/gzip.rb +50 -0
  41. data/lib/rio/context/methods.rb +182 -0
  42. data/lib/rio/context/skip.rb +66 -0
  43. data/lib/rio/context/stream.rb +229 -0
  44. data/lib/rio/context.rb +117 -0
  45. data/lib/rio/cp.rb +370 -0
  46. data/lib/rio/def.rb +53 -0
  47. data/lib/rio/dir.rb +144 -0
  48. data/lib/rio/doc/EXAMPLES.rb +299 -0
  49. data/lib/rio/doc/HOWTO.rb +737 -0
  50. data/lib/rio/doc/INDEX.rb +311 -0
  51. data/lib/rio/doc/INTRO.rb +1068 -0
  52. data/lib/rio/doc/OPTIONAL.rb +130 -0
  53. data/lib/rio/doc/SYNOPSIS.rb +183 -0
  54. data/lib/rio/doc.rb +45 -0
  55. data/lib/rio/entrysel.rb +246 -0
  56. data/lib/rio/exception/copy.rb +97 -0
  57. data/lib/rio/exception/notimplemented.rb +57 -0
  58. data/lib/rio/exception/notsupported.rb +46 -0
  59. data/lib/rio/exception/open.rb +61 -0
  60. data/lib/rio/exception/state.rb +73 -0
  61. data/lib/rio/exception.rb +41 -0
  62. data/lib/rio/ext/csv.rb +351 -0
  63. data/lib/rio/ext/if.rb +45 -0
  64. data/lib/rio/ext/mp3info.rb +80 -0
  65. data/lib/rio/ext/splitlines.rb +253 -0
  66. data/lib/rio/ext/yaml/doc.rb +133 -0
  67. data/lib/rio/ext/yaml/tie.rb +149 -0
  68. data/lib/rio/ext/yaml.rb +164 -0
  69. data/lib/rio/ext/zipfile/fs.rb +116 -0
  70. data/lib/rio/ext/zipfile/rl.rb +251 -0
  71. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  72. data/lib/rio/ext/zipfile/state.rb +161 -0
  73. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  74. data/lib/rio/ext/zipfile.rb +110 -0
  75. data/lib/rio/ext.rb +138 -0
  76. data/lib/rio/factory.rb +436 -0
  77. data/lib/rio/file.rb +118 -0
  78. data/lib/rio/filter/closeoneof.rb +103 -0
  79. data/lib/rio/filter/gzip.rb +70 -0
  80. data/lib/rio/filter.rb +94 -0
  81. data/lib/rio/fs/base.rb +41 -0
  82. data/lib/rio/fs/impl.rb +122 -0
  83. data/lib/rio/fs/native.rb +75 -0
  84. data/lib/rio/fs/stream.rb +61 -0
  85. data/lib/rio/fs/url.rb +63 -0
  86. data/lib/rio/ftp/conncache.rb +101 -0
  87. data/lib/rio/ftp/dir.rb +94 -0
  88. data/lib/rio/ftp/fs.rb +180 -0
  89. data/lib/rio/ftp/ftpfile.rb +20 -0
  90. data/lib/rio/grande.rb +97 -0
  91. data/lib/rio/handle.rb +100 -0
  92. data/lib/rio/if/basic.rb +64 -0
  93. data/lib/rio/if/csv.rb +76 -0
  94. data/lib/rio/if/dir.rb +157 -0
  95. data/lib/rio/if/file.rb +89 -0
  96. data/lib/rio/if/fileordir.rb +268 -0
  97. data/lib/rio/if/grande.rb +729 -0
  98. data/lib/rio/if/grande_entry.rb +379 -0
  99. data/lib/rio/if/grande_stream.rb +693 -0
  100. data/lib/rio/if/internal.rb +125 -0
  101. data/lib/rio/if/path.rb +462 -0
  102. data/lib/rio/if/rubyio.rb +681 -0
  103. data/lib/rio/if/string.rb +83 -0
  104. data/lib/rio/if/temp.rb +45 -0
  105. data/lib/rio/if/test.rb +282 -0
  106. data/lib/rio/if/yaml.rb +206 -0
  107. data/lib/rio/if.rb +64 -0
  108. data/lib/rio/ioh.rb +162 -0
  109. data/lib/rio/iomode.rb +109 -0
  110. data/lib/rio/ios/fail.rb +106 -0
  111. data/lib/rio/ios/generic.rb +119 -0
  112. data/lib/rio/ios/mode.rb +60 -0
  113. data/lib/rio/ios/null.rb +119 -0
  114. data/lib/rio/iowrap.rb +128 -0
  115. data/lib/rio/kernel.rb +54 -0
  116. data/lib/rio/local.rb +62 -0
  117. data/lib/rio/match.rb +53 -0
  118. data/lib/rio/matchrecord.rb +283 -0
  119. data/lib/rio/no_warn.rb +49 -0
  120. data/lib/rio/nullio.rb +159 -0
  121. data/lib/rio/open3.rb +68 -0
  122. data/lib/rio/ops/construct.rb +61 -0
  123. data/lib/rio/ops/create.rb +77 -0
  124. data/lib/rio/ops/dir.rb +346 -0
  125. data/lib/rio/ops/either.rb +134 -0
  126. data/lib/rio/ops/file.rb +102 -0
  127. data/lib/rio/ops/path.rb +296 -0
  128. data/lib/rio/ops/stream/input.rb +267 -0
  129. data/lib/rio/ops/stream/output.rb +100 -0
  130. data/lib/rio/ops/stream/read.rb +86 -0
  131. data/lib/rio/ops/stream/write.rb +57 -0
  132. data/lib/rio/ops/stream.rb +87 -0
  133. data/lib/rio/ops/symlink.rb +80 -0
  134. data/lib/rio/path/reset.rb +69 -0
  135. data/lib/rio/path.rb +129 -0
  136. data/lib/rio/piper/cp.rb +80 -0
  137. data/lib/rio/piper.rb +122 -0
  138. data/lib/rio/prompt.rb +66 -0
  139. data/lib/rio/rectype.rb +88 -0
  140. data/lib/rio/rl/base.rb +118 -0
  141. data/lib/rio/rl/builder.rb +117 -0
  142. data/lib/rio/rl/chmap.rb +66 -0
  143. data/lib/rio/rl/fs2url.rb +82 -0
  144. data/lib/rio/rl/ioi.rb +78 -0
  145. data/lib/rio/rl/path.rb +110 -0
  146. data/lib/rio/rl/pathmethods.rb +116 -0
  147. data/lib/rio/rl/uri.rb +200 -0
  148. data/lib/rio/rl/withpath.rb +296 -0
  149. data/lib/rio/scheme/aryio.rb +88 -0
  150. data/lib/rio/scheme/cmdio.rb +80 -0
  151. data/lib/rio/scheme/cmdpipe.rb +118 -0
  152. data/lib/rio/scheme/fd.rb +65 -0
  153. data/lib/rio/scheme/ftp.rb +141 -0
  154. data/lib/rio/scheme/http.rb +78 -0
  155. data/lib/rio/scheme/null.rb +55 -0
  156. data/lib/rio/scheme/path.rb +98 -0
  157. data/lib/rio/scheme/stderr.rb +55 -0
  158. data/lib/rio/scheme/stdio.rb +71 -0
  159. data/lib/rio/scheme/strio.rb +87 -0
  160. data/lib/rio/scheme/sysio.rb +63 -0
  161. data/lib/rio/scheme/tcp.rb +75 -0
  162. data/lib/rio/scheme/temp.rb +200 -0
  163. data/lib/rio/state/error.rb +72 -0
  164. data/lib/rio/state.rb +242 -0
  165. data/lib/rio/stream/base.rb +54 -0
  166. data/lib/rio/stream/duplex.rb +79 -0
  167. data/lib/rio/stream/open.rb +202 -0
  168. data/lib/rio/stream.rb +181 -0
  169. data/lib/rio/symantics.rb +45 -0
  170. data/lib/rio/tempdir.rb +132 -0
  171. data/lib/rio/to_rio/all.rb +39 -0
  172. data/lib/rio/to_rio/array.rb +39 -0
  173. data/lib/rio/to_rio/io.rb +40 -0
  174. data/lib/rio/to_rio/object.rb +42 -0
  175. data/lib/rio/to_rio/string.rb +40 -0
  176. data/lib/rio/to_rio.rb +67 -0
  177. data/lib/rio/uri/file.rb +198 -0
  178. data/lib/rio/util.rb +48 -0
  179. data/lib/rio/version.rb +51 -0
  180. data/lib/rio.rb +162 -0
  181. data/setup.rb +1360 -0
  182. data/test/bin/count_lines.rb +11 -0
  183. data/test/bin/find_lines.rb +13 -0
  184. data/test/bin/list_dir.rb +14 -0
  185. data/test/ftp/all.rb +9 -0
  186. data/test/ftp/anon_copy_data.rb +36 -0
  187. data/test/ftp/anon_misc.rb +124 -0
  188. data/test/ftp/anon_read.rb +105 -0
  189. data/test/ftp/anon_special.rb +68 -0
  190. data/test/ftp/anon_write.rb +70 -0
  191. data/test/ftp/ftp2ftp.rb +51 -0
  192. data/test/ftp/initftpfiles.rb +14 -0
  193. data/test/ftp/testdef.rb +55 -0
  194. data/test/gem_runtests.rb +15 -0
  195. data/test/http/all.rb +4 -0
  196. data/test/http/copy-from-http.rb +141 -0
  197. data/test/http/uri-meta.rb +72 -0
  198. data/test/lib/temp_server.rb +46 -0
  199. data/test/runalltests.rb +17 -0
  200. data/test/runftptests.rb +14 -0
  201. data/test/runhttp.rb +11 -0
  202. data/test/runhttptests.rb +14 -0
  203. data/test/runtests.rb +52 -0
  204. data/test/tc/abs.rb +355 -0
  205. data/test/tc/all.rb +80 -0
  206. data/test/tc/base.rb +31 -0
  207. data/test/tc/base2.rb +87 -0
  208. data/test/tc/cd1.rb +113 -0
  209. data/test/tc/clearsel.rb +68 -0
  210. data/test/tc/clone.rb +208 -0
  211. data/test/tc/closeoncopy.rb +102 -0
  212. data/test/tc/closeoneof.rb +194 -0
  213. data/test/tc/cmdpipe.rb +149 -0
  214. data/test/tc/copy-dir-samevar.rb +91 -0
  215. data/test/tc/copy-from.rb +129 -0
  216. data/test/tc/copy-to.rb +91 -0
  217. data/test/tc/copy.rb +74 -0
  218. data/test/tc/copyarray.rb +188 -0
  219. data/test/tc/copydest.rb +50 -0
  220. data/test/tc/copydir.rb +166 -0
  221. data/test/tc/copydirlines.rb +121 -0
  222. data/test/tc/copylines.rb +46 -0
  223. data/test/tc/copynonex.rb +118 -0
  224. data/test/tc/copysymlink.rb +39 -0
  225. data/test/tc/create.rb +114 -0
  226. data/test/tc/csv.rb +226 -0
  227. data/test/tc/csv2.rb +138 -0
  228. data/test/tc/csv_columns.rb +37 -0
  229. data/test/tc/csvutil.rb +56 -0
  230. data/test/tc/dir.rb +76 -0
  231. data/test/tc/dir_iter.rb +383 -0
  232. data/test/tc/dirautoclose.rb +67 -0
  233. data/test/tc/dirent.rb +178 -0
  234. data/test/tc/dirss.rb +81 -0
  235. data/test/tc/each.rb +111 -0
  236. data/test/tc/each_break.rb +243 -0
  237. data/test/tc/edf.rb +81 -0
  238. data/test/tc/empty.rb +51 -0
  239. data/test/tc/emptyriodir.rb +129 -0
  240. data/test/tc/entary.rb +227 -0
  241. data/test/tc/entsel.rb +110 -0
  242. data/test/tc/eq.rb +101 -0
  243. data/test/tc/expand_path.rb +69 -0
  244. data/test/tc/ext.rb +136 -0
  245. data/test/tc/fileno.rb +94 -0
  246. data/test/tc/files_select.rb +92 -0
  247. data/test/tc/get.rb +152 -0
  248. data/test/tc/getrec.rb +137 -0
  249. data/test/tc/gzip.rb +109 -0
  250. data/test/tc/io_each_byte.rb +60 -0
  251. data/test/tc/io_read.rb +80 -0
  252. data/test/tc/iometh.rb +149 -0
  253. data/test/tc/likeio.rb +116 -0
  254. data/test/tc/line_record_row.rb +51 -0
  255. data/test/tc/lineno.rb +196 -0
  256. data/test/tc/lines.rb +66 -0
  257. data/test/tc/misc.rb +432 -0
  258. data/test/tc/nolines.rb +204 -0
  259. data/test/tc/noqae.rb +879 -0
  260. data/test/tc/null.rb +45 -0
  261. data/test/tc/once.rb +6 -0
  262. data/test/tc/overload.rb +140 -0
  263. data/test/tc/pa.rb +158 -0
  264. data/test/tc/path_parts.rb +175 -0
  265. data/test/tc/pathop.rb +60 -0
  266. data/test/tc/paths.rb +145 -0
  267. data/test/tc/pid.rb +31 -0
  268. data/test/tc/piper.rb +143 -0
  269. data/test/tc/programs_util.rb +24 -0
  270. data/test/tc/qae.rb +493 -0
  271. data/test/tc/qae_riovar.rb +499 -0
  272. data/test/tc/readline.rb +30 -0
  273. data/test/tc/records.rb +68 -0
  274. data/test/tc/rename.rb +233 -0
  275. data/test/tc/rename_assign.rb +45 -0
  276. data/test/tc/riorl.rb +181 -0
  277. data/test/tc/route.rb +51 -0
  278. data/test/tc/selnosel.rb +33 -0
  279. data/test/tc/skip.rb +89 -0
  280. data/test/tc/skiplines.rb +71 -0
  281. data/test/tc/split.rb +28 -0
  282. data/test/tc/splitlines.rb +65 -0
  283. data/test/tc/splitpath.rb +83 -0
  284. data/test/tc/sub.rb +46 -0
  285. data/test/tc/symlink.rb +176 -0
  286. data/test/tc/symlink0.rb +348 -0
  287. data/test/tc/symlink1.rb +114 -0
  288. data/test/tc/synopsis.rb +75 -0
  289. data/test/tc/temp.rb +152 -0
  290. data/test/tc/tempdir.rb +60 -0
  291. data/test/tc/tempfile.rb +66 -0
  292. data/test/tc/testcase.rb +170 -0
  293. data/test/tc/tonl.rb +37 -0
  294. data/test/tc/truncate.rb +39 -0
  295. data/test/tc/yaml.rb +275 -0
  296. metadata +387 -0
@@ -0,0 +1,83 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 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
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ module RIO
38
+ class Rio
39
+ # Returns the String associated with a Rio which references a StringIO object.
40
+ # For any other type of Rio, is undefined.
41
+ def string() target.string end
42
+ end
43
+ end
44
+
45
+ module RIO
46
+ module IF
47
+ module String
48
+
49
+ # Create a Rio referencing Rio#to_str + arg.to_str
50
+ #
51
+ # rio('afile') + '-0.1' #=> rio('afile-0.1')
52
+ #
53
+ def +(arg) target + arg end
54
+
55
+ # Create a new Rio referencing the result of applying ::String#sub to the
56
+ # value returned by Rio#to_s. So:
57
+ #
58
+ # ario.sub(re,string)
59
+ # is equivelent to
60
+ # rio(ario.to_s.sub(re,string))
61
+ #
62
+ # See also #gsub, #+
63
+ def sub(re,string) target.sub(re,string) end
64
+
65
+ # Create a new Rio referencing the result of applying ::String#gsub to the
66
+ # value returned by Rio#to_s. So:
67
+ #
68
+ # ario.gsub(re,string)
69
+ # is equivelent to
70
+ # rio(ario.to_s.gsub(re,string))
71
+ #
72
+ # See also #sub #+
73
+ def gsub(re,string) target.gsub(re,string) end
74
+
75
+
76
+ end
77
+ end
78
+ end
79
+ module RIO
80
+ class Rio
81
+ include RIO::IF::String
82
+ end
83
+ end
@@ -0,0 +1,45 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 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
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ module RIO
38
+ class Rio
39
+ #def file() target.file; self end
40
+ #def dir() target.dir; self end
41
+
42
+
43
+ end
44
+ end
45
+
@@ -0,0 +1,282 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 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
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ module RIO
38
+ module IF
39
+ module Test
40
+ # Calls FileTest#blockdev?
41
+ # rio('afile').blockdev? => true or false
42
+ # Returns +true+ if the named file is a block device.
43
+ def blockdev?() target.blockdev?() end
44
+
45
+ # Calls FileTest#chardev?
46
+ # rio('afile').chardev? => true or false
47
+ # Returns +true+ if the named file is a character device.
48
+ def chardev?() target.chardev? end
49
+
50
+ # Calls FileTest#directory?
51
+ # rio('afile').directory? => true or false
52
+ # Returns +true+ if the named file is a directory, +false+ otherwise.
53
+ def directory?() target.directory? end
54
+
55
+ # Alias for #directory?
56
+ def dir?() target.dir? end
57
+
58
+ # Calls FileTest#exist?
59
+ # rio('afile').exist?() => true or false
60
+ # Returns +true+ if the named file exists.
61
+ def exist?() target.exist? end
62
+
63
+ # Calls FileTest#file?
64
+ # rio('afile').file? => true or false
65
+ # Returns +true+ if the named file exists and is a regular file.
66
+ def file?() target.file? end
67
+
68
+ # Calls FileTest#socket?
69
+ # rio('afile').socket? => true or false
70
+ # Returns +true+ if the named file is a socket.
71
+ def socket?() target.socket? end
72
+
73
+ # Calls FileTest#symlink?
74
+ # rio('afile').symlink? => true or false
75
+ # Returns +true+ if the named file is a symbolic link.
76
+ def symlink?() target.symlink? end
77
+
78
+ # Returns +true+ if a Rio is not #closed?
79
+ def open?() target.open?() end
80
+
81
+ # Calls IO#closed?
82
+ # ario.closed? => true or false
83
+ # Returns +true+ if _ario_ is completely closed (for duplex streams,
84
+ # both reader and writer), +false+ otherwise.
85
+ def closed?() target.closed?() end
86
+
87
+ # call-seq:
88
+ # fnmatch?( pattern, [flags] ) => (true or false)
89
+ #
90
+ # Calls File#fnmatch?
91
+ #
92
+ # Returns true if IF::Path#path matches <i>pattern</i>. The
93
+ # pattern is not a regular expression; instead it follows rules
94
+ # similar to shell filename globbing. It may contain the following
95
+ # metacharacters:
96
+ #
97
+ # <i>flags</i> is a bitwise OR of the <code>FNM_xxx</code> parameters.
98
+ # The same glob pattern and flags are used by <code>Dir::glob</code>.
99
+ #
100
+ # rio('cat').fnmatch?('cat') #=> true
101
+ # rio('category').fnmatch?('cat') #=> false
102
+ # rio('cats').fnmatch?('c{at,ub}s') #=> false
103
+ # rio('cubs').fnmatch?('c{at,ub}s') #=> false
104
+ # rio('cat').fnmatch?('c{at,ub}s') #=> false
105
+ #
106
+ # rio('cat').fnmatch?('c?t') #=> true
107
+ # rio('cat').fnmatch?('c\?t') #=> false
108
+ # rio('cat').fnmatch?('c??t') #=> false
109
+ # rio('cats').fnmatch?('c*') #=> true
110
+ #
111
+ # rio('cat').fnmatch?('c*t') #=> true
112
+ # rio('cat').fnmatch?('c\at') #=> true
113
+ # rio('cat').fnmatch?('c\at',File::FNM_NOESCAPE) #=> false
114
+ # rio('a/b').fnmatch?('a?b') #=> true
115
+ # rio('a/b').fnmatch?('a?b',File::FNM_PATHNAME) #=> false
116
+ #
117
+ # rio('.profile').fnmatch?('*') #=> false
118
+ # rio('.profile').fnmatch?('*',File::FNM_DOTMATCH) #=> true
119
+ # rio('dave/.profile').fnmatch?('*') #=> true
120
+ # rio('dave/.profile').fnmatch?('*',File::FNM_DOTMATCH) #=> true
121
+ # rio('dave/.profile').fnmatch?('*',File::FNM_PATHNAME) #=> false
122
+ #
123
+ def fnmatch?(*args) target.fnmatch?(*args) end
124
+
125
+ # Calls File#ftype
126
+ #
127
+ # Identifies the type of the named file; the return string is one of 'file�, 'directory�,
128
+ # 'characterSpecial�, 'blockSpecial�, 'fifo�, 'link�, 'socket�, or 'unknown�.
129
+ def ftype(*args) target.ftype(*args) end
130
+
131
+ # Calls File#stat
132
+ def stat(*args) target.stat(*args) end
133
+
134
+ # Calls File#lstat
135
+ def lstat(*args) target.lstat(*args) end
136
+
137
+ # Calls FileTest#pipe?
138
+ # rio('afile').pipe? => true or false
139
+ # Returns +true+ if the named file is a pipe.
140
+ def pipe?() target.pipe?() end
141
+
142
+
143
+ # Calls File#atime
144
+ #
145
+ # Returns the last access time (a Time object) for the file system object referenced
146
+ def atime(*args) target.atime(*args) end
147
+
148
+ # Calls File#ctime
149
+ #
150
+ # Returns the change time for Rios that reference file system object (that is,
151
+ # the time directory information about the file was changed, not the file itself).
152
+ def ctime(*args) target.ctime(*args) end
153
+
154
+ # Calls File#mtime
155
+ #
156
+ # Returns the modification time for Rio that reference file system objects
157
+ def mtime(*args) target.mtime(*args) end
158
+
159
+ # Calls File#executable?
160
+ #
161
+ # Returns true if the file is executable by the effective user id of this process.
162
+ def executable?(*args) target.executable?(*args) end
163
+
164
+ # Calls File#executable_real?
165
+ #
166
+ # Returns true if the file is executable by the real user id of this process.
167
+ def executable_real?(*args) target.executable_real?(*args) end
168
+
169
+ # Calls FileTest#readable?
170
+ # rio('afile').readable? => true or false
171
+ # Returns +true+ if the named file is readable by the effective user
172
+ # id of this process.
173
+ def readable?(*args) target.readable?(*args) end
174
+
175
+ # Calls FileTest#readable_real?
176
+ # rio('afile').readable_real? => true or false
177
+ # Returns +true+ if the named file is readable by the real user id of
178
+ # this process.
179
+ def readable_real?(*args) target.readable_real?(*args) end
180
+
181
+ # Calls FileTest#writable?
182
+ # rio('afile').writable? => true or false
183
+ # Returns +true+ if the named file is writable by the effective user
184
+ # id of this process.
185
+ def writable?(*args) target.writable?(*args) end
186
+
187
+ # Calls FileTest#writable_real?
188
+ # rio('afile').writable_real? => true or false
189
+ # Returns +true+ if the named file is writable by the real user id of
190
+ # this process.
191
+ def writable_real?(*args) target.writable_real?(*args) end
192
+
193
+ # Calls FileTest#sticky?
194
+ # rio('afile').sticky? => true or false
195
+ # Returns +true+ if the named file is a has the sticky bit set.
196
+ def sticky?(*args) target.sticky?(*args) end
197
+
198
+ # Calls FileTest#owned?
199
+ # rio('afile').owned? => true or false
200
+ # Returns +true+ if the named file exists and the effective used id
201
+ # of the calling process is the owner of the file.
202
+ def owned?(*args) target.owned?(*args) end
203
+
204
+ # Calls FileTest#grpowned?
205
+ # rio('afile').grpowned? => true or false
206
+ # Returns +true+ if the named file exists and the effective group id
207
+ # of the calling process is the owner of the file. Returns +false+ on
208
+ # Windows.
209
+ def grpowned?(*args) target.grpowned?(*args) end
210
+
211
+ # Calls FileTest#setgid?
212
+ # rio('afile').setgid? => true or false
213
+ # Returns +true+ if the named file is a has the setgid bit set.
214
+ def setgid?(*args) target.setgid?(*args) end
215
+
216
+ # Calls FileTest#setuid?
217
+ # rio('afile').setuid? => true or false
218
+ # Returns +true+ if the named file is a has the setuid bit set.
219
+ def setuid?(*args) target.setuid?(*args) end
220
+
221
+ # Calls FileTest#size
222
+ # rio('afile').size => integer
223
+ # Returns the size of _afile_.
224
+ # To get the length of the Rio's string representation use Rio#length
225
+ def size(*args) target.size(*args) end
226
+
227
+ # Calls FileTest#size?
228
+ # rio('afile').size? => integer or nil
229
+ # Returns +nil+ if _afile_ doesn't exist or has zero size, the
230
+ # size of the file otherwise.
231
+ def size?(*args) target.size?(*args) end
232
+
233
+ # Calls FileTest#zero?
234
+ # rio('afile').zero? => true or false
235
+ # Returns +true+ if the named file exists and has a zero size.
236
+ def zero?(*args) target.zero?(*args) end
237
+
238
+
239
+ # Returns true if the rio represents an absolute path or URI. Alias for IF::Test#absolute?
240
+ #
241
+ # rio('/tmp').abs? # >> true
242
+ # rio('.ssh').abs? # >> false
243
+ # rio('file:///tmp').abs? # >> true
244
+ # rio('http://www.ruby-doc.org/').abs? # >> true
245
+ #
246
+ def abs?() target.abs?() end
247
+
248
+
249
+ # Returns true if the Rio represents and absolute path or URI. Calls URI#absolute?
250
+ #
251
+ # rio('/tmp').absolute? # >> true
252
+ # rio('.ssh').absolute? # >> false
253
+ # rio('file:///tmp').absolute? # >> true
254
+ # rio('http://www.ruby-doc.org/').absolute? # >> true
255
+ #
256
+ def absolute?() target.absolute?() end
257
+
258
+ # Calls Pathname#mountpoint?
259
+ #
260
+ # Returns +true+ if <tt>self</tt> points to a mountpoint.
261
+ def mountpoint?() target.mountpoint?() end
262
+
263
+ # Calls Pathname#root?
264
+ #
265
+ # #root? is a predicate for root directories. I.e. it returns +true+ if the
266
+ # pathname consists of consecutive slashes.
267
+ #
268
+ # It doesn't access the actual filesystem. So it may return +false+ for some
269
+ # pathnames which points to roots such as <tt>/usr/..</tt>.
270
+ #
271
+ def root?() target.root?() end
272
+
273
+
274
+ end
275
+ end
276
+ end
277
+
278
+ module RIO
279
+ class Rio
280
+ include RIO::IF::Test
281
+ end
282
+ end
@@ -0,0 +1,206 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 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
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ module RIO
38
+ module IF
39
+ module YAML
40
+ #def file() target.file end
41
+ #def dir() target.dir end
42
+
43
+ # Puts a Rio in YAML mode.
44
+ #
45
+ #
46
+ # Rio uses the YAML class from the Ruby standard library to provide
47
+ # support for reading and writing YAML files. Normally using
48
+ # <tt>(skip)records</tt> is identical to <tt>(skip)lines</tt> because
49
+ # while +records+ only selects and does not specify the record-type,
50
+ # +lines+ is the default.
51
+ #
52
+ # The YAML extension distingishes between items selected using
53
+ # IF::GrandeStream#records, IF::GrandeStream#rows and IF::GrandeStream#lines.
54
+ # Rio returns objects loaded via
55
+ # YAML#load when +records+ or #objects is used; returns the YAML text as a String
56
+ # when +rows+ or #documents is used; and returns lines as Strings as normal when
57
+ # +lines+ is used. +records+ is the default.
58
+ #
59
+ # To read a single YAML document, Rio provides #getobj and #load. For
60
+ # example, consider the following partial 'database.yml' from the rails
61
+ # distribution:
62
+ #
63
+ # development:
64
+ # adapter: mysql
65
+ # database: rails_development
66
+ #
67
+ # test:
68
+ # adapter: mysql
69
+ # database: rails_test
70
+ #
71
+ #
72
+ # To get the object represented in the yaml file:
73
+ #
74
+ # rio('database.yml').yaml.load
75
+ # ==>{"development"=>{"adapter"=>"mysql", "database"=>"rails_development"},
76
+ # "test"=>{"adapter"=>"mysql", "database"=>"rails_test"}}
77
+ #
78
+ # Or one could read parts of the file like so:
79
+ #
80
+ # rio('database.yml').yaml.getobj['development']['database']
81
+ # ==>"rails_development"
82
+ #
83
+ # Single objects can be written using #putobj and #putobj!
84
+ # which is aliased to #dump
85
+ #
86
+ # anobject = {
87
+ # 'production' => {
88
+ # 'adapter' => 'mysql',
89
+ # 'database' => 'rails_production',
90
+ # }
91
+ # }
92
+ # rio('afile.yaml').yaml.dump(anobject)
93
+ #
94
+ #
95
+ # Single objects can be written using IF::GrandeStream#putrec (aliased to IF::YAML#putobj
96
+ # and IF::YAML#dump)
97
+ #
98
+ # rio('afile.yaml').yaml.putobj(anobject)
99
+ #
100
+ # Single objects can be loaded using IF::GrandeStream#getrec (aliased to IF::YAML#getobj
101
+ # and IF::YAML#load)
102
+ #
103
+ # anobject = rio('afile.yaml').yaml.getobj
104
+ #
105
+ # A Rio in yaml-mode is just
106
+ # like any other Rio. And all the things you can do with any Rio come
107
+ # for free. They can be iterated over using IF::Grande#each and read into an
108
+ # array using IF::Grande#[] just like any other Rio. All the selection criteria
109
+ # are identical also.
110
+ #
111
+ # Get the first three objects into an array:
112
+ #
113
+ # array_of_objects = rio('afile.yaml').yaml[0..2]
114
+ #
115
+ # Iterate over only YAML documents that are a kind_of ::Hash:
116
+ #
117
+ # rio('afile.yaml').yaml(::Hash) {|ahash| ...}
118
+ #
119
+ # This takes advantage of the fact that the default for matching records
120
+ # is <tt>===</tt>
121
+ #
122
+ # Selecting records using a Proc can be used as normal:
123
+ #
124
+ # anarray = rio('afile.yaml').yaml(proc{|anobject| ...}).to_a
125
+ #
126
+ # One could even use the copy operator to convert a CSV file to a YAML
127
+ # representation of the same data:
128
+ #
129
+ # rio('afile.yaml').yaml < rio('afile.csv').csv
130
+ #
131
+ def yaml(&block)
132
+ target.yaml(&block);
133
+ self
134
+ end
135
+
136
+
137
+ # Queries if the Rio is in yaml-mode. See #yaml
138
+ def yaml?() target.yaml? end
139
+
140
+
141
+ # Select objects from a YAML file. See #yaml and RIO::Doc::INTRO
142
+ def objects(*selectors,&block) target.objects(*selectors,&block); self end
143
+
144
+
145
+ # Reject objects from a YAML file. Calls IF::GrandeStream#skiprecords. See #yaml and RIO::Doc::INTRO
146
+ def skipobjects(*selectors,&block) target.skipobjects(*selectors,&block); self end
147
+
148
+
149
+ # Select documents from a YAML file. See #yaml and RIO::Doc::INTRO
150
+ def documents(*selectors,&block) target.documents(*selectors,&block); self end
151
+
152
+
153
+ # Reject documents from a YAML file. Calls IF::GrandeStream#skiprows. See #yaml and RIO::Doc::INTRO
154
+ def skipdocuments(*selectors,&block) target.skipdocuments(*selectors,&block); self end
155
+
156
+ # Select a single object. See #objects, IF::GrandeStream#line and #yaml.
157
+ def object(*args,&block) target.object(*args,&block); self end
158
+
159
+
160
+ # Select a single yaml document. See #documents, IF::GrandeStream#line and #yaml.
161
+ def document(*args,&block) target.document(*args,&block); self end
162
+
163
+
164
+ # Calls YAML.load.
165
+ #
166
+ # Loads a single YAML object from the stream referenced by the Rio
167
+ #
168
+ # rio('database.yml').yaml.getobj
169
+ #
170
+ # See #yaml and RIO::Doc::INTRO
171
+ #
172
+ def getobj() target.getobj() end
173
+
174
+ # Calls YAML.load.
175
+ #
176
+ # Loads a single YAML object from the stream referenced by the Rio
177
+ #
178
+ # rio('database.yml').yaml.load
179
+ #
180
+ # See #yaml and RIO::Doc::INTRO
181
+ #
182
+ def load() target.load() end
183
+
184
+ # Alias for #getrec
185
+ #def getdoc() target.getdoc() end
186
+
187
+
188
+ # Calls YAML.dump, leaving the Rio open.
189
+ def putobj(obj) target.putobj(obj); self end
190
+
191
+ # Dumps an object to a Rio as with IF::YAML#putobj, and closes the Rio.
192
+ #
193
+ # rio('afile.yaml').yaml.putobj!(anobject)
194
+ #
195
+ # is identical to
196
+ #
197
+ # rio('afile.yaml').yaml.putobj(anobject).close
198
+ #
199
+ def putobj!(obj) target.putobj!(obj); self end
200
+
201
+ # Alias for IF::YAML#putobj!
202
+ def dump(obj) target.dump(obj); self end
203
+
204
+ end
205
+ end
206
+ end