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
data/lib/rio/if.rb ADDED
@@ -0,0 +1,64 @@
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
+ require 'rio/if/csv'
40
+ include RIO::IF::CSV
41
+ require 'rio/if/yaml'
42
+ include RIO::IF::YAML
43
+ end
44
+ end
45
+
46
+ require 'rio/if/internal'
47
+ require 'rio/if/basic'
48
+
49
+ module RIO
50
+ class Rio
51
+ require 'rio/if/grande'
52
+ require 'rio/if/grande_entry'
53
+ require 'rio/if/grande_stream'
54
+
55
+ require 'rio/if/test'
56
+ require 'rio/if/path'
57
+ require 'rio/if/fileordir'
58
+ require 'rio/if/file'
59
+ require 'rio/if/dir'
60
+ require 'rio/if/rubyio'
61
+ require 'rio/if/temp'
62
+ require 'rio/if/string'
63
+ end
64
+ end
data/lib/rio/ioh.rb ADDED
@@ -0,0 +1,162 @@
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
+ #require 'fileutils'
38
+
39
+ module RIO
40
+ module IOH #:nodoc: all
41
+ class Base
42
+ attr :ios
43
+ def initialize(ios,*args)
44
+ @ios = ios
45
+ end
46
+ def initialize_copy(other)
47
+ #p callstr('ioh:initialize_copy',other)
48
+ super
49
+ #p @ios
50
+ @ios = other.ios.clone unless other.ios.nil?
51
+ end
52
+ def callstr(func,*args)
53
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
54
+ end
55
+ def handle() @ios end
56
+ def open?() not closed? end
57
+ end
58
+ class Stream < Base
59
+ attr_reader :iostack
60
+ attr_accessor :hindex
61
+ def initialize(iosp,*args)
62
+ super
63
+ @iostack = [@ios]
64
+ @hindex = -1
65
+ end
66
+ def initialize_copy(*args)
67
+ #p callstr('ioh_stream:initialize_copy',*args)
68
+ super
69
+ @iostack = @iostack.map { |io| io.nil? || io.equal?(@ios) ? io : io.clone }
70
+ end
71
+ def copy_blksize()
72
+ if @ios.respond_to? :stat
73
+ sz = @ios.stat.blksize
74
+ sz = nil if sz.nil? || sz == 0
75
+ end
76
+ sz || 512
77
+ end
78
+
79
+ def handle() @iostack[@hindex] end
80
+ def close() handle.close unless self.closed? end
81
+ def closed?() handle.nil? or handle.closed? end
82
+ def eof?() closed? or handle.eof? end
83
+ def copy_stream(dst)
84
+ #p callstr('copy_stream',dst)
85
+ blksize = _stream_blksize(handle,dst)
86
+ until handle.eof?
87
+ dst.print(handle.read(blksize))
88
+ end
89
+ self
90
+ end
91
+ def puts(*args)
92
+ handle.puts(*args)
93
+ end
94
+ def each_bytes(nb,&block)
95
+ until handle.eof?
96
+ break unless s = handle.read(nb)
97
+ yield s
98
+ end
99
+ self
100
+ end
101
+ def each_line(*args,&block)
102
+ handle.each_line(*args,&block)
103
+ end
104
+ extend Forwardable
105
+ def_instance_delegators(:handle,:binmode,:stat,:rewind,
106
+ :each,:each_byte,:gets,:getc,
107
+ :read,:readlines,:readline,:sysread,
108
+ :<<,:print,:printf,:putc,:write,:syswrite,
109
+ :pos,:pos=,:lineno,:lineno=,
110
+ :fileno,
111
+ :close_read,:close_write,
112
+ :fsync,:sync,:sync=,:fcntl,:ioctl)
113
+
114
+ def method_missing(sym,*args,&block)
115
+ #p callstr('method_missing',sym,*args)
116
+ handle.__send__(sym,*args,&block)
117
+ end
118
+ DEFAULT_BLKSIZE = 1024
119
+ def _stream_blksize(*streams)
120
+ sizes = []
121
+ streams.each do |s|
122
+ next unless s.kind_of?(::IO)
123
+ next unless s.respond_to?(:stat)
124
+ size = _stat_blksize(s.stat)
125
+ sizes << size if size
126
+ end
127
+ sizes.min || DEFAULT_BLKSIZE
128
+ end
129
+ def _stat_blksize(st)
130
+ s = st.blksize
131
+ return nil unless s
132
+ return nil if s == 0
133
+ s
134
+ end
135
+ end
136
+ class Dir < Base
137
+ def close
138
+ #p "#{callstr('close')} ios=#{@ios}"
139
+ unless @ios.nil?
140
+ @ios.close
141
+ @ios = nil
142
+ end
143
+ end
144
+ def closed?() @ios.nil? end
145
+ def each(&block)
146
+ while filename = handle.read
147
+ yield filename
148
+ end
149
+ end
150
+ def each0(&block)
151
+ handle.each { |filename|
152
+ yield filename
153
+ }
154
+ end
155
+ extend Forwardable
156
+ def_instance_delegators(:handle,
157
+ :read,
158
+ :pos,:pos=,:tell,:seek,:rewind)
159
+ end
160
+ end
161
+ end
162
+ __END__
data/lib/rio/iomode.rb ADDED
@@ -0,0 +1,109 @@
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
+
38
+ require 'rio/abstract_method'
39
+
40
+ module RIO
41
+ module Mode #:nodoc: all
42
+ class Base
43
+ attr_reader :mode
44
+ protected :mode
45
+
46
+ def initialize(arg)
47
+ if arg.kind_of? self.class
48
+ copy(arg)
49
+ else
50
+ @mode = arg
51
+ end
52
+ end
53
+
54
+ def copy(other)
55
+ @mode = other.mode
56
+ end
57
+
58
+ def to_s() @mode.to_s end
59
+
60
+ abstract_method :primarily_read?, :primarily_write?, :allows_both?, :creates?
61
+
62
+ def read_only?()
63
+ allows_read? and !allows_write?
64
+ end
65
+ def write_only?()
66
+ !allows_read? and allows_read?
67
+ end
68
+ def allows_read?()
69
+ primarily_read? or allows_both?
70
+ end
71
+ def allows_write?()
72
+ primarily_write? or allows_both?
73
+ end
74
+ extend Forwardable
75
+ def_instance_delegators(:@mode,:=~,:==,:===)
76
+ end
77
+ end
78
+ module Mode
79
+ module StrMethods
80
+ def primarily_read?() @mode[0,1] == 'r' end
81
+ def primarily_write?() @mode[0,1] == 'w' or primarily_append? end
82
+ def primarily_append?() @mode[0,1] == 'a' end
83
+ def allows_both?() @mode[-1,1] == '+' end
84
+ def creates?() primarily_append? || primarily_write? end
85
+ end
86
+ class Str < Base
87
+ include StrMethods
88
+ end
89
+ end
90
+ module Mode
91
+ class Int < Base
92
+ def primarily_read?()
93
+ # (@mode&File::RDONLY || (@mode&File::RDWR && ~(@mode&File::TRUNC)))
94
+ end
95
+ def primarily_write?()
96
+ # @mode&File::WRONLY || (@mode&File::RDWR && @mode&File::TRUNC) || primarily_append?
97
+ end
98
+ def primarily_append?()
99
+ # @mode&File::APPEND
100
+ end
101
+ def allows_both?()
102
+ # @mode[1,-1] == '+'
103
+ end
104
+ def creates?()
105
+ # primarily_append? || primarily_write?
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,106 @@
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
+ require 'rio/exception/notsupported'
38
+
39
+ module RIO
40
+ module IOS
41
+ module Methods
42
+ end
43
+ end
44
+ end
45
+
46
+ module RIO
47
+ module IOS #:nodoc: all
48
+ module Fail #:nodoc: all
49
+ def notsupported(sym)
50
+ raise RIO::Exception::NotSupported,RIO::Exception::NotSupported.emsg(sym,self)
51
+ end
52
+
53
+ def <<(obj) notsupported(:<<) end
54
+ def binmode() notsupported(:binmode) end
55
+ def close() notsupported(:close) end
56
+ def close_read() notsupported(:close_read) end
57
+ def close_write() notsupported(:close_write) end
58
+ def closed?() notsupported(:closed?) end
59
+ def each(sep_string=$/,&block) notsupported(:each) end
60
+ def each_line(sep_string=$/,&block) notsupported(:each_line) end
61
+ def each_byte(sep_string=$/,&block) notsupported(:each_byte) end
62
+ def eof?() notsupported(:eof?) end
63
+ def fcntl(integer_cmd,arg) notsupported(:fcntl) end
64
+ def fileno() notsupported(:fileno) end
65
+ def to_i() notsupported(:to_i) end
66
+ def flush() notsupported(:flush) end
67
+ def fsync() notsupported(:fsync) end
68
+ def getc() notsupported(:getc) end
69
+ def gets(sep_string=$/) notsupported(:gets) end
70
+ def ioctl(integer_cmd,arg) notsupported(:ioctl) end
71
+ def isatty() notsupported(:isatty) end
72
+ def tty?() notsupported(:tty?) end
73
+ def lineno() notsupported(:lineno) end
74
+ def lineno=(a) notsupported(:lineno=) end
75
+ def pid() notsupported(:pid) end
76
+ def pos() notsupported(:pos) end
77
+ def tell() notsupported(:tell) end
78
+ def pos=(v) notsupported(:pos=) end
79
+ def print(*objs) notsupported(:print) end
80
+ def printf(format,*objs) notsupported(:printf) end
81
+ def putc(obj) notsupported(:putc) end
82
+ def puts(*objs) notsupported(:puts) end
83
+ def read(*args) notsupported(:read) end
84
+ def readchar() notsupported(:readchar) end
85
+ def readline(sep_string=$/) notsupported(:readline) end
86
+ def readlines(sep_string=$/) notsupported(:readlines) end
87
+ def readpartial(maxlen,*args) notsupported(:readpartial) end
88
+ def reopen(*args) notsupported(:reopen) end
89
+ def rewind() notsupported(:rewind) end
90
+ def seek() notsupported(:seek) end
91
+ def stat() notsupported(:stat) end
92
+ def sync() notsupported(:sync) end
93
+ def sync=(v) notsupported(:sync=) end
94
+ def sysread() notsupported(:sysread) end
95
+ def sysseek() notsupported(:sysseek) end
96
+ def syswrite() notsupported(:syswrite) end
97
+ def ungetc() notsupported(:ungetc) end
98
+ def write(str) notsupported(:write) end
99
+
100
+ def callstr(func,*args)
101
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
102
+ end
103
+
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,119 @@
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
+ require 'rio/exception/notsupported'
38
+
39
+ module RIO
40
+ class GenericIOMode #:nodoc: all
41
+ def initialize(mode_string)
42
+ @str = mode_string
43
+ end
44
+ def to_s() @str end
45
+ def can_write?
46
+ @str =~ /^[aw]/ or @str =~ /\+/
47
+ end
48
+ def can_read?
49
+ @str =~ /^r/ or @str =~ /\+/
50
+ end
51
+ def appends?
52
+ @str =~ /^a/
53
+ end
54
+ def =~(re)
55
+ re =~ @str
56
+ end
57
+ end
58
+ end
59
+
60
+ module RIO
61
+ module IOS #:nodoc: all
62
+ class Generic #:nodoc: all
63
+ def initialize(el,m='r')
64
+ end
65
+
66
+ def <<(obj) self end
67
+ def binmode() self end
68
+ def close() nil end
69
+ def close_read() nil end
70
+ def close_write() nil end
71
+ def closed?() true end
72
+ def each(sep_string=$/,&block) self end
73
+ def each_line(sep_string=$/,&block) self end
74
+ def each_byte(sep_string=$/,&block) nil end
75
+ def eof?() true end
76
+ def fcntl(integer_cmd,arg) nil end
77
+ def fileno() nil end
78
+ def to_i() nil end
79
+ def flush() self end
80
+ def fsync() nil end
81
+ def getc() nil end
82
+ def gets(sep_string=$/) nil end
83
+ def ioctl(integer_cmd,arg) nil end
84
+ def isatty() false end
85
+ def tty?() false end
86
+ def lineno() 0 end
87
+ def lineno=(a) nil end
88
+ def pid() nil end
89
+ def pos() nil end
90
+ def tell() nil end
91
+ def pos=(v) self.pos end
92
+ def print(*objs) nil end
93
+ def printf(format,*objs) nil end
94
+ def putc(obj) nil end
95
+ def puts(*objs) nil end
96
+ def read(*args) nil end
97
+ def readchar() nil end
98
+ def readline(sep_string=$/) nil end
99
+ def readlines(sep_string=$/) [] end
100
+ def readpartial(maxlen,*args) end
101
+ def reopen(*args) self end
102
+ def rewind() 0 end
103
+ def seek() 0 end
104
+ def stat() nil end
105
+ def sync() nil end
106
+ def sync=(v) nil end
107
+ def sysread() 0 end
108
+ def sysseek() 0 end
109
+ def syswrite() 0 end
110
+ def ungetc() nil end
111
+ def write(str) 0 end
112
+
113
+ def callstr(func,*args)
114
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
115
+ end
116
+
117
+ end
118
+ end
119
+ end