rio 0.3.8 → 0.3.9
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/README +18 -12
- data/Rakefile +57 -87
- data/build_doc.rb +19 -17
- data/doc/ANNOUNCE +3 -32
- data/doc/RELEASE_NOTES +4 -5
- data/doc/RIOIS +215 -0
- data/doc/generators/template/html/rio.css +428 -0
- data/doc/generators/template/html/rio.rb +18 -389
- data/doc/generators/template/html/ugly.rb +130 -0
- data/doc/pkg_def.rb +66 -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.rb +16 -10
- data/lib/rio/abstract_method.rb +3 -4
- data/lib/rio/argv.rb +3 -4
- data/lib/rio/arycopy.rb +3 -4
- data/lib/rio/assert.rb +3 -4
- data/lib/rio/base.rb +3 -4
- data/lib/rio/callstr.rb +3 -4
- data/lib/rio/const.rb +3 -4
- data/lib/rio/construct.rb +3 -4
- data/lib/rio/constructor.rb +12 -8
- data/lib/rio/context.rb +15 -30
- data/lib/rio/context/autoclose.rb +3 -4
- data/lib/rio/context/copying.rb +3 -4
- data/lib/rio/context/cxx.rb +3 -4
- data/lib/rio/context/dir.rb +3 -4
- data/lib/rio/context/gzip.rb +3 -4
- data/lib/rio/context/methods.rb +16 -5
- data/lib/rio/context/skip.rb +3 -4
- data/lib/rio/context/stream.rb +42 -5
- data/lib/rio/cp.rb +7 -7
- data/lib/rio/def.rb +3 -4
- data/lib/rio/dir.rb +3 -4
- data/lib/rio/doc.rb +4 -5
- data/lib/rio/doc/EXAMPLES.rb +299 -0
- data/lib/rio/doc/HOWTO.rb +3 -4
- data/lib/rio/doc/INTRO.rb +86 -105
- data/lib/rio/doc/OPTIONAL.rb +4 -5
- data/lib/rio/doc/SYNOPSIS.rb +7 -6
- data/lib/rio/entrysel.rb +21 -23
- data/lib/rio/exception.rb +3 -4
- data/lib/rio/exception/copy.rb +3 -4
- data/lib/rio/exception/notimplemented.rb +57 -0
- data/lib/rio/exception/notsupported.rb +3 -4
- data/lib/rio/exception/open.rb +3 -4
- data/lib/rio/exception/state.rb +3 -4
- data/lib/rio/ext.rb +47 -13
- data/lib/rio/ext/csv.rb +4 -5
- 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.rb +9 -5
- data/lib/rio/ext/yaml/doc.rb +133 -0
- data/lib/rio/ext/yaml/tie.rb +149 -0
- data/lib/rio/ext/zipfile.rb +23 -4
- 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/factory.rb +235 -27
- data/lib/rio/file.rb +4 -4
- data/lib/rio/filter.rb +3 -4
- data/lib/rio/filter/closeoneof.rb +3 -4
- data/lib/rio/filter/gzip.rb +9 -4
- data/lib/rio/fs/base.rb +3 -4
- data/lib/rio/fs/impl.rb +4 -5
- data/lib/rio/fs/native.rb +3 -4
- data/lib/rio/fs/stream.rb +3 -4
- data/lib/rio/fs/url.rb +3 -4
- data/lib/rio/ftp/conncache.rb +19 -5
- data/lib/rio/ftp/dir.rb +3 -4
- data/lib/rio/ftp/fs.rb +30 -24
- data/lib/rio/grande.rb +27 -7
- data/lib/rio/handle.rb +3 -4
- data/lib/rio/if.rb +19 -15
- data/lib/rio/if/basic.rb +7 -7
- data/lib/rio/if/csv.rb +5 -6
- data/lib/rio/if/dir.rb +120 -114
- data/lib/rio/if/file.rb +52 -44
- data/lib/rio/if/fileordir.rb +217 -211
- data/lib/rio/if/grande.rb +674 -644
- data/lib/rio/if/grande_entry.rb +321 -313
- data/lib/rio/if/grande_stream.rb +653 -553
- data/lib/rio/if/internal.rb +3 -4
- data/lib/rio/if/path.rb +425 -426
- data/lib/rio/if/rubyio.rb +681 -0
- data/lib/rio/if/string.rb +42 -5
- data/lib/rio/if/temp.rb +3 -4
- data/lib/rio/if/test.rb +245 -238
- data/lib/rio/if/yaml.rb +15 -41
- data/lib/rio/ioh.rb +7 -5
- data/lib/rio/iomode.rb +19 -7
- data/lib/rio/ios/fail.rb +4 -5
- data/lib/rio/ios/generic.rb +4 -5
- data/lib/rio/ios/mode.rb +4 -5
- data/lib/rio/ios/null.rb +6 -7
- data/lib/rio/iowrap.rb +3 -4
- data/lib/rio/kernel.rb +3 -5
- data/lib/rio/local.rb +3 -4
- data/lib/rio/match.rb +3 -4
- data/lib/rio/matchrecord.rb +3 -4
- data/lib/rio/no_warn.rb +3 -4
- data/lib/rio/nullio.rb +3 -4
- data/lib/rio/open3.rb +4 -5
- data/lib/rio/ops/construct.rb +3 -4
- data/lib/rio/ops/create.rb +11 -6
- data/lib/rio/ops/dir.rb +19 -8
- data/lib/rio/ops/either.rb +6 -5
- data/lib/rio/ops/file.rb +3 -4
- data/lib/rio/ops/path.rb +14 -35
- data/lib/rio/ops/stream.rb +3 -4
- data/lib/rio/ops/stream/input.rb +4 -7
- data/lib/rio/ops/stream/output.rb +3 -4
- data/lib/rio/ops/stream/read.rb +6 -5
- data/lib/rio/ops/stream/write.rb +3 -4
- data/lib/rio/ops/symlink.rb +3 -4
- data/lib/rio/path.rb +22 -18
- data/lib/rio/path/reset.rb +4 -5
- data/lib/rio/piper.rb +3 -4
- data/lib/rio/piper/cp.rb +3 -4
- data/lib/rio/prompt.rb +10 -5
- data/lib/rio/rectype.rb +5 -5
- data/lib/rio/rl/base.rb +17 -71
- data/lib/rio/rl/builder.rb +14 -38
- data/lib/rio/rl/chmap.rb +66 -0
- data/lib/rio/rl/fs2url.rb +82 -0
- data/lib/rio/rl/ioi.rb +4 -4
- data/lib/rio/rl/path.rb +44 -122
- data/lib/rio/rl/pathmethods.rb +19 -8
- data/lib/rio/rl/uri.rb +137 -60
- data/lib/rio/rl/withpath.rb +295 -0
- data/lib/rio/scheme/aryio.rb +3 -4
- data/lib/rio/scheme/cmdio.rb +3 -4
- data/lib/rio/scheme/cmdpipe.rb +4 -4
- data/lib/rio/scheme/fd.rb +3 -4
- data/lib/rio/scheme/ftp.rb +7 -7
- data/lib/rio/scheme/http.rb +4 -5
- data/lib/rio/scheme/null.rb +3 -4
- data/lib/rio/scheme/path.rb +3 -4
- data/lib/rio/scheme/stderr.rb +3 -4
- data/lib/rio/scheme/stdio.rb +3 -4
- data/lib/rio/scheme/strio.rb +3 -4
- data/lib/rio/scheme/sysio.rb +3 -4
- data/lib/rio/scheme/tcp.rb +3 -4
- data/lib/rio/scheme/temp.rb +6 -6
- data/lib/rio/state.rb +18 -46
- data/lib/rio/state/error.rb +3 -4
- data/lib/rio/stream.rb +4 -4
- data/lib/rio/stream/base.rb +3 -4
- data/lib/rio/stream/duplex.rb +3 -4
- data/lib/rio/stream/open.rb +3 -8
- data/lib/rio/symantics.rb +3 -4
- data/lib/rio/tempdir.rb +2 -2
- data/lib/rio/to_rio.rb +3 -4
- data/lib/rio/to_rio/all.rb +3 -4
- data/lib/rio/to_rio/array.rb +4 -5
- data/lib/rio/to_rio/io.rb +4 -5
- data/lib/rio/to_rio/object.rb +4 -5
- data/lib/rio/to_rio/string.rb +4 -5
- data/lib/rio/uri/file.rb +41 -5
- data/lib/rio/util.rb +3 -4
- data/lib/rio/version.rb +4 -5
- data/setup.rb +368 -339
- data/test/bin/list_dir.rb +1 -1
- data/test/ftp/anon_misc.rb +13 -1
- data/test/ftp/anon_special.rb +6 -6
- data/test/ftp/anon_write.rb +10 -3
- data/test/ftp/ftp2ftp.rb +2 -2
- data/test/ftp/testdef.rb +9 -6
- data/test/http/all.rb +3 -0
- data/test/http/copy-from-http.rb +140 -0
- data/test/lib/temp_server.rb +44 -0
- data/test/runalltests.rb +3 -1
- data/test/runhttp.rb +12 -0
- data/test/runhttptests.rb +1 -1
- data/test/runtests.rb +41 -3
- data/test/tc/abs.rb +9 -5
- data/test/tc/all.rb +9 -4
- data/test/tc/base.rb +1 -1
- data/test/tc/base2.rb +87 -0
- data/test/tc/{methods.rb → clone.rb} +72 -50
- data/test/tc/closeoncopy.rb +13 -2
- data/test/tc/copy-dir-samevar.rb +91 -0
- data/test/tc/dir_iter.rb +0 -1
- data/test/tc/empty.rb +6 -2
- data/test/tc/expand_path.rb +36 -54
- data/test/tc/ext.rb +42 -18
- data/test/tc/gzip.rb +30 -3
- data/test/tc/likeio.rb +5 -1
- data/test/tc/line_record_row.rb +51 -0
- data/test/tc/noqae.rb +71 -70
- data/test/tc/path_parts.rb +175 -0
- data/test/tc/programs_util.rb +3 -3
- data/test/tc/rename.rb +4 -5
- data/test/tc/riorl.rb +9 -7
- data/test/tc/skip.rb +35 -6
- data/test/tc/skiplines.rb +34 -5
- data/test/tc/split.rb +8 -50
- data/test/tc/splitlines.rb +65 -0
- data/test/tc/splitpath.rb +83 -0
- data/test/tc/testcase.rb +1 -1
- data/test/tc/truncate.rb +39 -0
- data/test/tc/yaml.rb +9 -8
- metadata +261 -207
- data/ChangeLog +0 -1418
- data/VERSION +0 -1
- data/lib/rio/doc/MISC.rb +0 -259
- data/lib/rio/if/stream.rb +0 -680
- data/lib/rio/impl/path.rb +0 -87
- data/test/tc/copy-from-http.rb +0 -89
data/lib/rio/if/fileordir.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#--
|
|
2
2
|
# ===============================================================================
|
|
3
|
-
# Copyright (c) 2005,
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
4
|
# All rights reserved
|
|
5
5
|
#
|
|
6
6
|
# This file is part of the Rio library for ruby.
|
|
@@ -23,240 +23,246 @@
|
|
|
23
23
|
#
|
|
24
24
|
# To create the documentation for Rio run the command
|
|
25
25
|
# ruby build_doc.rb
|
|
26
|
-
# from the distribution directory.
|
|
26
|
+
# from the distribution directory.
|
|
27
27
|
#
|
|
28
28
|
# Suggested Reading
|
|
29
29
|
# * RIO::Doc::SYNOPSIS
|
|
30
30
|
# * RIO::Doc::INTRO
|
|
31
31
|
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
32
33
|
# * RIO::Rio
|
|
33
34
|
#
|
|
34
|
-
# <b>Rio is pre-alpha software.
|
|
35
|
-
# The documented interface and behavior is subject to change without notice.</b>
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
module RIO
|
|
39
|
-
|
|
38
|
+
module IF
|
|
39
|
+
module FileOrDir
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
# undocumented
|
|
42
|
+
def open(m,*args,&block) target.open(m,*args,&block); self end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
44
|
+
# Creates a symbolic link _dest_ which points to the Rio's IF::Path#fspath.
|
|
45
|
+
# Raises a NotImplementedError exception on platforms that do not support symbolic links.
|
|
46
|
+
# _dest_ may be a Rio, a String, or anything that will create an appropriate Rio
|
|
47
|
+
# when passed to Rio#new .
|
|
48
|
+
# If _dest_ already exists and is a directory, creates a symbolic link in the _dest_ directory,
|
|
49
|
+
# named with the name returned by IF::Path#filename.
|
|
50
|
+
# If _dest_ already exists and it is not a directory, raises Errno::EEXIST.
|
|
51
|
+
#
|
|
52
|
+
# Returns the Rio (not the symlink).
|
|
53
|
+
#
|
|
54
|
+
# IF::FileOrDir#symlink differs from File#symlink when the Rio or the _dest_ path has directory information.
|
|
55
|
+
# In this case IF::FileOrDir#symlink creates a symlink that actually refers to the Rio's location
|
|
56
|
+
# from the perspective of the link's location.
|
|
57
|
+
#
|
|
58
|
+
# For example: Given an existing file 'adir/afile' and a _dest_ of 'adir/alink'
|
|
59
|
+
# ::File.symlink('adir/afile','adir/alink1') # creates 'adir/alink1 -> adir/afile'
|
|
60
|
+
# ::File.exist?('adir/alink1') # false
|
|
61
|
+
# rio('adir/afile').symlink('adir/alink2') # creates 'adir/alink2 -> afile'
|
|
62
|
+
# ::File.exist?('adir/alink2') # true
|
|
63
|
+
#
|
|
64
|
+
# To replace an existing symlink use the following Rio idiom
|
|
65
|
+
# rio('afile').symlink( rio('link_name').delete ) # delete 'link_name' and recreate linked to 'afile'
|
|
66
|
+
#
|
|
67
|
+
# Examples
|
|
68
|
+
# rio('afile').symlink('alink') # create the symbolic link 'alink' which references 'afile'
|
|
69
|
+
# rio('afile').symlink('adir/alink') # create a symlink 'adir/alink' -> '../afile'
|
|
70
|
+
# rio('adir/afile').symlink('alink') # create a symlink 'alink' -> 'adir/afile'
|
|
71
|
+
# rio('adir/afile').symlink('adir/alink') # create a symlink 'adir/alink' -> 'afile'
|
|
72
|
+
# rio('adir/afile').symlink('adir/alink') # create a symlink 'adir/alink' -> 'afile'
|
|
73
|
+
# rio('adir1/afile').symlink('adir2/alink') # create a symlink 'adir2/alink' -> '../adir1/afile'
|
|
74
|
+
# rio('/tmp/afile').symlink('alink') # create a symlink 'adir/alink' -> '/tmp/afile'
|
|
75
|
+
def symlink(dest) target.symlink(dest); self end
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
# Calls File#readlink
|
|
79
|
+
#
|
|
80
|
+
# Returns a Rio referencing the file referenced by the given link. Not available on all platforms.
|
|
81
|
+
#
|
|
82
|
+
def readlink(*args) target.readlink(*args) end
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
#
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
84
|
+
# If called with an argument calls FileUtils#rename.
|
|
85
|
+
# If called without an argument puts the Rio in "rename mode".
|
|
86
|
+
#
|
|
87
|
+
# Proxy for FileUtils#rename
|
|
88
|
+
# ario = rio('afile.cpp')
|
|
89
|
+
# ario.rename('afile.cxx') # renamed the file, but ario still references
|
|
90
|
+
# # the old path
|
|
91
|
+
# ===== Rename Mode
|
|
92
|
+
#
|
|
93
|
+
# In rename mode, changes to a Rio's path using IF::Path#dirname=, IF::Path#filename=,
|
|
94
|
+
# IF::Path#basename=, and IF::Path#extname= also cause the object on the filesystem
|
|
95
|
+
# to be renamed.
|
|
96
|
+
#
|
|
97
|
+
# Change the extension of all'.cpp' files in 'adir' to '.cxx'
|
|
98
|
+
# rio('adir').rename.files('*.cpp') do |file|
|
|
99
|
+
# file.ext = '.cxx' # 'file' references the new path and the actual file is renamed
|
|
100
|
+
# end
|
|
101
|
+
#
|
|
102
|
+
# Recursively change all '.tar.gz' files to '.tgz' files
|
|
103
|
+
# rio('adir').rename.all.files('*.tar.gz') do |gzfile|
|
|
104
|
+
# gzfile.ext('.tar.gz').ext = '.tgz'
|
|
105
|
+
# end
|
|
106
|
+
#
|
|
107
|
+
# See IF::Path#dirname=, IF::Path#filename=, IF::Path#basename=, and IF::Path#extname=
|
|
108
|
+
#
|
|
109
|
+
def rename(*args,&block) target.rename(*args,&block); self end
|
|
110
|
+
|
|
110
111
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
# Behaves like IF::GrandeStream#rename, but also changes the calling Rio to
|
|
113
|
+
# refer to the renamed path
|
|
114
|
+
def rename!(*args,&block) target.rename!(*args,&block); self end
|
|
115
|
+
|
|
115
116
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
117
|
+
# For directories calls Dir#read, otherwise calls IO#read
|
|
118
|
+
#
|
|
119
|
+
# For streams calls IO#read
|
|
120
|
+
# ario.read([integer [, buffer]]) => string, buffer, or nil
|
|
121
|
+
# Reads at most _integer_ bytes from the I/O stream, or to the end of
|
|
122
|
+
# file if _integer_ is omitted or is +nil+. If the optional _buffer_
|
|
123
|
+
# argument is present, it must reference a String, which will receive
|
|
124
|
+
# the data. Returns +nil+ if called at end of file.
|
|
125
|
+
#
|
|
126
|
+
# f = rio("testfile")
|
|
127
|
+
# f.read(16) #=> "This is line one"
|
|
128
|
+
#
|
|
129
|
+
# rio("testfile").read(16) #=> "This is line one"
|
|
130
|
+
#
|
|
131
|
+
# For directories calls Dir#read
|
|
132
|
+
# dir.read => ario or nil
|
|
133
|
+
#------------------------------------------------------------------------
|
|
134
|
+
# Reads the next entry from _dir_ and returns it as a Rio. Returns
|
|
135
|
+
# +nil+ at the end of the stream.
|
|
136
|
+
# d = rio("testdir")
|
|
137
|
+
# d.read #=> rio(".")
|
|
138
|
+
# d.read #=> rio("..")
|
|
139
|
+
# d.read #=> rio("config.h")
|
|
140
|
+
#
|
|
141
|
+
def read(*args) target.read(*args)end
|
|
142
|
+
|
|
143
|
+
# For directories proxies Dir#rewind, otherwise proxies IO#rewind
|
|
144
|
+
#
|
|
145
|
+
# Proxy for IO#rewind
|
|
146
|
+
# ario.rewind => ario
|
|
147
|
+
# Positions _ario_ to the beginning of input, resetting lineno to zero.
|
|
148
|
+
#
|
|
149
|
+
# Returns the Rio
|
|
150
|
+
#
|
|
151
|
+
# f = rio("testfile")
|
|
152
|
+
# f.readline #=> "This is line one\n"
|
|
153
|
+
# f.rewind #=> f
|
|
154
|
+
# f.lineno #=> 0
|
|
155
|
+
# f.readline #=> "This is line one\n"
|
|
156
|
+
#
|
|
157
|
+
# f.rewind.readline #=> "This is line one\n"
|
|
158
|
+
#
|
|
159
|
+
# Proxy for Dir#rewind
|
|
160
|
+
# ario.rewind => ario
|
|
161
|
+
#------------------------------------------------------------------------
|
|
162
|
+
# Repositions _ario_ to the first entry.
|
|
163
|
+
#
|
|
164
|
+
# d = rio("testdir")
|
|
165
|
+
# d.read #=> rio(".")
|
|
166
|
+
# d.rewind.read #=> rio(".")
|
|
167
|
+
def rewind(&block) target.rewind(&block); self end
|
|
167
168
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
169
|
+
# For directories calls Dir#seek, otherwise calls IO#seek
|
|
170
|
+
#
|
|
171
|
+
# For streams calls IO#seek
|
|
172
|
+
# ario.seek(amount, whence=SEEK_SET) -> ario
|
|
173
|
+
# Seeks to a given offset _amount_ in the stream according to the
|
|
174
|
+
# value of _whence_:
|
|
175
|
+
#
|
|
176
|
+
# IO::SEEK_CUR | Seeks to 'amount' plus current position
|
|
177
|
+
# --------------+----------------------------------------------------
|
|
178
|
+
# IO::SEEK_END | Seeks to 'amount' plus end of stream (you probably
|
|
179
|
+
# | want a negative value for 'amount')
|
|
180
|
+
# --------------+----------------------------------------------------
|
|
181
|
+
# IO::SEEK_SET | Seeks to the absolute location given by 'amount'
|
|
182
|
+
#
|
|
183
|
+
# Example:
|
|
184
|
+
#
|
|
185
|
+
# f = rio("testfile")
|
|
186
|
+
# f.seek(-28, IO::SEEK_END).readline #=> "happily ever after. The End\n"
|
|
187
|
+
#
|
|
188
|
+
# For directories calls Dir#seek
|
|
189
|
+
# ario.seek( integer ) => ario
|
|
190
|
+
# Seeks to a particular location in _ario_. _integer_ must be a value
|
|
191
|
+
# returned by IF::FileOrDir#tell.
|
|
192
|
+
#
|
|
193
|
+
# d = rio("testdir") #=> #<RIO::Rio:0x401b3c40>
|
|
194
|
+
# d.read #=> rio(".")
|
|
195
|
+
# i = d.tell #=> 12
|
|
196
|
+
# d.read #=> rio("..")
|
|
197
|
+
# d.seek(i) #=> #<RIO::Rio:0x401b3c40>
|
|
198
|
+
# d.read #=> rio("..")
|
|
199
|
+
def seek(*args) target.seek(*args); self end
|
|
200
|
+
#def seek(amount,whence=IO::SEEK_SET) target.seek(amount,whence) end
|
|
200
201
|
|
|
201
202
|
|
|
202
203
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
204
|
+
# For directories calls Dir#pos, otherwise calls IO#pos
|
|
205
|
+
#
|
|
206
|
+
# For streams calls IO#pos
|
|
207
|
+
# ario.pos => integer
|
|
208
|
+
# ario.tell => integer
|
|
209
|
+
# Returns the current offset (in bytes) of _ario_.
|
|
210
|
+
#
|
|
211
|
+
# f = rio("testfile")
|
|
212
|
+
# f.pos #=> 0
|
|
213
|
+
# f.gets #=> "This is line one\n"
|
|
214
|
+
# f.pos #=> 17
|
|
215
|
+
#
|
|
216
|
+
#
|
|
217
|
+
# For directories calls Dir#pos
|
|
218
|
+
# ario.pos => integer
|
|
219
|
+
# ario.tell => integer
|
|
220
|
+
# Returns the current position in _dir_. See also IF::FileOrDir#seek.
|
|
221
|
+
#
|
|
222
|
+
# d = rio("testdir")
|
|
223
|
+
# d.pos #=> 0
|
|
224
|
+
# d.read #=> rio(".")
|
|
225
|
+
# d.pos #=> 12
|
|
226
|
+
#
|
|
227
|
+
def pos() target.pos end
|
|
227
228
|
|
|
228
|
-
|
|
229
|
-
|
|
229
|
+
# See IF::FileOrDir#pos
|
|
230
|
+
def tell() target.tell end
|
|
230
231
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
232
|
+
# For directories calls Dir#pos=, otherwise calls IO#pos=
|
|
233
|
+
#
|
|
234
|
+
# For streams calls IO#pos=
|
|
235
|
+
# ario.pos = integer => 0
|
|
236
|
+
# Seeks to the given position (in bytes) in _ario_.
|
|
237
|
+
#
|
|
238
|
+
# f = rio("testfile")
|
|
239
|
+
# f.pos = 17
|
|
240
|
+
# f.gets #=> "This is line two\n"
|
|
241
|
+
#
|
|
242
|
+
# For directories calls Dir#pos=
|
|
243
|
+
# ario.pos = integer => integer
|
|
244
|
+
#------------------------------------------------------------------------
|
|
245
|
+
# Synonym for +IF::FileOrDir#seek+, but returns the position parameter.
|
|
246
|
+
#
|
|
247
|
+
# d = rio("testdir") #=> d
|
|
248
|
+
# d.read #=> rio(".")
|
|
249
|
+
# i = d.pos #=> 12
|
|
250
|
+
# d.read #=> rio("..")
|
|
251
|
+
# d.pos = i #=> 12
|
|
252
|
+
# d.read #=> rio("..")
|
|
253
|
+
#
|
|
254
|
+
def pos=(integer) target.pos = integer end
|
|
254
255
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
256
|
+
# For Streams calls IO#reopen, otherwise closes and re-opens
|
|
257
|
+
# the Rio.
|
|
258
|
+
#
|
|
259
|
+
def reopen(mode=nil) target.reopen(mode); self end
|
|
260
|
+
end
|
|
259
261
|
end
|
|
260
262
|
end
|
|
261
263
|
|
|
262
|
-
|
|
264
|
+
module RIO
|
|
265
|
+
class Rio
|
|
266
|
+
include RIO::IF::FileOrDir
|
|
267
|
+
end
|
|
268
|
+
end
|