rio 0.3.7 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +1273 -1482
- data/README +2 -2
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/{RUNME.1st.rb → build_doc.rb} +4 -10
- data/doc/ANNOUNCE +33 -80
- data/doc/RELEASE_NOTES +31 -1
- data/doc/generators/template/html/rio.rb +3 -3
- data/lib/rio/abstract_method.rb +2 -2
- data/lib/rio/argv.rb +2 -2
- data/lib/rio/arycopy.rb +2 -2
- data/lib/rio/assert.rb +2 -2
- data/lib/rio/base.rb +2 -2
- data/lib/rio/callstr.rb +47 -0
- data/lib/rio/const.rb +52 -0
- data/lib/rio/construct.rb +6 -24
- data/lib/rio/constructor.rb +12 -2
- data/lib/rio/context/autoclose.rb +73 -0
- data/lib/rio/context/copying.rb +2 -2
- data/lib/rio/context/cxx.rb +2 -2
- data/lib/rio/context/dir.rb +2 -2
- data/lib/rio/context/gzip.rb +2 -2
- data/lib/rio/context/methods.rb +6 -34
- data/lib/rio/context/skip.rb +2 -2
- data/lib/rio/context/stream.rb +2 -2
- data/lib/rio/context.rb +17 -2
- data/lib/rio/cp.rb +35 -9
- data/lib/rio/def.rb +54 -0
- data/lib/rio/dir.rb +19 -20
- data/lib/rio/doc/HOWTO.rb +23 -7
- data/lib/rio/doc/INTRO.rb +57 -23
- data/lib/rio/doc/MISC.rb +2 -2
- data/lib/rio/doc/OPTIONAL.rb +134 -0
- data/lib/rio/doc/SYNOPSIS.rb +11 -4
- data/lib/rio/doc.rb +2 -2
- data/lib/rio/entrysel.rb +25 -6
- data/lib/rio/exception/copy.rb +2 -2
- data/lib/rio/exception/notsupported.rb +47 -0
- data/lib/rio/exception/open.rb +2 -2
- data/lib/rio/exception/state.rb +2 -2
- data/lib/rio/exception.rb +2 -2
- data/lib/rio/ext/csv.rb +56 -11
- data/lib/rio/ext/yaml.rb +2 -2
- data/lib/rio/ext/zipfile.rb +91 -0
- data/lib/rio/ext.rb +38 -3
- data/lib/rio/factory.rb +17 -34
- data/lib/rio/file.rb +48 -8
- data/lib/rio/filter/closeoneof.rb +36 -16
- data/lib/rio/filter/gzip.rb +2 -2
- data/lib/rio/filter.rb +2 -2
- data/lib/rio/fs/base.rb +42 -0
- data/lib/rio/fs/impl.rb +123 -0
- data/lib/rio/fs/native.rb +76 -0
- data/lib/rio/{record.rb → fs/stream.rb} +21 -18
- data/lib/rio/fs/url.rb +64 -0
- data/lib/rio/ftp/{ioh.rb → conncache.rb} +38 -39
- data/lib/rio/ftp/dir.rb +95 -0
- data/lib/rio/ftp/fs.rb +173 -0
- data/lib/rio/ftp/ftpfile.rb +20 -0
- data/lib/rio/grande.rb +2 -2
- data/lib/rio/handle.rb +2 -2
- data/lib/rio/if/basic.rb +2 -2
- data/lib/rio/if/csv.rb +2 -2
- data/lib/rio/if/dir.rb +2 -2
- data/lib/rio/if/file.rb +26 -2
- data/lib/rio/if/fileordir.rb +44 -49
- data/lib/rio/if/grande.rb +32 -10
- data/lib/rio/if/grande_entry.rb +12 -2
- data/lib/rio/if/grande_stream.rb +17 -28
- data/lib/rio/if/internal.rb +2 -2
- data/lib/rio/if/path.rb +7 -6
- data/lib/rio/if/stream.rb +85 -29
- data/lib/rio/if/string.rb +2 -2
- data/lib/rio/if/temp.rb +2 -2
- data/lib/rio/if/test.rb +37 -4
- data/lib/rio/if/yaml.rb +2 -2
- data/lib/rio/if.rb +2 -2
- data/lib/rio/impl/path.rb +2 -2
- data/lib/rio/ioh.rb +17 -6
- data/lib/rio/iomode.rb +4 -3
- data/lib/rio/ios/fail.rb +107 -0
- data/lib/rio/ios/generic.rb +120 -0
- data/lib/rio/ios/mode.rb +61 -0
- data/lib/rio/ios/null.rb +120 -0
- data/lib/rio/iowrap.rb +129 -0
- data/lib/rio/kernel.rb +12 -3
- data/lib/rio/local.rb +2 -2
- data/lib/rio/match.rb +3 -3
- data/lib/rio/matchrecord.rb +2 -2
- data/lib/rio/no_warn.rb +50 -0
- data/lib/rio/{arrayio.rb → nullio.rb} +47 -86
- data/lib/rio/open3.rb +2 -2
- data/lib/rio/ops/construct.rb +20 -13
- data/lib/rio/ops/create.rb +10 -19
- data/lib/rio/ops/dir.rb +60 -54
- data/lib/rio/ops/either.rb +11 -9
- data/lib/rio/ops/file.rb +28 -24
- data/lib/rio/ops/path.rb +45 -43
- data/lib/rio/ops/stream/input.rb +12 -8
- data/lib/rio/ops/stream/output.rb +2 -2
- data/lib/rio/ops/stream/read.rb +35 -32
- data/lib/rio/ops/stream/write.rb +5 -5
- data/lib/rio/ops/stream.rb +7 -3
- data/lib/rio/ops/symlink.rb +12 -10
- data/lib/rio/path/reset.rb +5 -5
- data/lib/rio/path.rb +32 -24
- data/lib/rio/piper/cp.rb +2 -2
- data/lib/rio/piper.rb +2 -2
- data/lib/rio/prompt.rb +2 -2
- data/lib/rio/rectype.rb +9 -7
- data/lib/rio/rl/base.rb +5 -4
- data/lib/rio/rl/builder.rb +17 -5
- data/lib/rio/rl/ioi.rb +14 -4
- data/lib/rio/rl/path.rb +23 -15
- data/lib/rio/rl/pathmethods.rb +12 -2
- data/lib/rio/rl/uri.rb +13 -6
- data/lib/rio/scheme/aryio.rb +3 -3
- data/lib/rio/scheme/cmdio.rb +4 -3
- data/lib/rio/scheme/cmdpipe.rb +3 -35
- data/lib/rio/scheme/fd.rb +4 -3
- data/lib/rio/scheme/ftp.rb +36 -7
- data/lib/rio/scheme/http.rb +2 -2
- data/lib/rio/{context/closeoneof.rb → scheme/null.rb} +17 -11
- data/lib/rio/scheme/path.rb +28 -30
- data/lib/rio/scheme/stderr.rb +4 -4
- data/lib/rio/scheme/stdio.rb +6 -5
- data/lib/rio/scheme/strio.rb +10 -20
- data/lib/rio/scheme/sysio.rb +5 -2
- data/lib/rio/scheme/tcp.rb +4 -3
- data/lib/rio/scheme/temp.rb +14 -1
- data/lib/rio/state/error.rb +2 -2
- data/lib/rio/state.rb +80 -34
- data/lib/rio/stream/base.rb +7 -2
- data/lib/rio/stream/duplex.rb +13 -10
- data/lib/rio/stream/open.rb +74 -79
- data/lib/rio/stream.rb +15 -23
- data/lib/rio/symantics.rb +2 -2
- data/lib/rio/tempdir.rb +132 -132
- data/lib/rio/to_rio/all.rb +40 -0
- data/lib/rio/to_rio/array.rb +40 -0
- data/lib/rio/to_rio/io.rb +41 -0
- data/lib/rio/to_rio/object.rb +43 -0
- data/lib/rio/to_rio/string.rb +41 -0
- data/lib/rio/to_rio.rb +13 -2
- data/lib/rio/uri/file.rb +2 -2
- data/lib/rio/util.rb +2 -2
- data/lib/rio/version.rb +3 -3
- data/lib/rio.rb +16 -25
- 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_misc.rb +112 -0
- data/test/ftp/anon_read.rb +105 -0
- data/test/ftp/anon_special.rb +68 -0
- data/test/ftp/anon_write.rb +63 -0
- data/test/ftp/ftp2ftp.rb +51 -0
- data/test/ftp/initftpfiles.rb +14 -0
- data/test/ftp/testdef.rb +51 -0
- data/test/gem_runtests.rb +15 -15
- data/test/runalltests.rb +15 -0
- data/test/runftptests.rb +14 -0
- data/test/{1.rb → runhttptests.rb} +14 -14
- data/test/runtests.rb +14 -14
- data/test/tc/all.rb +36 -21
- data/test/tc/cmdpipe.rb +18 -15
- data/test/tc/copy-from-http.rb +89 -0
- data/test/tc/copy-from.rb +1 -52
- data/test/tc/copy.rb +19 -17
- data/test/tc/csv2.rb +6 -3
- data/test/tc/empty.rb +47 -0
- data/test/tc/emptyriodir.rb +129 -0
- data/test/tc/entsel.rb +110 -0
- data/test/tc/files_select.rb +92 -0
- data/test/tc/get.rb +7 -6
- data/test/tc/getrec.rb +2 -5
- data/test/tc/gzip.rb +82 -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 +112 -0
- data/test/tc/methods.rb +10 -9
- data/test/tc/misc.rb +1 -37
- data/test/tc/null.rb +45 -0
- data/test/tc/pid.rb +31 -0
- data/test/tc/piper.rb +34 -37
- data/test/tc/programs_util.rb +24 -0
- data/test/tc/readline.rb +30 -0
- data/test/tc/rename.rb +12 -0
- data/test/tc/tempfile.rb +14 -0
- data/test/tc/testcase.rb +6 -0
- data/test/tc/tonl.rb +37 -0
- metadata +181 -144
- data/ex/colx.rb +0 -8
- data/ex/findinruby +0 -16
- data/ex/findruby +0 -15
- data/ex/passwd_report.rb +0 -8
- data/ex/prompt.rb +0 -25
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +0 -35
- data/ex/riogunzip +0 -31
- data/ex/riogzip +0 -24
- data/ex/rioprompt.rb +0 -6
- data/ex/targz2zip +0 -17
- data/ex/tolf +0 -11
- data/lib/rio/ftp/conn.rb +0 -167
- data/lib/rio/ftp.rb +0 -275
- data/test/once.rb +0 -7
data/lib/rio/ops/stream/input.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -43,7 +43,6 @@ require 'rio/rectype'
|
|
43
43
|
require 'rio/ops/stream/read'
|
44
44
|
require 'rio/context/stream'
|
45
45
|
require 'stringio'
|
46
|
-
require 'rio/record'
|
47
46
|
require 'rio/cp'
|
48
47
|
require 'rio/piper/cp'
|
49
48
|
|
@@ -73,7 +72,9 @@ module RIO
|
|
73
72
|
each_(*args,&block)
|
74
73
|
self
|
75
74
|
end
|
76
|
-
|
75
|
+
def empty?()
|
76
|
+
self.eof?
|
77
|
+
end
|
77
78
|
def each_record(*args,&block)
|
78
79
|
#p callstr('each_record',*args)
|
79
80
|
each_record_(*args,&block)
|
@@ -91,6 +92,9 @@ module RIO
|
|
91
92
|
raw_rec = self._get_rec
|
92
93
|
return to_rec_(raw_rec) if @get_selrej.match?(raw_rec,@recno)
|
93
94
|
end
|
95
|
+
self.close if closeoneof?
|
96
|
+
nil
|
97
|
+
# (closeoneof? ? self.on_eof_close{ nil } : nil)
|
94
98
|
end
|
95
99
|
def get_type(itertype,&block)
|
96
100
|
old_itertype = cx['stream_itertype']
|
@@ -138,9 +142,9 @@ module RIO
|
|
138
142
|
end
|
139
143
|
end
|
140
144
|
end
|
141
|
-
return self
|
145
|
+
return closeoneof? ? self.close : self
|
142
146
|
end
|
143
|
-
closeoneof? ?
|
147
|
+
closeoneof? ? self.close : self
|
144
148
|
end
|
145
149
|
|
146
150
|
# iterate over the records, yielding only with matching records
|
@@ -159,7 +163,7 @@ module RIO
|
|
159
163
|
end
|
160
164
|
return self
|
161
165
|
}
|
162
|
-
closeoneof? ?
|
166
|
+
closeoneof? ? self.close : self
|
163
167
|
end
|
164
168
|
alias :each_row_ :each_
|
165
169
|
def clear_selection()
|
@@ -204,7 +208,7 @@ module RIO
|
|
204
208
|
selrej.rangetops
|
205
209
|
end
|
206
210
|
|
207
|
-
def on_closeoneof
|
211
|
+
def on_closeoneof()
|
208
212
|
#p "on_closeoneof #{self.object_id} #{self.ior.object_id}"
|
209
213
|
self.close
|
210
214
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
data/lib/rio/ops/stream/read.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -40,42 +40,45 @@ module RIO
|
|
40
40
|
module Ops
|
41
41
|
module Stream
|
42
42
|
module Read
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
def
|
47
|
-
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def _post_eof_close(&block)
|
47
|
+
rtn = yield
|
48
|
+
self.close if closeoneof?
|
49
|
+
rtn
|
48
50
|
end
|
49
|
-
def
|
50
|
-
|
51
|
+
def _pre_eof_close(&block)
|
52
|
+
begin
|
53
|
+
closit = ior.eof? && closeoneof?
|
54
|
+
rtn = yield
|
55
|
+
ensure
|
56
|
+
self.close if closit
|
57
|
+
end
|
58
|
+
rtn
|
51
59
|
end
|
60
|
+
|
61
|
+
public
|
62
|
+
|
63
|
+
def contents() _post_eof_close { ior.gets(nil) || "" } end
|
64
|
+
def readlines(*args) _post_eof_close { ior.readlines(*args) } end
|
65
|
+
def each_line(*args,&block) _post_eof_close { ior.each_line(*args,&block) } end
|
66
|
+
def each_byte(*args,&block) _post_eof_close { ior.each_byte(*args,&block) } end
|
67
|
+
def each_bytes(nb,*args,&block) _post_eof_close { ior.each_bytes(nb,&block) } end
|
68
|
+
|
69
|
+
def read(*args) _pre_eof_close { ior.read(*args) } end
|
70
|
+
def gets(*args) _pre_eof_close { ior.gets(*args) } end
|
71
|
+
def readline(*args) _pre_eof_close { ior.readline(*args) } end
|
72
|
+
def readpartial(*args) _pre_eof_close { ior.readpartial(*args) } end
|
73
|
+
def readchar(*args) _pre_eof_close { ior.readchar(*args) } end
|
74
|
+
def getc(*args) _pre_eof_close { ior.getc(*args) } end
|
75
|
+
|
52
76
|
def ungetc(*args)
|
53
77
|
ior.ungetc(*args)
|
54
78
|
self
|
55
79
|
end
|
56
|
-
def
|
57
|
-
|
58
|
-
# self.ior.each_line(*args,&block)
|
59
|
-
self.ior.each_line { |line|
|
60
|
-
yield line
|
61
|
-
} #(*args,&block)
|
62
|
-
}
|
63
|
-
end
|
64
|
-
def each_byte(*args,&block)
|
65
|
-
auto { ior.each_byte(*args,&block) }
|
66
|
-
end
|
67
|
-
def each_bytes(nb,*args,&block)
|
68
|
-
#p callstr('each_bytes',nb,*args)
|
69
|
-
auto {
|
70
|
-
until ior.eof?
|
71
|
-
break unless s = ior.read(nb)
|
72
|
-
yield s
|
73
|
-
end
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
extend Forwardable
|
78
|
-
def_instance_delegators(:ior,:readline,:readchar,:gets,:lineno)
|
80
|
+
def lineno() ior.lineno end
|
81
|
+
def lineno=(arg) ior.lineno = arg end
|
79
82
|
end
|
80
83
|
end
|
81
84
|
end
|
data/lib/rio/ops/stream/write.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -39,7 +39,9 @@ module RIO
|
|
39
39
|
module Ops
|
40
40
|
module Stream
|
41
41
|
module Write
|
42
|
-
def puts(*argv)
|
42
|
+
def puts(*argv)
|
43
|
+
rtn_self { iow.puts(*argv) }
|
44
|
+
end
|
43
45
|
def puts!(*argv) rtn_close { iow.puts(*argv); } end
|
44
46
|
def putc(*argv) rtn_self { iow.putc(*argv) } end
|
45
47
|
def putc!(*argv) rtn_close { iow.putc(*argv) } end
|
@@ -50,8 +52,6 @@ module RIO
|
|
50
52
|
def write(*argv) iow.write(*argv) end
|
51
53
|
def write!(*argv) then_close { iow.write(*argv) } end
|
52
54
|
def _!(*argv) self.close.softreset end
|
53
|
-
# extend Forwardable
|
54
|
-
# def_instance_de
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/lib/rio/ops/stream.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -48,16 +48,20 @@ module RIO
|
|
48
48
|
end
|
49
49
|
def closed?() self.ioh.nil? end
|
50
50
|
def eof?() closed? or ior.eof? end
|
51
|
+
def stat() ioh ? ioh.stat : nil end #
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
55
|
module Stream
|
55
56
|
module Manip
|
57
|
+
def pid() ioh ? ioh.pid : nil end
|
58
|
+
def to_io() ioh ? ioh.to_io : nil end
|
59
|
+
def tty?() ioh ? ioh.tty? : false end
|
60
|
+
def isatty() ioh ? ioh.isatty : false end
|
56
61
|
def binmode() rtn_self { self.ioh.binmode } end
|
57
62
|
def flush() rtn_self { self.ioh.flush } end
|
58
63
|
def fsync() rtn_self { self.ioh.fsync } end
|
59
64
|
def seek(amount,whence=IO::SEEK_SET) rtn_self { self.ioh.seek(amount,whence) } end
|
60
|
-
|
61
65
|
extend Forwardable
|
62
66
|
def_instance_delegators(:ioh,:pos,:pos=,:fileno,:to_i,
|
63
67
|
:fcntl,:ioctl)
|
data/lib/rio/ops/symlink.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -35,18 +35,20 @@
|
|
35
35
|
# The documented interface and behavior is subject to change without notice.</b>
|
36
36
|
|
37
37
|
|
38
|
+
# module RIO
|
39
|
+
# module Impl
|
40
|
+
# module U
|
41
|
+
# def self.readlink(s,*args) ::File.readlink(s,*args) end
|
42
|
+
# def self.lstat(s,*args) ::File.lstat(s,*args) end
|
43
|
+
# end
|
44
|
+
# end
|
45
|
+
# end
|
38
46
|
module RIO
|
39
|
-
module Impl
|
40
|
-
module U
|
41
|
-
def self.readlink(s,*args) ::File.readlink(s,*args) end
|
42
|
-
def self.lstat(s,*args) ::File.lstat(s,*args) end
|
43
|
-
end
|
44
|
-
end
|
45
47
|
module Ops
|
46
48
|
module Symlink
|
47
49
|
module ExistOrNot
|
48
|
-
def readlink(*args) new_rio(
|
49
|
-
def lstat(*args)
|
50
|
+
def readlink(*args) new_rio(fs.readlink(self.to_s,*args)) end
|
51
|
+
def lstat(*args) fs.lstat(self.to_s,*args) end
|
50
52
|
|
51
53
|
end
|
52
54
|
module Existing
|
data/lib/rio/path/reset.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -55,15 +55,15 @@ module RIO
|
|
55
55
|
|
56
56
|
def when_missing(sym,*args)
|
57
57
|
# p callstr('when_missing',sym,*args)
|
58
|
-
if empty?
|
58
|
+
if to_s.empty?
|
59
59
|
pathempty()
|
60
60
|
else
|
61
61
|
pathstring()
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
extend Forwardable
|
66
|
-
def_instance_delegators(:path,:empty?)
|
65
|
+
# extend Forwardable
|
66
|
+
# def_instance_delegators(:path,:empty?)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
data/lib/rio/path.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -49,6 +49,22 @@ module RIO
|
|
49
49
|
class Empty < State::Base
|
50
50
|
include Ops::Path::Empty
|
51
51
|
def check?() fspath.nil? or fspath.empty? end
|
52
|
+
def [](*args)
|
53
|
+
self.rl = Path::RL.new('.')
|
54
|
+
softreset[*args]
|
55
|
+
end
|
56
|
+
def each(&block)
|
57
|
+
self.rl = Path::RL.new('.')
|
58
|
+
softreset.each(&block)
|
59
|
+
end
|
60
|
+
def read(*args)
|
61
|
+
self.rl = Path::RL.new('.')
|
62
|
+
softreset.read(*args)
|
63
|
+
end
|
64
|
+
def get(*args)
|
65
|
+
self.rl = Path::RL.new('.')
|
66
|
+
softreset.get(*args)
|
67
|
+
end
|
52
68
|
def when_missing(sym,*args) gofigure(sym,*args) end
|
53
69
|
end
|
54
70
|
|
@@ -68,26 +84,21 @@ module RIO
|
|
68
84
|
end
|
69
85
|
end
|
70
86
|
|
71
|
-
|
87
|
+
private
|
72
88
|
|
73
|
-
def
|
74
|
-
|
75
|
-
next_state
|
76
|
-
next_state.extend(Ops::Symlink::Existing) if symlink?
|
77
|
-
next_state
|
78
|
-
end
|
79
|
-
def efile()
|
80
|
-
next_state = become('File::Existing')
|
81
|
-
next_state.extend(Ops::Symlink::Existing) if symlink?
|
82
|
-
next_state
|
83
|
-
end
|
84
|
-
def npath()
|
85
|
-
next_state = become('Path::NonExisting')
|
86
|
-
next_state.extend(Ops::Symlink::NonExisting) if symlink?
|
89
|
+
def _fs_state(become_state,symlink_mod)
|
90
|
+
next_state = become(become_state)
|
91
|
+
next_state.extend(symlink_mod) if symlink?
|
87
92
|
next_state
|
88
93
|
end
|
89
94
|
|
90
|
-
|
95
|
+
protected
|
96
|
+
|
97
|
+
def edir() _fs_state('Dir::Existing',Ops::Symlink::Existing) end
|
98
|
+
def efile() _fs_state('File::Existing',Ops::Symlink::Existing) end
|
99
|
+
def npath() _fs_state('Path::NonExisting',Ops::Symlink::NonExisting) end
|
100
|
+
|
101
|
+
end
|
91
102
|
|
92
103
|
# A transition state. Anything but simple path tests must cause a transition out of this state.
|
93
104
|
class NonExisting < State::Base
|
@@ -96,10 +107,7 @@ module RIO
|
|
96
107
|
|
97
108
|
def check?() not exist? end
|
98
109
|
|
99
|
-
def ndir()
|
100
|
-
#rl.path += '/' unless rl.path.empty? or rl.path[-1] == ?/
|
101
|
-
become('Dir::NonExisting')
|
102
|
-
end
|
110
|
+
def ndir() become 'Dir::NonExisting' end
|
103
111
|
def nfile() become('File::NonExisting') end
|
104
112
|
|
105
113
|
def when_missing(sym,*args)
|
@@ -110,8 +118,8 @@ module RIO
|
|
110
118
|
nfile()
|
111
119
|
end
|
112
120
|
end
|
113
|
-
end
|
121
|
+
end
|
114
122
|
|
115
|
-
end
|
123
|
+
end
|
116
124
|
|
117
125
|
end
|
data/lib/rio/piper/cp.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
data/lib/rio/piper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
data/lib/rio/prompt.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
data/lib/rio/rectype.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -42,10 +42,11 @@ module RIO
|
|
42
42
|
def get_arg_() $/ end
|
43
43
|
def get_(sep_string=get_arg_)
|
44
44
|
#p callstr('get_',sep_string.inspect)
|
45
|
-
self.
|
45
|
+
self.ior.gets(sep_string)
|
46
46
|
end
|
47
47
|
def each_rec_(&block)
|
48
|
-
each_line { |line|
|
48
|
+
self.ior.each_line { |line|
|
49
|
+
#self.ior.each { |line|
|
49
50
|
yield line
|
50
51
|
}
|
51
52
|
self
|
@@ -54,8 +55,9 @@ module RIO
|
|
54
55
|
module Output
|
55
56
|
def put_(rec,*args)
|
56
57
|
#p callstr('put_',rec,*args)
|
58
|
+
#p self.ioh
|
57
59
|
self.ioh.print(rec.to_s)
|
58
|
-
end
|
60
|
+
end
|
59
61
|
end
|
60
62
|
end
|
61
63
|
module Bytes
|
@@ -64,12 +66,12 @@ module RIO
|
|
64
66
|
cx['bytes_n']
|
65
67
|
end
|
66
68
|
def get_(nb=get_arg_())
|
67
|
-
self.
|
69
|
+
self.ior.read(nb)
|
68
70
|
end
|
69
71
|
def each_rec_(&block)
|
70
72
|
#p callstr('each_rec_ (EachIter::Bytes)')
|
71
73
|
# p 'each_rec_ => each_line'
|
72
|
-
each_bytes(cx['bytes_n']) { |b|
|
74
|
+
self.ior.each_bytes(cx['bytes_n']) { |b|
|
73
75
|
yield b
|
74
76
|
}
|
75
77
|
self
|
data/lib/rio/rl/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -112,10 +112,11 @@ module RIO
|
|
112
112
|
SUBSEPAR = ':'
|
113
113
|
|
114
114
|
class Base
|
115
|
+
attr :fs
|
115
116
|
def initialize(*args)
|
116
|
-
|
117
|
+
@fs = openfs_
|
117
118
|
end
|
118
|
-
|
119
|
+
def openfs_() nil end
|
119
120
|
def self.subscheme(s)
|
120
121
|
/^rio:([^:]+):/.match(s)[1]
|
121
122
|
end
|
data/lib/rio/rl/builder.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -47,6 +47,7 @@ module RIO
|
|
47
47
|
def self.build(*a)
|
48
48
|
#puts "build: #{a.inspect}"
|
49
49
|
a.flatten!
|
50
|
+
a.push('') if a.empty?
|
50
51
|
case a[0]
|
51
52
|
when ::String
|
52
53
|
case a[0]
|
@@ -65,9 +66,10 @@ module RIO
|
|
65
66
|
when RIO::Rio
|
66
67
|
a[0] = a[0].to_rl
|
67
68
|
when RL::Base
|
68
|
-
a0 = a.shift
|
69
|
+
a0 = a.shift.clone
|
70
|
+
return (a.empty? ? a0 : a0.join(*a))
|
69
71
|
#p 'THERE',a0,a0.clone
|
70
|
-
return a0.clone
|
72
|
+
#return a0.clone.join(*a)
|
71
73
|
#return a0.class.new(a0.clone,*a)
|
72
74
|
when ::URI
|
73
75
|
a0 = a.shift
|
@@ -75,7 +77,17 @@ module RIO
|
|
75
77
|
o = cl.new(a0,*a) unless cl.nil?
|
76
78
|
return o
|
77
79
|
when ::Symbol
|
78
|
-
|
80
|
+
case a[0]
|
81
|
+
when :zpath
|
82
|
+
a0 = a.shift
|
83
|
+
cl = Factory.instance.riorl_class(a0.to_s)
|
84
|
+
o = cl.new(*a) unless cl.nil?
|
85
|
+
return o
|
86
|
+
else
|
87
|
+
a[0] = 'rio:' + a[0].to_s + ':'
|
88
|
+
end
|
89
|
+
when ::NilClass
|
90
|
+
a[0] = 'rio:null:'
|
79
91
|
when ?? , ?= , ?_ , ?", ?[, ?#, ?`, ?|
|
80
92
|
a[0] = 'rio:'+CHMAP[a[0]]+':'
|
81
93
|
when ?-
|
data/lib/rio/rl/ioi.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# ===============================================================================
|
3
|
-
# Copyright (c) 2005, Christopher Kleckner
|
3
|
+
# Copyright (c) 2005, 2006 Christopher Kleckner
|
4
4
|
# All rights reserved
|
5
5
|
#
|
6
6
|
# This file is part of the Rio library for ruby.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
#
|
24
24
|
# To create the documentation for Rio run the command
|
25
|
-
#
|
25
|
+
# ruby build_doc.rb
|
26
26
|
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
27
|
#
|
28
28
|
# Suggested Reading
|
@@ -36,16 +36,24 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
require 'rio/rl/base'
|
39
|
+
require 'rio/ioh'
|
40
|
+
require 'rio/fs/stream'
|
39
41
|
|
40
42
|
module RIO
|
41
43
|
module RL
|
42
44
|
class IOIBase < Base
|
43
45
|
RESET_STATE = 'Stream::Open'
|
46
|
+
def openfs_()
|
47
|
+
RIO::FS::Stream.create()
|
48
|
+
end
|
44
49
|
def scheme() self.class.const_get(:RIOSCHEME) end
|
45
50
|
def opaque() '' end
|
46
51
|
def self.splitrl(s) nil end
|
47
52
|
#def path() self.class.const_get(:RIOPATH) end
|
48
53
|
def to_s() url() end
|
54
|
+
def open(ios)
|
55
|
+
IOH::Stream.new(ios)
|
56
|
+
end
|
49
57
|
end
|
50
58
|
end
|
51
59
|
module RL
|
@@ -55,12 +63,14 @@ module RIO
|
|
55
63
|
protected(:ios=)
|
56
64
|
def initialize(ios=nil)
|
57
65
|
@ios = ios
|
66
|
+
super
|
58
67
|
end
|
59
68
|
def initialize_copy(cp)
|
60
69
|
@ios = cp.ios.clone unless cp.ios.nil?
|
61
70
|
end
|
62
|
-
def open(
|
63
|
-
@ios
|
71
|
+
def open(ios=nil)
|
72
|
+
@ios = ios unless ios.nil?
|
73
|
+
super(@ios)
|
64
74
|
end
|
65
75
|
|
66
76
|
end
|