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/factory.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,16 +23,15 @@
|
|
|
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
|
# class String
|
|
@@ -44,13 +43,210 @@
|
|
|
44
43
|
require 'singleton'
|
|
45
44
|
require 'rio/handle'
|
|
46
45
|
require 'rio/rl/builder'
|
|
47
|
-
|
|
46
|
+
#require 'rio/state/machine'
|
|
48
47
|
|
|
49
48
|
module RIO
|
|
49
|
+
# class StateDesc
|
|
50
|
+
# attr_accessor :class_name,:class_file
|
|
51
|
+
# def initialize(class_name,class_file)
|
|
52
|
+
# @class_name = class_name
|
|
53
|
+
# @class_file = class_file
|
|
54
|
+
# end
|
|
55
|
+
# end
|
|
56
|
+
# module StateMap
|
|
57
|
+
# class Base
|
|
58
|
+
# STATE_FILE = {
|
|
59
|
+
# 'Path::Reset' => 'rio/path/reset',
|
|
60
|
+
# 'Path::Empty' => 'rio/path',
|
|
61
|
+
# 'Path::Str' => 'rio/path',
|
|
62
|
+
# 'Path::NonExisting' => 'rio/path',
|
|
63
|
+
|
|
64
|
+
# 'File::Existing' => 'rio/file',
|
|
65
|
+
# 'File::NonExisting' => 'rio/file',
|
|
66
|
+
|
|
67
|
+
# 'Dir::Existing' => 'rio/dir',
|
|
68
|
+
# 'Dir::Open' => 'rio/dir',
|
|
69
|
+
# 'Dir::Close' => 'rio/dir',
|
|
70
|
+
# 'Dir::Stream' => 'rio/dir',
|
|
71
|
+
# 'Dir::NonExisting' => 'rio/dir',
|
|
72
|
+
|
|
73
|
+
# 'Stream::Reset' => 'rio/stream',
|
|
74
|
+
# 'Stream::Open' => 'rio/stream/open',
|
|
75
|
+
# 'Stream::Input' => 'rio/stream',
|
|
76
|
+
# 'Stream::Output' => 'rio/stream',
|
|
77
|
+
# 'Stream::InOut' => 'rio/stream',
|
|
78
|
+
# 'Stream::Close' => 'rio/stream/open',
|
|
79
|
+
# }
|
|
80
|
+
# def class_name(state_name)
|
|
81
|
+
# 'State::' + state_name
|
|
82
|
+
# end
|
|
83
|
+
# def file_name(state_name)
|
|
84
|
+
# STATE_FILE[state_name]
|
|
85
|
+
# end
|
|
86
|
+
# def path_reset() 'Path::Reset' end
|
|
87
|
+
# def path_empty() 'Path::Empty' end
|
|
88
|
+
# def path_str() 'Path::Str' end
|
|
89
|
+
# def path_nonexisting() 'Path::NonExisting' end
|
|
90
|
+
# def file_existing() 'File::Existing' end
|
|
91
|
+
# def file_nonexisting() 'File::NonExisting' end
|
|
92
|
+
# def dir_existing() 'Dir::Existing' end
|
|
93
|
+
# def dir_open() 'Dir::Open' end
|
|
94
|
+
# def dir_close() 'Dir::Close' end
|
|
95
|
+
# def dir_stream() 'Dir::Stream' end
|
|
96
|
+
# def dir_nonexisting() 'Dir::NonExisting' end
|
|
97
|
+
# def stream_reset() 'Stream::Reset' end
|
|
98
|
+
# def stream_open() 'Stream::Open' end
|
|
99
|
+
# def stream_input() 'Stream::Input' end
|
|
100
|
+
# def stream_output() 'Stream::Output' end
|
|
101
|
+
# def stream_inout() 'Stream::InOut' end
|
|
102
|
+
# def stream_close() 'Stream::Close' end
|
|
103
|
+
# end
|
|
104
|
+
# end
|
|
105
|
+
# module Path
|
|
106
|
+
# class StateMap < RIO::StateMap::Base
|
|
107
|
+
# def stream_open() 'Path::Stream::Open' end
|
|
108
|
+
# end
|
|
109
|
+
# end
|
|
110
|
+
# module Path
|
|
111
|
+
# class StateMap < RIO::StateMap::Base
|
|
112
|
+
# STATE_FILE = { 'Stream::Open' => 'rio/scheme/path' }
|
|
113
|
+
# def stream_open() 'Path::Stream::Open' end
|
|
114
|
+
# end
|
|
115
|
+
# end
|
|
116
|
+
# module CmdPipe
|
|
117
|
+
# class StateMap < RIO::StateMap::Base
|
|
118
|
+
# def stream_reset() 'CmdPipe::Stream::reset' end
|
|
119
|
+
# end
|
|
120
|
+
# end
|
|
121
|
+
|
|
122
|
+
# module States
|
|
123
|
+
# class Base
|
|
124
|
+
# end
|
|
125
|
+
# end
|
|
126
|
+
|
|
127
|
+
# class StateMapper
|
|
128
|
+
# include Singleton
|
|
129
|
+
|
|
130
|
+
# STD_STATE_FILES = {
|
|
131
|
+
# 'Path::Reset' => 'rio/path/reset',
|
|
132
|
+
# 'Path::Empty' => 'rio/path',
|
|
133
|
+
# 'Path::Str' => 'rio/path',
|
|
134
|
+
# 'Path::NonExisting' => 'rio/path',
|
|
135
|
+
|
|
136
|
+
# 'File::Existing' => 'rio/file',
|
|
137
|
+
# 'File::NonExisting' => 'rio/file',
|
|
138
|
+
|
|
139
|
+
# 'Dir::Existing' => 'rio/dir',
|
|
140
|
+
# 'Dir::Open' => 'rio/dir',
|
|
141
|
+
# 'Dir::Close' => 'rio/dir',
|
|
142
|
+
# 'Dir::Stream' => 'rio/dir',
|
|
143
|
+
# 'Dir::NonExisting' => 'rio/dir',
|
|
144
|
+
|
|
145
|
+
# 'Stream::Reset' => 'rio/stream',
|
|
146
|
+
# 'Stream::Open' => 'rio/stream/open',
|
|
147
|
+
# 'Stream::Input' => 'rio/stream',
|
|
148
|
+
# 'Stream::Output' => 'rio/stream',
|
|
149
|
+
# 'Stream::InOut' => 'rio/stream',
|
|
150
|
+
# 'Stream::Close' => 'rio/stream/open',
|
|
151
|
+
# }
|
|
152
|
+
# SCHEME_STATE_FILES = {
|
|
153
|
+
# 'Stream::Duplex::Open' => 'rio/stream/duplex',
|
|
154
|
+
|
|
155
|
+
# #'Path::Stream::Open' => 'rio/scheme/path',
|
|
156
|
+
|
|
157
|
+
# #'StrIO::Stream::Open' => 'rio/scheme/strio',
|
|
158
|
+
|
|
159
|
+
# #'Null::Stream::Open' => 'rio/scheme/null',
|
|
160
|
+
|
|
161
|
+
# #'CmdPipe::Stream::Reset' => 'rio/scheme/cmdpipe',
|
|
162
|
+
|
|
163
|
+
# #'HTTP::Stream::Input' => 'rio/scheme/http',
|
|
164
|
+
# #'HTTP::Stream::Open' => 'rio/scheme/http',
|
|
165
|
+
|
|
166
|
+
# 'Temp::Reset' => 'rio/scheme/temp',
|
|
167
|
+
# 'Temp::Stream::Open' => 'rio/scheme/temp',
|
|
168
|
+
|
|
169
|
+
# 'Ext::YAML::Doc::Existing' => 'rio/ext/yaml/doc',
|
|
170
|
+
# 'Ext::YAML::Doc::Open' => 'rio/ext/yaml/doc',
|
|
171
|
+
# 'Ext::YAML::Doc::Stream' => 'rio/ext/yaml/doc',
|
|
172
|
+
# 'Ext::YAML::Doc::Close' => 'rio/ext/yaml/doc',
|
|
173
|
+
# }
|
|
174
|
+
# def initialize()
|
|
175
|
+
# @state_cache = {}
|
|
176
|
+
# end
|
|
177
|
+
# def scheme_states()
|
|
178
|
+
# {
|
|
179
|
+
# 'path' => { 'Stream::Open' => 'Path::Stream::Open' },
|
|
180
|
+
# 'file' => { 'Stream::Open' => 'Path::Stream::Open' },
|
|
181
|
+
# 'strio' => { 'Stream::Open' => 'StrIO::Stream::Open' },
|
|
182
|
+
# 'cmdpipe' => { 'Stream::Reset' => 'CmdPipe::Stream::Reset' },
|
|
183
|
+
# 'http' => {'Stream::Input' => 'HTTP::Stream::Input',
|
|
184
|
+
# 'Stream::Open' => 'HTTP::Stream::Open' },
|
|
185
|
+
# }
|
|
186
|
+
# end
|
|
187
|
+
# def known?(state_name)
|
|
188
|
+
# STD_STATE_FILES.has_key?(state_name) or SCHEME_STATE_FILES.has_key?(state_name)
|
|
189
|
+
# end
|
|
190
|
+
# def std_state_name(state_name)
|
|
191
|
+
# case
|
|
192
|
+
# when STD_STATE_FILES.has_key?(state_name) then 'State::'+state_name
|
|
193
|
+
# when SCHEME_STATE_FILES.has_key?(state_name) then state_name
|
|
194
|
+
# else raise ArgumentError,"Unknown State Name (#{state_name})"
|
|
195
|
+
# end
|
|
196
|
+
# end
|
|
197
|
+
# def mode_mixins()
|
|
198
|
+
# {
|
|
199
|
+
# 'Stream::Input' => { 'splitlines' => 'Ext::SplitLines::Stream::Input', },
|
|
200
|
+
# 'Stream::Output' => { 'splitlines' => 'Ext::SplitLines::Stream::Output', },
|
|
201
|
+
# }
|
|
202
|
+
# end
|
|
203
|
+
# def mode_state_name(state_name,cx)
|
|
204
|
+
# mixins = mode_mixins()
|
|
205
|
+
# return state_name unless mixins.has_key?(state_name)
|
|
206
|
+
# modes = mstates[state_name]
|
|
207
|
+
# for mode in modes.keys
|
|
208
|
+
# next unless cx[mode]
|
|
209
|
+
# return modes[mode]
|
|
210
|
+
# end
|
|
211
|
+
# end
|
|
212
|
+
|
|
213
|
+
# def scheme_state_name(state_name,scheme)
|
|
214
|
+
# schemes = scheme_states()
|
|
215
|
+
# if schemes.has_key?(scheme)
|
|
216
|
+
# states = schemes[scheme]
|
|
217
|
+
# if states.has_key?(state_name)
|
|
218
|
+
# return scheme_states[scheme][state_name]
|
|
219
|
+
# end
|
|
220
|
+
# end
|
|
221
|
+
# return std_state_name(state_name)
|
|
222
|
+
# end
|
|
223
|
+
# def state_file(state_name,rio_handle)
|
|
224
|
+
# case
|
|
225
|
+
# when STD_STATE_FILES.has_key?(state_name) then STD_STATE_FILES[state_name]
|
|
226
|
+
# when SCHEME_STATE_FILES.has_key?(state_name) then SCHEME_STATE_FILES[state_name]
|
|
227
|
+
# else raise ArgumentError,"Unknown State Name (#{state_name})"
|
|
228
|
+
# end
|
|
229
|
+
# end
|
|
230
|
+
# def state2class(state_name,rio_handle=nil)
|
|
231
|
+
# scheme = rio_handle.rl.scheme unless rio_handle.nil?
|
|
232
|
+
# state = nil
|
|
233
|
+
# if scheme_cache = @state_cache[scheme]
|
|
234
|
+
# return state if state = scheme_cache[state_name]
|
|
235
|
+
# end
|
|
236
|
+
# mapped_name = rio_handle.nil? ? std_state_name(state_name) : scheme_state_name(state_name,rio_handle.rl.scheme)
|
|
237
|
+
# if self.known?(state_name)
|
|
238
|
+
# require self.state_file(state_name,rio_handle)
|
|
239
|
+
# @state_cache[scheme] ||= {}
|
|
240
|
+
# @state_cache[scheme][state_name] = RIO.module_eval(mapped_name)
|
|
241
|
+
# return @state_cache[scheme][state_name]
|
|
242
|
+
# else
|
|
243
|
+
# raise ArgumentError,"Unknown State Name (#{state_name})"
|
|
244
|
+
# end
|
|
245
|
+
# end
|
|
246
|
+
|
|
247
|
+
# end
|
|
248
|
+
|
|
50
249
|
|
|
51
|
-
# module TryState
|
|
52
|
-
# attr_accessor :try_state
|
|
53
|
-
# end
|
|
54
250
|
class Factory #:nodoc: all
|
|
55
251
|
include Singleton
|
|
56
252
|
def initialize()
|
|
@@ -59,14 +255,15 @@ module RIO
|
|
|
59
255
|
@state_class = {}
|
|
60
256
|
@ss_class = {}
|
|
61
257
|
end
|
|
258
|
+
|
|
62
259
|
def subscheme_module(sch)
|
|
63
260
|
@ss_module[sch] ||= case sch
|
|
64
261
|
when 'file','path'
|
|
65
262
|
require 'rio/scheme/path'
|
|
66
263
|
Path
|
|
67
|
-
when '
|
|
68
|
-
require 'rio/ext/zipfile/
|
|
69
|
-
|
|
264
|
+
when 'zipfile'
|
|
265
|
+
require 'rio/ext/zipfile/rl'
|
|
266
|
+
ZipFile::RootDir
|
|
70
267
|
when 'stdio','stdin','stdout'
|
|
71
268
|
require 'rio/scheme/stdio'
|
|
72
269
|
StdIO
|
|
@@ -85,7 +282,7 @@ module RIO
|
|
|
85
282
|
when 'tempdir'
|
|
86
283
|
require 'rio/scheme/temp'
|
|
87
284
|
Temp::Dir
|
|
88
|
-
when 'strio'
|
|
285
|
+
when 'strio','stringio','string'
|
|
89
286
|
require 'rio/scheme/strio'
|
|
90
287
|
StrIO
|
|
91
288
|
when 'cmdpipe'
|
|
@@ -118,15 +315,6 @@ module RIO
|
|
|
118
315
|
end
|
|
119
316
|
end
|
|
120
317
|
|
|
121
|
-
def riorl_class(sch)
|
|
122
|
-
subscheme_module(sch).const_get(:RL)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def reset_state(rl)
|
|
126
|
-
mod = subscheme_module(rl.scheme)
|
|
127
|
-
mod.const_get(:RESET_STATE) unless mod.nil?
|
|
128
|
-
end
|
|
129
|
-
|
|
130
318
|
STATE2FILE = {
|
|
131
319
|
'Path::Reset' => 'rio/path/reset',
|
|
132
320
|
'Path::Empty' => 'rio/path',
|
|
@@ -157,11 +345,6 @@ module RIO
|
|
|
157
345
|
|
|
158
346
|
'Null::Stream::Open' => 'rio/scheme/null',
|
|
159
347
|
|
|
160
|
-
'ZipFile::CentralDir::Open' => 'rio/zipfile/centraldir',
|
|
161
|
-
'ZipFile::CentralDir::Stream' => 'rio/zipfile/centraldir',
|
|
162
|
-
'ZipFile::CentralDir::Close' => 'rio/zipfile/centraldir',
|
|
163
|
-
'ZipFile::Path::Str' => 'rio/zipfile/path',
|
|
164
|
-
|
|
165
348
|
'CmdPipe::Stream::Reset' => 'rio/scheme/cmdpipe',
|
|
166
349
|
|
|
167
350
|
'HTTP::Stream::Input' => 'rio/scheme/http',
|
|
@@ -170,9 +353,23 @@ module RIO
|
|
|
170
353
|
'Temp::Reset' => 'rio/scheme/temp',
|
|
171
354
|
'Temp::Stream::Open' => 'rio/scheme/temp',
|
|
172
355
|
|
|
356
|
+
'Ext::YAML::Doc::Existing' => 'rio/ext/yaml/doc',
|
|
357
|
+
'Ext::YAML::Doc::Open' => 'rio/ext/yaml/doc',
|
|
358
|
+
'Ext::YAML::Doc::Stream' => 'rio/ext/yaml/doc',
|
|
359
|
+
'Ext::YAML::Doc::Close' => 'rio/ext/yaml/doc',
|
|
360
|
+
|
|
361
|
+
|
|
173
362
|
}
|
|
363
|
+
def riorl_class(sch)
|
|
364
|
+
subscheme_module(sch).const_get(:RL)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def reset_state(rl)
|
|
368
|
+
mod = subscheme_module(rl.scheme)
|
|
369
|
+
mod.const_get(:RESET_STATE) unless mod.nil?
|
|
370
|
+
end
|
|
371
|
+
|
|
174
372
|
def state2class(state_name)
|
|
175
|
-
#p "state_name=#{state_name}"
|
|
176
373
|
return @state_class[state_name] if @state_class.has_key?(state_name)
|
|
177
374
|
if STATE2FILE.has_key?(state_name)
|
|
178
375
|
require STATE2FILE[state_name]
|
|
@@ -181,6 +378,13 @@ module RIO
|
|
|
181
378
|
raise ArgumentError,"Unknown State Name (#{state_name})"
|
|
182
379
|
end
|
|
183
380
|
end
|
|
381
|
+
def try_state_proc1(current_state,rio_handle)
|
|
382
|
+
#p "try_state_proc cur=#{current_state}[#{current_state.class}] han=#{rio_handle}[#{rio_handle.class}]"
|
|
383
|
+
proc { |new_state_name|
|
|
384
|
+
# new_state_class = state2class(new_state_name)
|
|
385
|
+
_change_state(state2class(new_state_name,rio_handle),current_state,rio_handle)
|
|
386
|
+
}
|
|
387
|
+
end
|
|
184
388
|
def try_state_proc(current_state,rio_handle)
|
|
185
389
|
proc { |new_state_name|
|
|
186
390
|
# new_state_class = state2class(new_state_name)
|
|
@@ -200,6 +404,10 @@ module RIO
|
|
|
200
404
|
private :_change_state
|
|
201
405
|
|
|
202
406
|
# factory creates a state from args
|
|
407
|
+
def create_state1(*args)
|
|
408
|
+
riorl = RIO::RL::Builder.build(*args)
|
|
409
|
+
create_handle(state2class(reset_state(riorl)).new(riorl))
|
|
410
|
+
end
|
|
203
411
|
def create_state(*args)
|
|
204
412
|
riorl = RIO::RL::Builder.build(*args)
|
|
205
413
|
create_handle(state2class(reset_state(riorl)).new(riorl))
|
data/lib/rio/file.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,16 +23,15 @@
|
|
|
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
|
require 'rio/state'
|
|
@@ -83,6 +82,7 @@ module RIO
|
|
|
83
82
|
end
|
|
84
83
|
def [](*args)
|
|
85
84
|
#p "#{callstr('[]',*args)} ss_type=#{ss_type?}"
|
|
85
|
+
return self.yamldoc[*args] if cx['yamldoc']
|
|
86
86
|
if _using_files_with_a_file
|
|
87
87
|
unless args.empty?
|
|
88
88
|
ss_args = cx['ss_args'] = args
|
data/lib/rio/filter.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,16 +23,15 @@
|
|
|
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
|
|
@@ -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,16 +23,15 @@
|
|
|
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
|
data/lib/rio/filter/gzip.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,16 +23,15 @@
|
|
|
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
|
require 'zlib'
|
|
@@ -44,11 +43,17 @@ module RIO
|
|
|
44
43
|
self
|
|
45
44
|
end
|
|
46
45
|
end
|
|
46
|
+
module GZipWin32MissingEachLine
|
|
47
|
+
def each_line(*args,&block)
|
|
48
|
+
self.each(*args,&block)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
47
51
|
module GZipRead
|
|
48
52
|
def self.extend_object(ioh_stream)
|
|
49
53
|
super
|
|
50
54
|
gz = Zlib::GzipReader.new(ioh_stream.ios)
|
|
51
55
|
gz.extend Filter::GZipMissing
|
|
56
|
+
gz.extend Filter::GZipWin32MissingEachLine
|
|
52
57
|
ioh_stream.iostack.push(gz)
|
|
53
58
|
end
|
|
54
59
|
end
|