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,88 @@
|
|
|
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
|
+
__END__
|
|
37
|
+
require 'rio/rl/ioi'
|
|
38
|
+
require 'rio/arrayio'
|
|
39
|
+
require 'rio/stream'
|
|
40
|
+
require 'rio/stream/open'
|
|
41
|
+
|
|
42
|
+
module RIO
|
|
43
|
+
module AryIO #:nodoc: all
|
|
44
|
+
|
|
45
|
+
class RL < RL::IOIBase
|
|
46
|
+
RIOSCHEME = 'aryio'
|
|
47
|
+
RIOPATH = RIO::RL::CHMAP.invert[RIOSCHEME].freeze
|
|
48
|
+
def initialize(ary=[])
|
|
49
|
+
#p "#{callstr('initialize',ary.inspect)}"
|
|
50
|
+
@ary = ary
|
|
51
|
+
end
|
|
52
|
+
def open(m,*args)
|
|
53
|
+
#p "#{callstr('open',m,args.inspect)} ary=#{@ary.inspect}"
|
|
54
|
+
@ary = args.shift unless args.empty?
|
|
55
|
+
#p "#{callstr('open',m,args)} ary=#{@ary.inspect}"
|
|
56
|
+
RIO::ArrayIO.new(@ary,m.to_s,*args)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
module Stream
|
|
60
|
+
module Ops
|
|
61
|
+
def array() ioh.array end
|
|
62
|
+
def array=(p1)
|
|
63
|
+
ioh.array = p1
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
class Open < RIO::Stream::Open
|
|
67
|
+
include Ops
|
|
68
|
+
def input() stream_state('AryIO::Stream::Input') end
|
|
69
|
+
def output() stream_state('AryIO::Stream::Output') end
|
|
70
|
+
def inout() stream_state('AryIO::Stream::InOut') end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class Input < RIO::Stream::Input
|
|
75
|
+
include Ops
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
class Output < RIO::Stream::Output
|
|
79
|
+
include Ops
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class InOut < RIO::Stream::InOut
|
|
83
|
+
include Ops
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
RESET_STATE = 'AryIO::Stream::Open'
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
module RIO
|
|
38
|
+
module CmdIO #:nodoc: all
|
|
39
|
+
require 'rio/rl/ioi'
|
|
40
|
+
RESET_STATE = 'Stream::Duplex::Open'
|
|
41
|
+
|
|
42
|
+
class RL < RL::SysIOBase
|
|
43
|
+
RIOSCHEME = 'cmdio'
|
|
44
|
+
RIOPATH = RIO::RL::CHMAP.invert[RIOSCHEME].to_s.freeze
|
|
45
|
+
attr_reader :cmd
|
|
46
|
+
def initialize(cmd="")
|
|
47
|
+
case cmd
|
|
48
|
+
when self.class then @cmd = cmd.cmd
|
|
49
|
+
else @cmd = cmd
|
|
50
|
+
end
|
|
51
|
+
super
|
|
52
|
+
end
|
|
53
|
+
def opaque()
|
|
54
|
+
URI.escape(@cmd,RIO::RL::ESCAPE)
|
|
55
|
+
end
|
|
56
|
+
def to_s()
|
|
57
|
+
@cmd
|
|
58
|
+
end
|
|
59
|
+
def open(m)
|
|
60
|
+
#p "opening #{@cmd}"
|
|
61
|
+
#raise RuntimeError, "Should Not Open"
|
|
62
|
+
super(::IO.popen(@cmd,m.to_s))
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# must be able to process
|
|
66
|
+
# parse('rio:cmdio',cmd)
|
|
67
|
+
# parse('rio:cmdio:escaped_cmd')
|
|
68
|
+
SPLIT_RE = %r|(?:(.+))$|.freeze
|
|
69
|
+
def self.splitrl(s)
|
|
70
|
+
sub,opq,whole = split_riorl(s)
|
|
71
|
+
if bm = SPLIT_RE.match(opq)
|
|
72
|
+
escaped_cmd = bm[1]
|
|
73
|
+
cmd = URI.unescape(escaped_cmd)
|
|
74
|
+
[cmd]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
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/rl/ioi'
|
|
38
|
+
require 'rio/stream'
|
|
39
|
+
require 'rio/stream/open'
|
|
40
|
+
require 'rio/piper'
|
|
41
|
+
|
|
42
|
+
module RIO
|
|
43
|
+
module CmdPipe #:nodoc: all
|
|
44
|
+
RESET_STATE = 'CmdPipe::Stream::Reset'
|
|
45
|
+
|
|
46
|
+
class RL < RL::IOIBase
|
|
47
|
+
RIOSCHEME = 'cmdpipe'
|
|
48
|
+
RIOPATH = RIO::RL::CHMAP.invert[RIOSCHEME].to_s.freeze
|
|
49
|
+
attr_reader :piper
|
|
50
|
+
|
|
51
|
+
def initialize(*args)
|
|
52
|
+
case args[0]
|
|
53
|
+
when CmdPipe::RL
|
|
54
|
+
@piper = args[0].piper
|
|
55
|
+
when Piper::Base
|
|
56
|
+
@piper = args[0]
|
|
57
|
+
else
|
|
58
|
+
@piper = Piper::Base.new(*args)
|
|
59
|
+
end
|
|
60
|
+
super
|
|
61
|
+
end
|
|
62
|
+
def initialize_copy(*args)
|
|
63
|
+
super
|
|
64
|
+
@piper = @piper.clone
|
|
65
|
+
end
|
|
66
|
+
def opaque()
|
|
67
|
+
#p callstr('opaque')
|
|
68
|
+
@piper.rios.map{|cmd| URI.escape(cmd.to_s,RIO::RL::ESCAPE)}.join('|')
|
|
69
|
+
end
|
|
70
|
+
def to_s()
|
|
71
|
+
return "" if @piper.rios.nil? or @piper.rios.empty?
|
|
72
|
+
@piper.rios.map{|cmd| cmd.to_s}.join('|')
|
|
73
|
+
end
|
|
74
|
+
def open(m,*args)
|
|
75
|
+
@outp = rio(?")
|
|
76
|
+
rp = Piper::Base.new(@piper,@outp)
|
|
77
|
+
rp.run
|
|
78
|
+
@outp
|
|
79
|
+
end
|
|
80
|
+
SPLIT_RE = %r|(?:([^\|]+)(?:\|([^\|]+))*)?$|.freeze
|
|
81
|
+
def self.splitrl(s)
|
|
82
|
+
#p "S='#{s}'"
|
|
83
|
+
sub,opq,whole = split_riorl(s)
|
|
84
|
+
if opq.nil? or opq.empty?
|
|
85
|
+
[]
|
|
86
|
+
elsif bm = SPLIT_RE.match(opq)
|
|
87
|
+
escaped_cmd = bm[1]
|
|
88
|
+
cmd = URI.unescape(escaped_cmd)
|
|
89
|
+
[cmd]
|
|
90
|
+
else
|
|
91
|
+
[]
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
module Stream
|
|
96
|
+
class Reset < State::Base
|
|
97
|
+
include Ops::Path::URI
|
|
98
|
+
include Piper::Cp::Util
|
|
99
|
+
def check?() true end
|
|
100
|
+
def |(arg)
|
|
101
|
+
ario = ensure_cmd_rio(arg)
|
|
102
|
+
npiper = Piper::Base.new(self.rl.piper,ario)
|
|
103
|
+
process_pipe_arg_(npiper)
|
|
104
|
+
end
|
|
105
|
+
def piper
|
|
106
|
+
self.rl.piper
|
|
107
|
+
end
|
|
108
|
+
def has_output_dest?
|
|
109
|
+
piper.has_output_dest?
|
|
110
|
+
end
|
|
111
|
+
# def when_missing(sym,*args)
|
|
112
|
+
# #p callstr('when_missing',sym,*args)
|
|
113
|
+
# become 'CmdPipe::Stream::Open'
|
|
114
|
+
# end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
module RIO
|
|
38
|
+
module FD #:nodoc: all
|
|
39
|
+
require 'rio/rl/ioi'
|
|
40
|
+
RESET_STATE = RL::IOIBase::RESET_STATE
|
|
41
|
+
|
|
42
|
+
class RL < RL::SysIOBase
|
|
43
|
+
RIOSCHEME = 'fd'
|
|
44
|
+
RIOPATH = RIO::RL::CHMAP.invert[RIOSCHEME].freeze
|
|
45
|
+
def initialize(fd)
|
|
46
|
+
@fd = fd
|
|
47
|
+
super
|
|
48
|
+
end
|
|
49
|
+
def open(m,*args)
|
|
50
|
+
super(::IO.new(@fd,m.to_s))
|
|
51
|
+
end
|
|
52
|
+
def opaque() "#{@fd}" end
|
|
53
|
+
# must be able to process
|
|
54
|
+
# parse('rio:fd:<number>')
|
|
55
|
+
SPLIT_RE = %r|(\d+)$|
|
|
56
|
+
def self.splitrl(s)
|
|
57
|
+
sub,opq,whole = split_riorl(s)
|
|
58
|
+
if bm = SPLIT_RE.match(opq)
|
|
59
|
+
fd = bm[1].to_i
|
|
60
|
+
[fd]
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
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 'net/ftp'
|
|
38
|
+
require 'open-uri'
|
|
39
|
+
require 'rio/ftp/fs'
|
|
40
|
+
require 'rio/rl/path'
|
|
41
|
+
require 'rio/ftp/dir'
|
|
42
|
+
require 'rio/ftp/ftpfile'
|
|
43
|
+
|
|
44
|
+
module RIO
|
|
45
|
+
module FTP #:nodoc: all
|
|
46
|
+
#RESET_STATE = 'FTP::State::Reset'
|
|
47
|
+
RESET_STATE = RIO::RL::PathBase::RESET_STATE
|
|
48
|
+
|
|
49
|
+
require 'rio/rl/uri'
|
|
50
|
+
|
|
51
|
+
class RL < RIO::RL::URIBase
|
|
52
|
+
def initialize(arg0,*args)
|
|
53
|
+
#p callstr('initialize',arg0,*args)
|
|
54
|
+
super(*_sup_args(arg0,*args))
|
|
55
|
+
@ftype = nil
|
|
56
|
+
@names = nil
|
|
57
|
+
end
|
|
58
|
+
def _sup_args(arg0,*args)
|
|
59
|
+
if arg0 == 'ftp:'
|
|
60
|
+
hn = args.shift || 'localhost'
|
|
61
|
+
us = args.shift
|
|
62
|
+
pw = args.shift
|
|
63
|
+
pt = args.shift || ''
|
|
64
|
+
ph = args.shift || '/'
|
|
65
|
+
tc = args.shift || ''
|
|
66
|
+
u = URI::FTP.new2(us,pw,hn,pt,ph,tc)
|
|
67
|
+
return [u]
|
|
68
|
+
else
|
|
69
|
+
return [arg0] + args
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
# def arg0_info_(arg0,*args)
|
|
73
|
+
# #p "arg0_info_(#{arg0.inspect},#{args.inspect})"
|
|
74
|
+
# vuri,vbase,vfs = nil,nil,nil
|
|
75
|
+
# case arg0
|
|
76
|
+
# when RIO::Rio
|
|
77
|
+
# return _init_from_arg(arg0.rl)
|
|
78
|
+
# when RIO::RL::URIBase,RIO::FTP::RL
|
|
79
|
+
# vuri,vbase,vfs = arg0.uri,arg0.base,arg0.fs
|
|
80
|
+
# when ::URI
|
|
81
|
+
# vuri = arg0
|
|
82
|
+
# when ::String
|
|
83
|
+
# vuri = uri_from_string_(arg0) || ::URI.parse(arg0)
|
|
84
|
+
# else
|
|
85
|
+
# raise(ArgumentError,"'#{arg0}'[#{arg0.class}] can not be used to create a Rio")
|
|
86
|
+
# end
|
|
87
|
+
# [vuri,vbase,vfs]
|
|
88
|
+
# end
|
|
89
|
+
# def build_arg0_(path_str)
|
|
90
|
+
# path_str
|
|
91
|
+
# end
|
|
92
|
+
def join(*args)
|
|
93
|
+
return self if args.empty?
|
|
94
|
+
join_(args.map{ |arg| RIO::RL.fs2url(arg.to_s)})
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def self.splitrl(s)
|
|
99
|
+
#p "splitrl(#{s})"
|
|
100
|
+
sub,opq,whole = split_riorl(s)
|
|
101
|
+
#p sub,opq,whole
|
|
102
|
+
[whole]
|
|
103
|
+
end
|
|
104
|
+
def openfs_
|
|
105
|
+
#p callstr('openfs_')
|
|
106
|
+
RIO::FTP::FS.create(self.uri)
|
|
107
|
+
end
|
|
108
|
+
def open(*args)
|
|
109
|
+
IOH::Dir.new(RIO::FTP::Dir::Stream.new(self.uri))
|
|
110
|
+
end
|
|
111
|
+
def file_rl()
|
|
112
|
+
RIO::FTP::Stream::RL.new(self.uri)
|
|
113
|
+
end
|
|
114
|
+
def dir_rl()
|
|
115
|
+
self
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
module Stream
|
|
119
|
+
class RL < RIO::RL::URIBase
|
|
120
|
+
def self.splitrl(s)
|
|
121
|
+
sub,opq,whole = split_riorl(s)
|
|
122
|
+
[whole]
|
|
123
|
+
end
|
|
124
|
+
def openfs_
|
|
125
|
+
RIO::FTP::FS.create(@uri)
|
|
126
|
+
end
|
|
127
|
+
def open(m)
|
|
128
|
+
case
|
|
129
|
+
when m.primarily_write?
|
|
130
|
+
RIO::IOH::Stream.new(RIO::FTP::FTPFile.new(fs.remote_path(@uri.to_s),fs.conn))
|
|
131
|
+
else
|
|
132
|
+
RIO::IOH::Stream.new(@uri.open)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
def file_rl()
|
|
136
|
+
self
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|