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
data/lib/rio/rl/chmap.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
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 'uri'
|
|
38
|
+
require 'rio/local'
|
|
39
|
+
require 'rio/uri/file'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module RL
|
|
43
|
+
CHMAP = {
|
|
44
|
+
'_' => 'sysio',
|
|
45
|
+
'-' => 'stdio',
|
|
46
|
+
'=' => 'stderr',
|
|
47
|
+
'"' => 'strio',
|
|
48
|
+
'?' => 'temp',
|
|
49
|
+
'[' => 'aryio',
|
|
50
|
+
'`' => 'cmdio',
|
|
51
|
+
'|' => 'cmdpipe',
|
|
52
|
+
'#' => 'fd',
|
|
53
|
+
|
|
54
|
+
?_ => 'sysio',
|
|
55
|
+
?- => 'stdio',
|
|
56
|
+
?= => 'stderr',
|
|
57
|
+
?" => 'strio',
|
|
58
|
+
?? => 'temp',
|
|
59
|
+
?[ => 'aryio',
|
|
60
|
+
?` => 'cmdio',
|
|
61
|
+
?| => 'cmdpipe',
|
|
62
|
+
?# => 'fd',
|
|
63
|
+
?z => 'zipfile',
|
|
64
|
+
}.freeze
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
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 'uri'
|
|
38
|
+
require 'rio/local'
|
|
39
|
+
require 'rio/uri/file'
|
|
40
|
+
require 'rio/rl/chmap'
|
|
41
|
+
|
|
42
|
+
module RIO
|
|
43
|
+
module RL #:nodoc: all
|
|
44
|
+
PESCAPE = Regexp.new("[^-_.!~*'()a-zA-Z0-9;?:@&=+$,]",false).freeze
|
|
45
|
+
ESCAPE = Regexp.new("[^-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]",false).freeze
|
|
46
|
+
def escape(pth,esc=ESCAPE)
|
|
47
|
+
::URI.escape(pth,esc)
|
|
48
|
+
end
|
|
49
|
+
def unescape(pth)
|
|
50
|
+
::URI.unescape(pth)
|
|
51
|
+
end
|
|
52
|
+
def fs2urls(*args)
|
|
53
|
+
args.map{ |pth| fs2url(pth) }
|
|
54
|
+
end
|
|
55
|
+
def fs2url(pth, esc=ESCAPE)
|
|
56
|
+
#pth.sub!(/^[a-zA-Z]:/,'')
|
|
57
|
+
pth = URI.escape(pth,esc)
|
|
58
|
+
pth = '/' + pth if pth =~ /^[a-zA-Z]:/
|
|
59
|
+
pth
|
|
60
|
+
# (Local::SEPARATOR == '/' ? pth : pth.gsub(Local::SEPARATOR,%r|/|))
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def url2fs(pth)
|
|
64
|
+
# pth = pth.chop if pth.length > 1 and pth[-1] == ?/ cwd = RIO::RL.fs2url(::Dir.getwd)
|
|
65
|
+
|
|
66
|
+
#pth = pth.chop if pth != '/' and pth[-1] == ?/
|
|
67
|
+
pth = ::URI.unescape(pth)
|
|
68
|
+
if pth =~ %r#^/[a-zA-Z]:#
|
|
69
|
+
pth = pth[1..-1]
|
|
70
|
+
end
|
|
71
|
+
pth
|
|
72
|
+
# (Local::SEPARATOR == '/' ? pth : pth.gsub(%r|/|,Local::SEPARATOR))
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def getwd()
|
|
76
|
+
#::URI::FILE.build({:path => fs2url(::Dir.getwd)+'/'})
|
|
77
|
+
::URI::FILE.build({:path => fs2url(::Dir.getwd)})
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
module_function :url2fs,:fs2url,:fs2urls,:getwd,:escape,:unescape
|
|
81
|
+
end
|
|
82
|
+
end
|
data/lib/rio/rl/ioi.rb
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
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/base'
|
|
38
|
+
require 'rio/ioh'
|
|
39
|
+
require 'rio/fs/stream'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module RL
|
|
43
|
+
class IOIBase < Base
|
|
44
|
+
RESET_STATE = 'Stream::Open'
|
|
45
|
+
def openfs_()
|
|
46
|
+
RIO::FS::Stream.create()
|
|
47
|
+
end
|
|
48
|
+
def scheme() self.class.const_get(:RIOSCHEME) end
|
|
49
|
+
def opaque() '' end
|
|
50
|
+
def self.splitrl(s) nil end
|
|
51
|
+
#def path() self.class.const_get(:RIOPATH) end
|
|
52
|
+
def to_s() url() end
|
|
53
|
+
def open(ios)
|
|
54
|
+
IOH::Stream.new(ios)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
module RL
|
|
59
|
+
class SysIOBase < IOIBase
|
|
60
|
+
attr_reader :ios
|
|
61
|
+
attr_writer :ios
|
|
62
|
+
protected(:ios=)
|
|
63
|
+
def initialize(ios=nil)
|
|
64
|
+
@ios = ios
|
|
65
|
+
super
|
|
66
|
+
end
|
|
67
|
+
def initialize_copy(cp)
|
|
68
|
+
super
|
|
69
|
+
@ios = cp.ios.clone unless cp.ios.nil?
|
|
70
|
+
end
|
|
71
|
+
def open(ios=nil)
|
|
72
|
+
@ios = ios unless ios.nil?
|
|
73
|
+
super(@ios)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/rio/rl/path.rb
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
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/uri'
|
|
38
|
+
require 'rio/rl/withpath'
|
|
39
|
+
require 'rio/rl/pathmethods'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module RL
|
|
43
|
+
class PathBase < URIBase
|
|
44
|
+
RESET_STATE = 'Path::Reset'
|
|
45
|
+
|
|
46
|
+
def arg0_info_(arg0,*args)
|
|
47
|
+
#p "arg0_info_(#{arg0.inspect},#{args.inspect})"
|
|
48
|
+
#p callstr('init_from_args_',arg0.inspect,args)
|
|
49
|
+
vuri,vbase,vfs = nil,nil,nil
|
|
50
|
+
case arg0
|
|
51
|
+
when RIO::Rio, URIBase, ::URI
|
|
52
|
+
return super
|
|
53
|
+
when ::String
|
|
54
|
+
vuri = uri_from_string_(RL.fs2url(arg0)) || ::URI.parse(RL.fs2url(arg0))
|
|
55
|
+
else
|
|
56
|
+
raise(ArgumentError,"'#{arg0}'[#{arg0.class}] can not be used to create a Rio")
|
|
57
|
+
end
|
|
58
|
+
#puts "path.rb arg0_info_: vuri=#{vuri}"
|
|
59
|
+
[vuri,vbase,vfs]
|
|
60
|
+
end
|
|
61
|
+
def build_arg0_(path_str)
|
|
62
|
+
RL.url2fs(path_str)
|
|
63
|
+
end
|
|
64
|
+
def scheme()
|
|
65
|
+
uri.scheme || 'path'
|
|
66
|
+
end
|
|
67
|
+
def url
|
|
68
|
+
str = uri.to_s
|
|
69
|
+
str = scheme + ':' +str unless uri.scheme
|
|
70
|
+
str
|
|
71
|
+
end
|
|
72
|
+
def use_host?
|
|
73
|
+
hst = uri.host
|
|
74
|
+
!(hst.nil? || hst.empty? || hst == 'localhost')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def join(*args)
|
|
78
|
+
return self if args.empty?
|
|
79
|
+
join_(args.map{ |arg| RL.fs2url(arg.to_s)})
|
|
80
|
+
end
|
|
81
|
+
def fspath()
|
|
82
|
+
if use_host?
|
|
83
|
+
'//' + uri.host + RL.url2fs(self.urlpath)
|
|
84
|
+
else
|
|
85
|
+
RL.url2fs(self.urlpath)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
# def fspath=(pt)
|
|
89
|
+
# if pt =~ %r|^//(#{HOST})(/.*)?$|
|
|
90
|
+
# @host = $1
|
|
91
|
+
# @fspath = $2 || '/'
|
|
92
|
+
# else
|
|
93
|
+
# @fspath = pt
|
|
94
|
+
# end
|
|
95
|
+
# end
|
|
96
|
+
def to_s()
|
|
97
|
+
self.fspath
|
|
98
|
+
end
|
|
99
|
+
def self.splitrl(s)
|
|
100
|
+
sch,opq,whole = split_riorl(s)
|
|
101
|
+
#p sch,opq,whole
|
|
102
|
+
case sch
|
|
103
|
+
when 'file' then [whole]
|
|
104
|
+
else [opq]
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
__END__
|
|
@@ -0,0 +1,116 @@
|
|
|
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/uri'
|
|
38
|
+
module RIO
|
|
39
|
+
module RL
|
|
40
|
+
module PathMethods
|
|
41
|
+
def urlroot()
|
|
42
|
+
return nil unless absolute?
|
|
43
|
+
cp = self.clone
|
|
44
|
+
cp.urlpath = self.pathroot
|
|
45
|
+
cp.url
|
|
46
|
+
end
|
|
47
|
+
def pathdepth()
|
|
48
|
+
pth = self.path_no_slash
|
|
49
|
+
(pth == '/' ? 0 : pth.count('/'))
|
|
50
|
+
end
|
|
51
|
+
def _parts()
|
|
52
|
+
pr = self.pathroot
|
|
53
|
+
ur = self.urlroot.sub(/#{pr}$/,'')
|
|
54
|
+
up = self.urlpath.sub(/^#{pr}/,'')
|
|
55
|
+
|
|
56
|
+
[ur,pr,up]
|
|
57
|
+
end
|
|
58
|
+
def split()
|
|
59
|
+
if absolute?
|
|
60
|
+
parts = self._parts
|
|
61
|
+
sparts = []
|
|
62
|
+
sparts << parts[0] + parts[1]
|
|
63
|
+
sparts += parts[2].split('/')
|
|
64
|
+
else
|
|
65
|
+
sparts = self.urlpath.split('/')
|
|
66
|
+
end
|
|
67
|
+
require 'rio/to_rio'
|
|
68
|
+
rlparts = sparts.map { |str| self.class.new(str) }
|
|
69
|
+
(1...sparts.length).each { |i|
|
|
70
|
+
rlparts[i].base = rlparts[i-1].abs.url + '/'
|
|
71
|
+
}
|
|
72
|
+
rlparts
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def join(*args)
|
|
76
|
+
return self if args.empty?
|
|
77
|
+
sa = args.map { |arg| ::URI.escape(arg.to_s,ESCAPE) }
|
|
78
|
+
sa.unshift(self.urlpath) unless self.urlpath.empty?
|
|
79
|
+
self.urlpath = sa.join('/').squeeze('/')
|
|
80
|
+
self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def parse_url(str)
|
|
84
|
+
::URI.parse(::URI.escape(str,ESCAPE))
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def route_from(other)
|
|
88
|
+
self.class.new(uri.route_from(other.uri),{:base => other.url})
|
|
89
|
+
end
|
|
90
|
+
def route_to(other)
|
|
91
|
+
self.class.new(uri.route_to(other.uri),{:base => self.url})
|
|
92
|
+
end
|
|
93
|
+
def merge(other)
|
|
94
|
+
self.class.new(uri.merge(other.uri))
|
|
95
|
+
end
|
|
96
|
+
def calc_abs_uri_(path_str,base_str)
|
|
97
|
+
#p path_str,base_str
|
|
98
|
+
path = URI(path_str)
|
|
99
|
+
return path unless base_str
|
|
100
|
+
if path_str[0,1] != '/' and base_str[0,1] == '/'
|
|
101
|
+
abs_str = [base_str,path_str].join('/').squeeze('/')
|
|
102
|
+
return URI(abs_str)
|
|
103
|
+
end
|
|
104
|
+
base = URI(base_str)
|
|
105
|
+
abs = base.merge(path)
|
|
106
|
+
return abs
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def dirname()
|
|
110
|
+
::File.dirname(self.path_no_slash)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|