rio 0.3.7 → 0.3.8
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/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
|