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/file.rb ADDED
@@ -0,0 +1,118 @@
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/state'
38
+ require 'rio/ops/path'
39
+ require 'rio/ops/file'
40
+
41
+ module RIO
42
+
43
+
44
+ module File #:nodoc: all
45
+ class Base < State::Base
46
+ include Ops::Path::Str
47
+
48
+ protected
49
+
50
+ def stream_rl_
51
+ #RIO::File::RL.new(self.to_uri,{:fs => self.fs})
52
+ self.rl.file_rl
53
+ end
54
+
55
+ public
56
+
57
+ def fstream()
58
+ #p self.rl.class
59
+ self.rl = self.stream_rl_
60
+ become 'Path::Stream::Open'
61
+ end
62
+
63
+ def when_missing(sym,*args)
64
+ fstream()
65
+ end
66
+ end
67
+
68
+ class NonExisting < Base
69
+ include Ops::File::NonExisting
70
+ def check?() !exist? end
71
+ end
72
+
73
+ class Existing < Base
74
+ include Ops::File::Existing
75
+ include Enumerable
76
+
77
+ def check?() self.file? end
78
+ def handle_skipped
79
+ return self unless cx.has_key?('skip_args')
80
+ args = cx['skip_args'] || []
81
+ self.skipentries(*args)
82
+ end
83
+ def [](*args)
84
+ #p "#{callstr('[]',*args)} ss_type=#{ss_type?}"
85
+ return self.yamldoc[*args] if cx['yamldoc']
86
+ if _using_files_with_a_file
87
+ unless args.empty?
88
+ ss_args = cx['ss_args'] = args
89
+ return self.files(*ss_args).to_a
90
+ else
91
+ return to_a()
92
+ end
93
+ else
94
+ fstream[*args]
95
+ end
96
+
97
+ end
98
+ def each(*args,&block)
99
+ #p "#{callstr('each',*args)} ss_type=#{ss_type?}"
100
+ if _using_files_with_a_file
101
+ handle_skipped()
102
+ sel = Match::Entry::Selector.new(cx['entry_sel'])
103
+ yield new_rio_cx(self) if sel.match?(self)
104
+ else
105
+ fstream.each(*args,&block)
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ def _using_files_with_a_file
112
+ ss_type? == 'files' and !stream_iter?
113
+ end
114
+ end
115
+
116
+ end
117
+
118
+ end
@@ -0,0 +1,103 @@
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 Filter
39
+ module CloseOnEOF
40
+ attr_accessor :oncloseproc
41
+ attr_accessor :autoclosed
42
+ def self.extend_object(ioh)
43
+ super
44
+ ioh.autoclosed = false
45
+ ioh.oncloseproc = nil
46
+ end
47
+ def autoclosed?
48
+ @autoclosed
49
+ end
50
+ # def close_on_eof_raise(&block)
51
+ # begin
52
+ # rtn = yield
53
+ # rescue EOFError
54
+ # close_on_eof_(rtn)
55
+ # raise
56
+ # end
57
+ # rtn
58
+ # end
59
+ def close_on_eof(&block)
60
+ #p callstr('close_on_eof',rtn)
61
+ rtn = yield
62
+ if handle.eof?
63
+ close_on_eof_(rtn)
64
+ end
65
+ rtn
66
+ end
67
+ def close_on_eof1(&block)
68
+ #p callstr('close_on_eof',rtn)
69
+ if handle.eof?
70
+ close_on_eof_(nil)
71
+ yield
72
+ else
73
+ yield
74
+ end
75
+ end
76
+ def close_on_eof_(rtn)
77
+ #p callstr('close_on_eof_',rtn)
78
+ unless @autoclosed or closed?
79
+ #handle.close()
80
+ @oncloseproc.call() unless @oncloseproc.nil?
81
+ @autoclosed = true
82
+ end
83
+ rtn
84
+ end
85
+
86
+ def each_line(*args,&block) close_on_eof{super} end
87
+ def each_byte(*args,&block) close_on_eof{super} end
88
+ def each_bytes(nb,*args,&block) close_on_eof{super} end
89
+
90
+ def readline(*args) close_on_eof{super} end
91
+
92
+ def readchar(*args) close_on_eof{super} end
93
+ def gets(*args) close_on_eof{super} end
94
+ def readlines(*args) close_on_eof{super} end
95
+
96
+ def read(*args) close_on_eof{super} end
97
+
98
+ def copy_stream(dst) close_on_eof{super} end
99
+ def contents() close_on_eof{super} end
100
+ end
101
+ end
102
+ end
103
+ __END__
@@ -0,0 +1,70 @@
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 'zlib'
38
+
39
+ module RIO
40
+ module Filter
41
+ module GZipMissing
42
+ def binmode()
43
+ self
44
+ end
45
+ end
46
+ module GZipWin32MissingEachLine
47
+ def each_line(*args,&block)
48
+ self.each(*args,&block)
49
+ end
50
+ end
51
+ module GZipRead
52
+ def self.extend_object(ioh_stream)
53
+ super
54
+ gz = Zlib::GzipReader.new(ioh_stream.ios)
55
+ gz.extend Filter::GZipMissing
56
+ gz.extend Filter::GZipWin32MissingEachLine
57
+ ioh_stream.iostack.push(gz)
58
+ end
59
+ end
60
+ module GZipWrite
61
+ def self.extend_object(ioh_stream)
62
+ super
63
+ gz = Zlib::GzipWriter.new(ioh_stream.ios)
64
+ gz.extend Filter::GZipMissing
65
+ ioh_stream.iostack.push(gz)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ __END__
data/lib/rio/filter.rb ADDED
@@ -0,0 +1,94 @@
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 Filter #:nodoc: all
39
+ def self.make_line_filter(sym)
40
+ module_eval %{
41
+ module #{sym.to_s.capitalize}
42
+ module IOE
43
+ def gets(*args) super.__send__(:#{sym}) end
44
+ def readline(*args) super.__send__(:#{sym}) end
45
+ def each_line(*args,&block) super { |l| yield l.__send__(:#{sym}) } end
46
+ def readlines(*args) super.map{|el| el.__send__(:#{sym})} end
47
+ end
48
+ include IOE
49
+ end
50
+ }
51
+ end
52
+ end
53
+ end
54
+ module RIO
55
+ module Cx
56
+ module Methods
57
+ require 'rio/context/cxx.rb'
58
+ def self.make_filter_methods(sym)
59
+ module_eval %{
60
+ def #{sym}(arg=true,&block)
61
+ cx['#{sym}'] = arg
62
+ add_filter(Filter::#{sym.to_s.capitalize}) if arg and self.ioh
63
+ each(&block) if block_given?
64
+ self
65
+ end
66
+ def #{sym}?() cxx?('#{sym}') end
67
+ def no#{sym}(arg=false,&block) #{sym}(arg,&block) end
68
+ }
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ module RIO
75
+ FILTER_SYMS = [:chomp, :strip, :lstrip, :rstrip]
76
+ FILTER_SYMS.each { |sym|
77
+ Filter.make_line_filter(sym)
78
+ Cx::Methods.make_filter_methods(sym)
79
+ }
80
+ module Stream
81
+ module Filters
82
+
83
+ def add_line_filters()
84
+ add_filter(Filter::Chomp) if chomp?
85
+ add_filter(Filter::Strip) if strip?
86
+ add_filter(Filter::Lstrip) if lstrip?
87
+ add_filter(Filter::Rstrip) if rstrip?
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+
94
+ __END__
@@ -0,0 +1,41 @@
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
+ module RIO
37
+ module FS
38
+ class Base
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,122 @@
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
+ module RIO
37
+ module FS #:nodoc: all
38
+ module Str
39
+ def fnmatch?(s,globstr,*flags) @file.fnmatch?(globstr,s,*flags) end
40
+ def extname(s,*args) @file.extname(s,*args) end
41
+
42
+ def basename(s,*args) @file.basename(s,*args) end
43
+ def dirname(s,*args) @file.dirname(s,*args) end
44
+ def join(s,*args) @file.join(s,*args) end
45
+ def cleanpath(s,*args) @path.new(s).cleanpath(*args) end
46
+ end
47
+ module File
48
+ def expand_path(s,*args) @file.expand_path(s,*args) end
49
+
50
+
51
+ def ftype(s,*args) @file.ftype(s,*args) end
52
+ def symlink(s,d) @file.symlink(s.to_s,d.to_s) end
53
+
54
+ def stat(s,*args) @file.stat(s,*args) end
55
+
56
+ def atime(s,*args) @file.atime(s,*args) end
57
+ def ctime(s,*args) @file.ctime(s,*args) end
58
+ def mtime(s,*args) @file.mtime(s,*args) end
59
+
60
+ def chmod(mod,s) @file.chmod(mod,s.to_s) end
61
+ def chown(owner_int,group_int,s) @file.chown(owner_int,group_int,s.to_s) end
62
+
63
+ def readlink(s,*args) @file.readlink(s,*args) end
64
+ def lstat(s,*args) @file.lstat(s,*args) end
65
+
66
+ def truncate(s,integer) @file.truncate(s,integer) end
67
+
68
+ end
69
+ module Dir
70
+ def rmdir(s) @dir.rmdir(s.to_s) end
71
+ def mkdir(s,*args) @dir.mkdir(s.to_s,*args) end
72
+ def chdir(s,&block) @dir.chdir(s.to_s,&block) end
73
+ def foreach(s,&block) @dir.foreach(s.to_s,&block) end
74
+ def entries(s) @dir.entries(s.to_s) end
75
+ def glob(gstr,*args,&block) @dir.glob(gstr,*args,&block) end
76
+ def pwd() @dir.pwd end
77
+ def getwd() @dir.getwd end
78
+ end
79
+ module Test
80
+ def blockdev?(s,*args) @test.blockdev?(s,*args) end
81
+ def chardev?(s,*args) @test.chardev?(s,*args) end
82
+ def directory?(s,*args) @test.directory?(s,*args) end
83
+ def dir?(s,*args) @test.directory?(s,*args) end
84
+ def executable?(s,*args) @test.executable?(s,*args) end
85
+ def executable_real?(s,*args) @test.executable_real?(s,*args) end
86
+ def exist?(s,*args) @test.exist?(s,*args) end
87
+ def file?(s,*args) @test.file?(s,*args) end
88
+ def grpowned?(s,*args) @test.grpowned?(s,*args) end
89
+ def owned?(s,*args) @test.owned?(s,*args) end
90
+ def pipe?(s,*args) @test.pipe?(s,*args) end
91
+ def readable?(s,*args) @test.readable?(s,*args) end
92
+ def readable_real?(s,*args) @test.readable_real?(s,*args) end
93
+ def setgid?(s,*args) @test.setgid?(s,*args) end
94
+ def setuid?(s,*args) @test.setuid?(s,*args) end
95
+ def size(s,*args) @test.size(s,*args) end
96
+ def size?(s,*args) @test.size?(s,*args) end
97
+ def socket?(s,*args) @test.socket?(s,*args) end
98
+ def sticky?(s,*args) @test.sticky?(s,*args) end
99
+ def symlink?(s,*args) @test.symlink?(s,*args) end
100
+ def writable?(s,*args) @test.writable?(s,*args) end
101
+ def writable_real?(s,*args) @test.writable_real?(s,*args) end
102
+ def zero?(s,*args) @test.zero?(s,*args) end
103
+ end
104
+ module Path
105
+ require 'pathname'
106
+ def root?(s) @path.new(s).root? end
107
+ def mountpoint?(s) @path.new(s).mountpoint? end
108
+ def realpath(s) @path.new(s).realpath end
109
+ end
110
+ module Util
111
+ # Directory stuff
112
+ def cp_r(s,d) @util.cp_r(s.to_s,d.to_s) end
113
+ def rmtree(s) @util.rmtree(s.to_s) end
114
+ def mkpath(s) @util.mkpath(s.to_s) end
115
+ def rm(s) @file.delete(s.to_s) end
116
+ def touch(s) @util.touch(s.to_s) end
117
+
118
+ # file or dir
119
+ def mv(s,d) @util.mv(s.to_s,d.to_s) end
120
+ end
121
+ end
122
+ end