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,75 @@
|
|
|
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
|
+
require 'rio/fs/impl'
|
|
37
|
+
require 'rio/fs/base'
|
|
38
|
+
|
|
39
|
+
module RIO
|
|
40
|
+
module FS
|
|
41
|
+
class Native < Base
|
|
42
|
+
require 'singleton'
|
|
43
|
+
include Singleton
|
|
44
|
+
attr_reader :file,:dir
|
|
45
|
+
def initialize(*args)
|
|
46
|
+
@file = ::File
|
|
47
|
+
@test = ::FileTest
|
|
48
|
+
@dir = ::Dir
|
|
49
|
+
require 'pathname'
|
|
50
|
+
@path = ::Pathname
|
|
51
|
+
require 'fileutils'
|
|
52
|
+
@util = ::FileUtils
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.create(*args)
|
|
56
|
+
instance(*args)
|
|
57
|
+
end
|
|
58
|
+
def root()
|
|
59
|
+
require 'rio/local'
|
|
60
|
+
::RIO::Local::ROOT_DIR
|
|
61
|
+
end
|
|
62
|
+
def cwd()
|
|
63
|
+
self.getwd()
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
include Str
|
|
67
|
+
include File
|
|
68
|
+
include Dir
|
|
69
|
+
include Path
|
|
70
|
+
include Test
|
|
71
|
+
include Util
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
+
require 'rio/fs/impl'
|
|
37
|
+
require 'rio/fs/base'
|
|
38
|
+
|
|
39
|
+
module RIO
|
|
40
|
+
module FS
|
|
41
|
+
class Stream < Base
|
|
42
|
+
require 'singleton'
|
|
43
|
+
include Singleton
|
|
44
|
+
attr_reader :file,:dir
|
|
45
|
+
def initialize(*args)
|
|
46
|
+
@file = nil
|
|
47
|
+
@test = nil
|
|
48
|
+
@dir = nil
|
|
49
|
+
@path = nil
|
|
50
|
+
@util = nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.create(*args)
|
|
54
|
+
instance(*args)
|
|
55
|
+
end
|
|
56
|
+
def symlink?(s) false end
|
|
57
|
+
def directory?(s) false end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/rio/fs/url.rb
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
require 'rio/fs/impl'
|
|
37
|
+
require 'rio/fs/base'
|
|
38
|
+
|
|
39
|
+
module RIO
|
|
40
|
+
module FS
|
|
41
|
+
class URL < Base
|
|
42
|
+
require 'singleton'
|
|
43
|
+
include Singleton
|
|
44
|
+
attr_reader :file,:dir
|
|
45
|
+
def initialize(*args)
|
|
46
|
+
@file = ::File
|
|
47
|
+
@test = nil
|
|
48
|
+
@dir = nil
|
|
49
|
+
@path = nil
|
|
50
|
+
@util = nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.create(*args)
|
|
54
|
+
instance(*args)
|
|
55
|
+
end
|
|
56
|
+
include Str
|
|
57
|
+
include File
|
|
58
|
+
def symlink?(s) false end
|
|
59
|
+
def directory?(s) false end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
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 'uri'
|
|
39
|
+
require 'singleton'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module FTP
|
|
43
|
+
class Connection
|
|
44
|
+
attr_reader :uri,:remote_root,:netftp
|
|
45
|
+
def initialize(uri)
|
|
46
|
+
@uri = uri.clone
|
|
47
|
+
@netftp = nil
|
|
48
|
+
@remote_root = nil
|
|
49
|
+
_init_connection()
|
|
50
|
+
end
|
|
51
|
+
def _init_connection
|
|
52
|
+
@netftp = ::Net::FTP.new()
|
|
53
|
+
@netftp.connect(@uri.host,@uri.port)
|
|
54
|
+
if @uri.user
|
|
55
|
+
@netftp.login(@uri.user,@uri.password)
|
|
56
|
+
else
|
|
57
|
+
@netftp.login
|
|
58
|
+
end
|
|
59
|
+
@remote_root = @netftp.pwd
|
|
60
|
+
@remote_root = '' if @remote_root == '/'
|
|
61
|
+
end
|
|
62
|
+
def method_missing(sym,*args,&block)
|
|
63
|
+
@netftp.__send__(sym,*args,&block)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
class ConnCache
|
|
67
|
+
include Singleton
|
|
68
|
+
def initialize()
|
|
69
|
+
@conns = {}
|
|
70
|
+
@count = {}
|
|
71
|
+
end
|
|
72
|
+
def urikey(uri)
|
|
73
|
+
key_uri = uri.clone
|
|
74
|
+
key_uri.path = ''
|
|
75
|
+
key_uri.to_s
|
|
76
|
+
end
|
|
77
|
+
def connect(uri)
|
|
78
|
+
key = urikey(uri)
|
|
79
|
+
unless @conns.has_key?(key)
|
|
80
|
+
@conns[key] = Connection.new(uri)
|
|
81
|
+
# c = @conns[key]
|
|
82
|
+
# ObjectSpace.define_finalizer(c,proc {
|
|
83
|
+
# p "Quit and Close #{uri}"
|
|
84
|
+
# if c and !c.closed?
|
|
85
|
+
# c.quit
|
|
86
|
+
# c.close
|
|
87
|
+
# end
|
|
88
|
+
# })
|
|
89
|
+
@count[key] = 0
|
|
90
|
+
end
|
|
91
|
+
@count[key] += 1
|
|
92
|
+
@conns[key]
|
|
93
|
+
end
|
|
94
|
+
def close(uri)
|
|
95
|
+
key = urikey(uri)
|
|
96
|
+
@count[key] -= 1
|
|
97
|
+
#p "Closed #{uri} count=#{@count[key]}"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
data/lib/rio/ftp/dir.rb
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
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
|
+
require 'net/ftp'
|
|
37
|
+
require 'uri'
|
|
38
|
+
require 'rio/fs/native'
|
|
39
|
+
require 'rio/ftp/conncache'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module FTP
|
|
43
|
+
module Dir
|
|
44
|
+
class Stream
|
|
45
|
+
attr_reader :uri,:netftp,:remote_root
|
|
46
|
+
def initialize(uri)
|
|
47
|
+
@uri = uri.clone
|
|
48
|
+
@conn = ConnCache.instance.connect(uri)
|
|
49
|
+
@remote_root = @conn.remote_root
|
|
50
|
+
@remote_root = '' if @remote_root == '/'
|
|
51
|
+
@names = nil
|
|
52
|
+
@entidx = 0
|
|
53
|
+
end
|
|
54
|
+
def url_root()
|
|
55
|
+
root_uri = @uri.clone
|
|
56
|
+
root_uri.path = ''
|
|
57
|
+
root_uri.to_s
|
|
58
|
+
end
|
|
59
|
+
def close()
|
|
60
|
+
ConnCache.instance.close(uri)
|
|
61
|
+
end
|
|
62
|
+
def remote_path()
|
|
63
|
+
self.remote_root+@uri.path
|
|
64
|
+
end
|
|
65
|
+
def names()
|
|
66
|
+
@names ||= begin
|
|
67
|
+
@conn.nlst(remote_path())
|
|
68
|
+
rescue ::Net::FTPPermError
|
|
69
|
+
[]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
def entpath(ent)
|
|
73
|
+
ent.sub(/^#{remote_path}/,'')
|
|
74
|
+
end
|
|
75
|
+
def read()
|
|
76
|
+
name = names[@entidx]
|
|
77
|
+
if name
|
|
78
|
+
rtn = entpath(name)
|
|
79
|
+
@entidx +=1
|
|
80
|
+
rtn
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
def each(&block)
|
|
84
|
+
p "Hello Mr. Phelps"
|
|
85
|
+
names.each { |ent|
|
|
86
|
+
@entidx += 1
|
|
87
|
+
yield entpath(ent)
|
|
88
|
+
}
|
|
89
|
+
self
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
data/lib/rio/ftp/fs.rb
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
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
|
+
require 'net/ftp'
|
|
37
|
+
require 'uri'
|
|
38
|
+
require 'rio/fs/native'
|
|
39
|
+
require 'rio/ftp/conncache'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module FTP
|
|
43
|
+
class FS
|
|
44
|
+
attr_reader :uri
|
|
45
|
+
def initialize(uri)
|
|
46
|
+
@uri = uri.clone
|
|
47
|
+
@file = ::File
|
|
48
|
+
@conn = nil
|
|
49
|
+
end
|
|
50
|
+
def self.create(*args)
|
|
51
|
+
new(*args)
|
|
52
|
+
end
|
|
53
|
+
def remote_root
|
|
54
|
+
conn.remote_root
|
|
55
|
+
end
|
|
56
|
+
def conn
|
|
57
|
+
@conn ||= ConnCache.instance.connect(@uri)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def root()
|
|
63
|
+
uri = @uri.clone
|
|
64
|
+
uri.path = '/'
|
|
65
|
+
uri.to_s
|
|
66
|
+
end
|
|
67
|
+
include RIO::FS::Str
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def pwd() conn.pwd end
|
|
71
|
+
def getwd()
|
|
72
|
+
self.pwd
|
|
73
|
+
end
|
|
74
|
+
def cwd()
|
|
75
|
+
remote_wd = self.pwd
|
|
76
|
+
remote_rel = remote_wd.sub(/^#{self.remote_root}/,'')
|
|
77
|
+
wduri = uri.clone
|
|
78
|
+
wduri.path = remote_rel
|
|
79
|
+
wduri.to_s
|
|
80
|
+
end
|
|
81
|
+
def remote_path(url)
|
|
82
|
+
self.remote_root+RIO::RL.url2fs(URI(url).path)
|
|
83
|
+
end
|
|
84
|
+
def chdir(url,&block)
|
|
85
|
+
if block_given?
|
|
86
|
+
wd = conn.pwd
|
|
87
|
+
conn.chdir(remote_path(url))
|
|
88
|
+
begin
|
|
89
|
+
rtn = yield remote_path(url)
|
|
90
|
+
ensure
|
|
91
|
+
conn.chdir(wd)
|
|
92
|
+
end
|
|
93
|
+
return rtn
|
|
94
|
+
else
|
|
95
|
+
conn.chdir(remote_path(url))
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
def mkdir(url)
|
|
99
|
+
conn.mkdir(remote_path(url))
|
|
100
|
+
end
|
|
101
|
+
def mv(src_url,dst_url)
|
|
102
|
+
conn.rename(remote_path(src_url),remote_path(dst_url))
|
|
103
|
+
end
|
|
104
|
+
def size(url)
|
|
105
|
+
conn.size(remote_path(url))
|
|
106
|
+
end
|
|
107
|
+
def zero?(url)
|
|
108
|
+
size(url) == 0
|
|
109
|
+
end
|
|
110
|
+
def mtime(url)
|
|
111
|
+
conn.mtime(remote_path(url))
|
|
112
|
+
end
|
|
113
|
+
def rmdir(url)
|
|
114
|
+
conn.rmdir(remote_path(url))
|
|
115
|
+
end
|
|
116
|
+
def rm(url)
|
|
117
|
+
conn.delete(remote_path(url))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def get_ftype(url)
|
|
121
|
+
pth = remote_path(url)
|
|
122
|
+
#p url,pth
|
|
123
|
+
ftype = nil
|
|
124
|
+
begin
|
|
125
|
+
conn.mdtm(pth)
|
|
126
|
+
ftype = 'file'
|
|
127
|
+
rescue Net::FTPPermError
|
|
128
|
+
wd = conn.pwd
|
|
129
|
+
begin
|
|
130
|
+
conn.chdir(pth)
|
|
131
|
+
ftype = 'dir'
|
|
132
|
+
rescue Net::FTPPermError
|
|
133
|
+
ftype = 'nada'
|
|
134
|
+
ensure
|
|
135
|
+
conn.chdir(wd)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
ftype
|
|
139
|
+
end
|
|
140
|
+
def file?(url)
|
|
141
|
+
get_ftype(url) == 'file'
|
|
142
|
+
end
|
|
143
|
+
def directory?(url)
|
|
144
|
+
get_ftype(url) == 'dir'
|
|
145
|
+
end
|
|
146
|
+
def exist?(url)
|
|
147
|
+
get_ftype(url) != 'nada'
|
|
148
|
+
end
|
|
149
|
+
def symlink?(url)
|
|
150
|
+
false
|
|
151
|
+
end
|
|
152
|
+
def mkpath(url)
|
|
153
|
+
tpath = rio(url)
|
|
154
|
+
tmprio = tpath.root
|
|
155
|
+
pathparts = tpath.path.split('/')[1..-1]
|
|
156
|
+
pathparts.each do |part|
|
|
157
|
+
tmprio.join!(part)
|
|
158
|
+
tmprio.mkdir
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
def rmtree(url)
|
|
162
|
+
ario = rio(url)
|
|
163
|
+
_rment(ario)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
private
|
|
167
|
+
|
|
168
|
+
def _rment(ario)
|
|
169
|
+
if ario.file?
|
|
170
|
+
ario.rm
|
|
171
|
+
else
|
|
172
|
+
ario.each do |ent|
|
|
173
|
+
_rment(ent)
|
|
174
|
+
end
|
|
175
|
+
ario.rmdir
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|