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
|
@@ -0,0 +1,267 @@
|
|
|
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/matchrecord'
|
|
38
|
+
require 'rio/arycopy'
|
|
39
|
+
require 'rio/grande'
|
|
40
|
+
require 'rio/rectype'
|
|
41
|
+
require 'rio/ops/stream/read'
|
|
42
|
+
require 'rio/context/stream'
|
|
43
|
+
require 'stringio'
|
|
44
|
+
require 'rio/cp'
|
|
45
|
+
require 'rio/piper/cp'
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
module RIO
|
|
49
|
+
module Ops
|
|
50
|
+
module Stream
|
|
51
|
+
module Input
|
|
52
|
+
include Status
|
|
53
|
+
include Ops::Stream::Read
|
|
54
|
+
include Enumerable
|
|
55
|
+
include Grande
|
|
56
|
+
include Cp::Stream::Input
|
|
57
|
+
include Piper::Cp::Input
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
require 'rio/piper'
|
|
63
|
+
module RIO
|
|
64
|
+
module Ops
|
|
65
|
+
module Stream
|
|
66
|
+
module Input
|
|
67
|
+
public
|
|
68
|
+
def each(*args,&block)
|
|
69
|
+
#p callstr('each',*args)
|
|
70
|
+
each_(*args,&block)
|
|
71
|
+
self
|
|
72
|
+
end
|
|
73
|
+
def empty?()
|
|
74
|
+
self.eof?
|
|
75
|
+
end
|
|
76
|
+
def each_record(*args,&block)
|
|
77
|
+
#p callstr('each_record',*args)
|
|
78
|
+
each_record_(*args,&block)
|
|
79
|
+
self
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def each_row(*args,&block)
|
|
83
|
+
#p callstr('each_row',*args)
|
|
84
|
+
rows(*args).each_row_(*args,&block)
|
|
85
|
+
self
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def get()
|
|
89
|
+
until self.eof?
|
|
90
|
+
raw_rec = self._get_rec
|
|
91
|
+
return to_rec_(raw_rec) if @get_selrej.match?(raw_rec,@recno)
|
|
92
|
+
end
|
|
93
|
+
self.close if closeoneof?
|
|
94
|
+
nil
|
|
95
|
+
# (closeoneof? ? self.on_eof_close{ nil } : nil)
|
|
96
|
+
end
|
|
97
|
+
def get_type(itertype,&block)
|
|
98
|
+
old_itertype = cx['stream_itertype']
|
|
99
|
+
_set_itertype(itertype)
|
|
100
|
+
begin
|
|
101
|
+
ans = yield
|
|
102
|
+
ensure
|
|
103
|
+
_set_itertype(old_itertype)
|
|
104
|
+
end
|
|
105
|
+
ans
|
|
106
|
+
end
|
|
107
|
+
def getline()
|
|
108
|
+
get_type('lines') { get() }
|
|
109
|
+
end
|
|
110
|
+
def getrow()
|
|
111
|
+
get_type('rows') { get() }
|
|
112
|
+
end
|
|
113
|
+
def getrec()
|
|
114
|
+
get_type('records') { get() }
|
|
115
|
+
end
|
|
116
|
+
private
|
|
117
|
+
|
|
118
|
+
def _ss_like_array(selrej)
|
|
119
|
+
selrej.only_one_fixnum? and !dir_iter?
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
protected
|
|
123
|
+
|
|
124
|
+
# iterate over the records, yielding only with matching records
|
|
125
|
+
# implemented in terms of an underlying iterator like each_line (see RIO::RecType::*)
|
|
126
|
+
def each_(*args,&block)
|
|
127
|
+
selrej,rangetops = create_selrej()
|
|
128
|
+
want_ma = block.arity > 1
|
|
129
|
+
catch(:stop_iter) do
|
|
130
|
+
each_rec_ do |raw_rec|
|
|
131
|
+
_got_rec(raw_rec)
|
|
132
|
+
rangetops = check_passed_ranges(selrej,@recno) if rangetops and @recno > rangetops[0]
|
|
133
|
+
if as = selrej.match?(raw_rec,@recno)
|
|
134
|
+
if want_ma
|
|
135
|
+
yield(to_rec_(raw_rec),as)
|
|
136
|
+
else
|
|
137
|
+
yield(to_rec_(raw_rec))
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
return closeoneof? ? self.close : self
|
|
142
|
+
end
|
|
143
|
+
closeoneof? ? self.close : self
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# iterate over the records, yielding only with matching records
|
|
147
|
+
# implemented in terms of get_ (see RIO::RecType::*)
|
|
148
|
+
def each_record_(*args,&block)
|
|
149
|
+
#p callstr('each_record_',*args)
|
|
150
|
+
|
|
151
|
+
selrej,rangetops = self.create_selrej()
|
|
152
|
+
get_arg = self.get_arg_
|
|
153
|
+
self.each_record_init_(*args)
|
|
154
|
+
catch(:stop_iter) {
|
|
155
|
+
until ior.eof?
|
|
156
|
+
break unless raw_rec = self._get_rec(get_arg)
|
|
157
|
+
rangetops = check_passed_ranges(selrej,@recno) if rangetops and @recno > rangetops[0]
|
|
158
|
+
yield to_rec_(raw_rec) if selrej.match?(raw_rec,@recno)
|
|
159
|
+
end
|
|
160
|
+
return self
|
|
161
|
+
}
|
|
162
|
+
closeoneof? ? self.close : self
|
|
163
|
+
end
|
|
164
|
+
alias :each_row_ :each_
|
|
165
|
+
def clear_selection()
|
|
166
|
+
cx.delete('stream_sel')
|
|
167
|
+
cx.delete('stream_nosel')
|
|
168
|
+
self
|
|
169
|
+
end
|
|
170
|
+
def _get_rec(arg=get_arg_)
|
|
171
|
+
_got_rec(self.get_(arg))
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def to_rec_(record)
|
|
175
|
+
record
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
private
|
|
179
|
+
|
|
180
|
+
def _got_rec(el=nil)
|
|
181
|
+
@recno += 1 unless el.nil?
|
|
182
|
+
el
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
protected
|
|
186
|
+
|
|
187
|
+
def each_record_init_
|
|
188
|
+
end
|
|
189
|
+
def handle_skipped
|
|
190
|
+
return self unless cx.has_key?('skip_args')
|
|
191
|
+
args = cx['skip_args'] || []
|
|
192
|
+
self.skiprecords_(*args)
|
|
193
|
+
end
|
|
194
|
+
def create_selrej()
|
|
195
|
+
sel_args = cx['stream_sel']
|
|
196
|
+
nosel_args = cx['stream_nosel']
|
|
197
|
+
handle_skipped
|
|
198
|
+
selrej = RIO::Match::Record::SelRej.new(self,sel_args,nosel_args)
|
|
199
|
+
[selrej,selrej.rangetops]
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def check_passed_ranges(selrej,recno)
|
|
203
|
+
throw :stop_iter if selrej.remove_passed_ranges(recno).never?
|
|
204
|
+
selrej.rangetops
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def on_closeoneof()
|
|
208
|
+
#p "on_closeoneof #{self.object_id} #{self.ior.object_id}"
|
|
209
|
+
self.close
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
private
|
|
213
|
+
|
|
214
|
+
def _ss_keys() Cx::SS::STREAM_KEYS end
|
|
215
|
+
|
|
216
|
+
def auto(&block)
|
|
217
|
+
rewind if autorewind?
|
|
218
|
+
yield
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
public
|
|
222
|
+
|
|
223
|
+
def rewind(&block)
|
|
224
|
+
self.ior.rewind
|
|
225
|
+
@recno = -1
|
|
226
|
+
each(&block) if block_given?
|
|
227
|
+
self
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def close_read(&block)
|
|
231
|
+
self.ior.close_read
|
|
232
|
+
each(&block) if block_given?
|
|
233
|
+
self
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def copy_stream(dst)
|
|
237
|
+
#p callstr('copy_stream',dst)
|
|
238
|
+
ior.copy_stream(dst)
|
|
239
|
+
self
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def recno()
|
|
243
|
+
return nil unless @recno >= 0
|
|
244
|
+
@recno
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def to_h
|
|
248
|
+
{ self.to_s => self.to_a }
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def each_0(sel,&block)
|
|
253
|
+
if sel.match_all?
|
|
254
|
+
each_rec_(&block)
|
|
255
|
+
else
|
|
256
|
+
each_rec_ { |rec|
|
|
257
|
+
next unless mtch = sel.match?(rec,@recno)
|
|
258
|
+
val = (mtch.kind_of?(::MatchData) && mtch.size > 1 ? mtch.to_a[1...mtch.length] : rec)
|
|
259
|
+
yield val
|
|
260
|
+
}
|
|
261
|
+
end
|
|
262
|
+
self
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
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/cp'
|
|
38
|
+
|
|
39
|
+
module RIO
|
|
40
|
+
module Impl
|
|
41
|
+
module U
|
|
42
|
+
def self.copy_stream(s,d)
|
|
43
|
+
require 'fileutils'
|
|
44
|
+
::FileUtils::copy_stream(s,d)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
module RIO
|
|
50
|
+
module Ops
|
|
51
|
+
module Stream
|
|
52
|
+
module Output
|
|
53
|
+
include Status
|
|
54
|
+
require 'rio/ops/stream/write'
|
|
55
|
+
include Ops::Stream::Write
|
|
56
|
+
include Cp::Stream::Output
|
|
57
|
+
def putrec(rec,*args)
|
|
58
|
+
self.put_(rec,*args)
|
|
59
|
+
self
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def putrec!(rec,*args)
|
|
63
|
+
rtn_close { self.put_(rec,*args) }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def close_write(&block)
|
|
67
|
+
self.iow.close_write
|
|
68
|
+
each(&block) if block_given?
|
|
69
|
+
self
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def wclose
|
|
73
|
+
self.close.softreset
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def then_close(*args,&block)
|
|
77
|
+
rtn = yield(*args)
|
|
78
|
+
wclose
|
|
79
|
+
rtn
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def rtn_close(*args,&block)
|
|
83
|
+
yield(*args)
|
|
84
|
+
wclose
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def copyclose()
|
|
88
|
+
#p "#{callstr('copyclose')} closeoncopy=#{cx['closeoncopy']} iow=#{iow}"
|
|
89
|
+
#raise RuntimeError,"copclose"
|
|
90
|
+
if cx['closeoncopy']
|
|
91
|
+
wclose
|
|
92
|
+
else
|
|
93
|
+
self
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
module RIO
|
|
39
|
+
module Ops
|
|
40
|
+
module Stream
|
|
41
|
+
module Read
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def _post_eof_close(&block)
|
|
46
|
+
rtn = yield
|
|
47
|
+
self.close if closeoneof?
|
|
48
|
+
rtn
|
|
49
|
+
end
|
|
50
|
+
def _pre_eof_close(&block)
|
|
51
|
+
begin
|
|
52
|
+
closit = ior.eof? && closeoneof?
|
|
53
|
+
rtn = yield
|
|
54
|
+
ensure
|
|
55
|
+
self.close if closit
|
|
56
|
+
end
|
|
57
|
+
rtn
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
public
|
|
61
|
+
|
|
62
|
+
def contents() _post_eof_close { ior.gets(nil) || "" } end
|
|
63
|
+
def readlines(*args) _post_eof_close { ior.readlines(*args) } end
|
|
64
|
+
def each_line(*args,&block)
|
|
65
|
+
_post_eof_close { ior.each_line(*args,&block) }
|
|
66
|
+
end
|
|
67
|
+
def each_byte(*args,&block) _post_eof_close { ior.each_byte(*args,&block) } end
|
|
68
|
+
def each_bytes(nb,*args,&block) _post_eof_close { ior.each_bytes(nb,&block) } end
|
|
69
|
+
|
|
70
|
+
def read(*args) _pre_eof_close { ior.read(*args) } end
|
|
71
|
+
def gets(*args) _pre_eof_close { ior.gets(*args) } end
|
|
72
|
+
def readline(*args) _pre_eof_close { ior.readline(*args) } end
|
|
73
|
+
def readpartial(*args) _pre_eof_close { ior.readpartial(*args) } end
|
|
74
|
+
def readchar(*args) _pre_eof_close { ior.readchar(*args) } end
|
|
75
|
+
def getc(*args) _pre_eof_close { ior.getc(*args) } end
|
|
76
|
+
|
|
77
|
+
def ungetc(*args)
|
|
78
|
+
ior.ungetc(*args)
|
|
79
|
+
self
|
|
80
|
+
end
|
|
81
|
+
def lineno() ior.lineno end
|
|
82
|
+
def lineno=(arg) ior.lineno = arg end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|