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/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
|
data/lib/rio/ios/fail.rb
ADDED
|
@@ -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
|