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.
- data/COPYING +341 -0
- data/README +81 -0
- data/Rakefile +281 -0
- data/build_doc.rb +94 -0
- data/doc/ANNOUNCE +159 -0
- data/doc/RELEASE_NOTES +308 -0
- data/doc/RIOIS +215 -0
- data/doc/generators/template/html/rio.css +428 -0
- data/doc/generators/template/html/rio.rb +523 -0
- data/doc/generators/template/html/ugly.rb +132 -0
- data/doc/pkg_def.rb +60 -0
- data/doc/rfc1738.txt +1403 -0
- data/doc/rfc959.txt +3933 -0
- data/ex/catcsv.rb +64 -0
- data/ex/colx.rb +8 -0
- data/ex/findinruby +15 -0
- data/ex/findruby +14 -0
- data/ex/passwd_report.rb +8 -0
- data/ex/prompt.rb +25 -0
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +42 -0
- data/ex/riogunzip +31 -0
- data/ex/riogzip +24 -0
- data/ex/rioprompt.rb +10 -0
- data/ex/targz2zip +17 -0
- data/ex/tonl +10 -0
- data/lib/rio/abstract_method.rb +56 -0
- data/lib/rio/argv.rb +56 -0
- data/lib/rio/arycopy.rb +43 -0
- data/lib/rio/assert.rb +114 -0
- data/lib/rio/base.rb +56 -0
- data/lib/rio/callstr.rb +46 -0
- data/lib/rio/const.rb +51 -0
- data/lib/rio/construct.rb +50 -0
- data/lib/rio/constructor.rb +258 -0
- data/lib/rio/context/autoclose.rb +72 -0
- data/lib/rio/context/copying.rb +55 -0
- data/lib/rio/context/cxx.rb +66 -0
- data/lib/rio/context/dir.rb +120 -0
- data/lib/rio/context/gzip.rb +50 -0
- data/lib/rio/context/methods.rb +182 -0
- data/lib/rio/context/skip.rb +66 -0
- data/lib/rio/context/stream.rb +229 -0
- data/lib/rio/context.rb +117 -0
- data/lib/rio/cp.rb +370 -0
- data/lib/rio/def.rb +53 -0
- data/lib/rio/dir.rb +144 -0
- data/lib/rio/doc/EXAMPLES.rb +299 -0
- data/lib/rio/doc/HOWTO.rb +737 -0
- data/lib/rio/doc/INDEX.rb +311 -0
- data/lib/rio/doc/INTRO.rb +1068 -0
- data/lib/rio/doc/OPTIONAL.rb +130 -0
- data/lib/rio/doc/SYNOPSIS.rb +183 -0
- data/lib/rio/doc.rb +45 -0
- data/lib/rio/entrysel.rb +246 -0
- data/lib/rio/exception/copy.rb +97 -0
- data/lib/rio/exception/notimplemented.rb +57 -0
- data/lib/rio/exception/notsupported.rb +46 -0
- data/lib/rio/exception/open.rb +61 -0
- data/lib/rio/exception/state.rb +73 -0
- data/lib/rio/exception.rb +41 -0
- data/lib/rio/ext/csv.rb +351 -0
- data/lib/rio/ext/if.rb +45 -0
- data/lib/rio/ext/mp3info.rb +80 -0
- data/lib/rio/ext/splitlines.rb +253 -0
- data/lib/rio/ext/yaml/doc.rb +133 -0
- data/lib/rio/ext/yaml/tie.rb +149 -0
- data/lib/rio/ext/yaml.rb +164 -0
- data/lib/rio/ext/zipfile/fs.rb +116 -0
- data/lib/rio/ext/zipfile/rl.rb +251 -0
- data/lib/rio/ext/zipfile/rootdir.rb +117 -0
- data/lib/rio/ext/zipfile/state.rb +161 -0
- data/lib/rio/ext/zipfile/wrap.rb +204 -0
- data/lib/rio/ext/zipfile.rb +110 -0
- data/lib/rio/ext.rb +138 -0
- data/lib/rio/factory.rb +436 -0
- data/lib/rio/file.rb +118 -0
- data/lib/rio/filter/closeoneof.rb +103 -0
- data/lib/rio/filter/gzip.rb +70 -0
- data/lib/rio/filter.rb +94 -0
- data/lib/rio/fs/base.rb +41 -0
- data/lib/rio/fs/impl.rb +122 -0
- data/lib/rio/fs/native.rb +75 -0
- data/lib/rio/fs/stream.rb +61 -0
- data/lib/rio/fs/url.rb +63 -0
- data/lib/rio/ftp/conncache.rb +101 -0
- data/lib/rio/ftp/dir.rb +94 -0
- data/lib/rio/ftp/fs.rb +180 -0
- data/lib/rio/ftp/ftpfile.rb +20 -0
- data/lib/rio/grande.rb +97 -0
- data/lib/rio/handle.rb +100 -0
- data/lib/rio/if/basic.rb +64 -0
- data/lib/rio/if/csv.rb +76 -0
- data/lib/rio/if/dir.rb +157 -0
- data/lib/rio/if/file.rb +89 -0
- data/lib/rio/if/fileordir.rb +268 -0
- data/lib/rio/if/grande.rb +729 -0
- data/lib/rio/if/grande_entry.rb +379 -0
- data/lib/rio/if/grande_stream.rb +693 -0
- data/lib/rio/if/internal.rb +125 -0
- data/lib/rio/if/path.rb +462 -0
- data/lib/rio/if/rubyio.rb +681 -0
- data/lib/rio/if/string.rb +83 -0
- data/lib/rio/if/temp.rb +45 -0
- data/lib/rio/if/test.rb +282 -0
- data/lib/rio/if/yaml.rb +206 -0
- data/lib/rio/if.rb +64 -0
- data/lib/rio/ioh.rb +162 -0
- data/lib/rio/iomode.rb +109 -0
- data/lib/rio/ios/fail.rb +106 -0
- data/lib/rio/ios/generic.rb +119 -0
- data/lib/rio/ios/mode.rb +60 -0
- data/lib/rio/ios/null.rb +119 -0
- data/lib/rio/iowrap.rb +128 -0
- data/lib/rio/kernel.rb +54 -0
- data/lib/rio/local.rb +62 -0
- data/lib/rio/match.rb +53 -0
- data/lib/rio/matchrecord.rb +283 -0
- data/lib/rio/no_warn.rb +49 -0
- data/lib/rio/nullio.rb +159 -0
- data/lib/rio/open3.rb +68 -0
- data/lib/rio/ops/construct.rb +61 -0
- data/lib/rio/ops/create.rb +77 -0
- data/lib/rio/ops/dir.rb +346 -0
- data/lib/rio/ops/either.rb +134 -0
- data/lib/rio/ops/file.rb +102 -0
- data/lib/rio/ops/path.rb +296 -0
- data/lib/rio/ops/stream/input.rb +267 -0
- data/lib/rio/ops/stream/output.rb +100 -0
- data/lib/rio/ops/stream/read.rb +86 -0
- data/lib/rio/ops/stream/write.rb +57 -0
- data/lib/rio/ops/stream.rb +87 -0
- data/lib/rio/ops/symlink.rb +80 -0
- data/lib/rio/path/reset.rb +69 -0
- data/lib/rio/path.rb +129 -0
- data/lib/rio/piper/cp.rb +80 -0
- data/lib/rio/piper.rb +122 -0
- data/lib/rio/prompt.rb +66 -0
- data/lib/rio/rectype.rb +88 -0
- data/lib/rio/rl/base.rb +118 -0
- data/lib/rio/rl/builder.rb +117 -0
- data/lib/rio/rl/chmap.rb +66 -0
- data/lib/rio/rl/fs2url.rb +82 -0
- data/lib/rio/rl/ioi.rb +78 -0
- data/lib/rio/rl/path.rb +110 -0
- data/lib/rio/rl/pathmethods.rb +116 -0
- data/lib/rio/rl/uri.rb +200 -0
- data/lib/rio/rl/withpath.rb +296 -0
- data/lib/rio/scheme/aryio.rb +88 -0
- data/lib/rio/scheme/cmdio.rb +80 -0
- data/lib/rio/scheme/cmdpipe.rb +118 -0
- data/lib/rio/scheme/fd.rb +65 -0
- data/lib/rio/scheme/ftp.rb +141 -0
- data/lib/rio/scheme/http.rb +78 -0
- data/lib/rio/scheme/null.rb +55 -0
- data/lib/rio/scheme/path.rb +98 -0
- data/lib/rio/scheme/stderr.rb +55 -0
- data/lib/rio/scheme/stdio.rb +71 -0
- data/lib/rio/scheme/strio.rb +87 -0
- data/lib/rio/scheme/sysio.rb +63 -0
- data/lib/rio/scheme/tcp.rb +75 -0
- data/lib/rio/scheme/temp.rb +200 -0
- data/lib/rio/state/error.rb +72 -0
- data/lib/rio/state.rb +242 -0
- data/lib/rio/stream/base.rb +54 -0
- data/lib/rio/stream/duplex.rb +79 -0
- data/lib/rio/stream/open.rb +202 -0
- data/lib/rio/stream.rb +181 -0
- data/lib/rio/symantics.rb +45 -0
- data/lib/rio/tempdir.rb +132 -0
- data/lib/rio/to_rio/all.rb +39 -0
- data/lib/rio/to_rio/array.rb +39 -0
- data/lib/rio/to_rio/io.rb +40 -0
- data/lib/rio/to_rio/object.rb +42 -0
- data/lib/rio/to_rio/string.rb +40 -0
- data/lib/rio/to_rio.rb +67 -0
- data/lib/rio/uri/file.rb +198 -0
- data/lib/rio/util.rb +48 -0
- data/lib/rio/version.rb +51 -0
- data/lib/rio.rb +162 -0
- data/setup.rb +1360 -0
- data/test/bin/count_lines.rb +11 -0
- data/test/bin/find_lines.rb +13 -0
- data/test/bin/list_dir.rb +14 -0
- data/test/ftp/all.rb +9 -0
- data/test/ftp/anon_copy_data.rb +36 -0
- data/test/ftp/anon_misc.rb +124 -0
- data/test/ftp/anon_read.rb +105 -0
- data/test/ftp/anon_special.rb +68 -0
- data/test/ftp/anon_write.rb +70 -0
- data/test/ftp/ftp2ftp.rb +51 -0
- data/test/ftp/initftpfiles.rb +14 -0
- data/test/ftp/testdef.rb +55 -0
- data/test/gem_runtests.rb +15 -0
- data/test/http/all.rb +4 -0
- data/test/http/copy-from-http.rb +141 -0
- data/test/http/uri-meta.rb +72 -0
- data/test/lib/temp_server.rb +46 -0
- data/test/runalltests.rb +17 -0
- data/test/runftptests.rb +14 -0
- data/test/runhttp.rb +11 -0
- data/test/runhttptests.rb +14 -0
- data/test/runtests.rb +52 -0
- data/test/tc/abs.rb +355 -0
- data/test/tc/all.rb +80 -0
- data/test/tc/base.rb +31 -0
- data/test/tc/base2.rb +87 -0
- data/test/tc/cd1.rb +113 -0
- data/test/tc/clearsel.rb +68 -0
- data/test/tc/clone.rb +208 -0
- data/test/tc/closeoncopy.rb +102 -0
- data/test/tc/closeoneof.rb +194 -0
- data/test/tc/cmdpipe.rb +149 -0
- data/test/tc/copy-dir-samevar.rb +91 -0
- data/test/tc/copy-from.rb +129 -0
- data/test/tc/copy-to.rb +91 -0
- data/test/tc/copy.rb +74 -0
- data/test/tc/copyarray.rb +188 -0
- data/test/tc/copydest.rb +50 -0
- data/test/tc/copydir.rb +166 -0
- data/test/tc/copydirlines.rb +121 -0
- data/test/tc/copylines.rb +46 -0
- data/test/tc/copynonex.rb +118 -0
- data/test/tc/copysymlink.rb +39 -0
- data/test/tc/create.rb +114 -0
- data/test/tc/csv.rb +226 -0
- data/test/tc/csv2.rb +138 -0
- data/test/tc/csv_columns.rb +37 -0
- data/test/tc/csvutil.rb +56 -0
- data/test/tc/dir.rb +76 -0
- data/test/tc/dir_iter.rb +383 -0
- data/test/tc/dirautoclose.rb +67 -0
- data/test/tc/dirent.rb +178 -0
- data/test/tc/dirss.rb +81 -0
- data/test/tc/each.rb +111 -0
- data/test/tc/each_break.rb +243 -0
- data/test/tc/edf.rb +81 -0
- data/test/tc/empty.rb +51 -0
- data/test/tc/emptyriodir.rb +129 -0
- data/test/tc/entary.rb +227 -0
- data/test/tc/entsel.rb +110 -0
- data/test/tc/eq.rb +101 -0
- data/test/tc/expand_path.rb +69 -0
- data/test/tc/ext.rb +136 -0
- data/test/tc/fileno.rb +94 -0
- data/test/tc/files_select.rb +92 -0
- data/test/tc/get.rb +152 -0
- data/test/tc/getrec.rb +137 -0
- data/test/tc/gzip.rb +109 -0
- data/test/tc/io_each_byte.rb +60 -0
- data/test/tc/io_read.rb +80 -0
- data/test/tc/iometh.rb +149 -0
- data/test/tc/likeio.rb +116 -0
- data/test/tc/line_record_row.rb +51 -0
- data/test/tc/lineno.rb +196 -0
- data/test/tc/lines.rb +66 -0
- data/test/tc/misc.rb +432 -0
- data/test/tc/nolines.rb +204 -0
- data/test/tc/noqae.rb +879 -0
- data/test/tc/null.rb +45 -0
- data/test/tc/once.rb +6 -0
- data/test/tc/overload.rb +140 -0
- data/test/tc/pa.rb +158 -0
- data/test/tc/path_parts.rb +175 -0
- data/test/tc/pathop.rb +60 -0
- data/test/tc/paths.rb +145 -0
- data/test/tc/pid.rb +31 -0
- data/test/tc/piper.rb +143 -0
- data/test/tc/programs_util.rb +24 -0
- data/test/tc/qae.rb +493 -0
- data/test/tc/qae_riovar.rb +499 -0
- data/test/tc/readline.rb +30 -0
- data/test/tc/records.rb +68 -0
- data/test/tc/rename.rb +233 -0
- data/test/tc/rename_assign.rb +45 -0
- data/test/tc/riorl.rb +181 -0
- data/test/tc/route.rb +51 -0
- data/test/tc/selnosel.rb +33 -0
- data/test/tc/skip.rb +89 -0
- data/test/tc/skiplines.rb +71 -0
- data/test/tc/split.rb +28 -0
- data/test/tc/splitlines.rb +65 -0
- data/test/tc/splitpath.rb +83 -0
- data/test/tc/sub.rb +46 -0
- data/test/tc/symlink.rb +176 -0
- data/test/tc/symlink0.rb +348 -0
- data/test/tc/symlink1.rb +114 -0
- data/test/tc/synopsis.rb +75 -0
- data/test/tc/temp.rb +152 -0
- data/test/tc/tempdir.rb +60 -0
- data/test/tc/tempfile.rb +66 -0
- data/test/tc/testcase.rb +170 -0
- data/test/tc/tonl.rb +37 -0
- data/test/tc/truncate.rb +39 -0
- data/test/tc/yaml.rb +275 -0
- 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__
|
data/lib/rio/fs/base.rb
ADDED
|
@@ -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
|
data/lib/rio/fs/impl.rb
ADDED
|
@@ -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
|