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/uri/file.rb
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
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
|
+
#
|
|
38
|
+
# = uri/file.rb
|
|
39
|
+
#
|
|
40
|
+
# Author:: Akira Yamada <kit_kleckner@yahoo.com>
|
|
41
|
+
# License:: You can redistribute it and/or modify it under the same term as Ruby.
|
|
42
|
+
#
|
|
43
|
+
|
|
44
|
+
require 'uri/generic'
|
|
45
|
+
|
|
46
|
+
module URI #:nodoc: all
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# RFC1738 section 3.10.
|
|
51
|
+
#
|
|
52
|
+
=begin
|
|
53
|
+
RFC 1738 Uniform Resource Locators (URL) December 1994
|
|
54
|
+
|
|
55
|
+
3.10 FILES
|
|
56
|
+
|
|
57
|
+
The file URL scheme is used to designate files accessible on a
|
|
58
|
+
particular host computer. This scheme, unlike most other URL schemes,
|
|
59
|
+
does not designate a resource that is universally accessible over the
|
|
60
|
+
Internet.
|
|
61
|
+
|
|
62
|
+
A file URL takes the form:
|
|
63
|
+
|
|
64
|
+
file://<host>/<path>
|
|
65
|
+
|
|
66
|
+
where <host> is the fully qualified domain name of the system on
|
|
67
|
+
which the <path> is accessible, and <path> is a hierarchical
|
|
68
|
+
directory path of the form <directory>/<directory>/.../<name>.
|
|
69
|
+
|
|
70
|
+
For example, a VMS file
|
|
71
|
+
|
|
72
|
+
DISK$USER:[MY.NOTES]NOTE123456.TXT
|
|
73
|
+
|
|
74
|
+
might become
|
|
75
|
+
|
|
76
|
+
<URL:file://vms.host.edu/disk$user/my/notes/note12345.txt>
|
|
77
|
+
|
|
78
|
+
As a special case, <host> can be the string "localhost" or the empty
|
|
79
|
+
string; this is interpreted as `the machine from which the URL is
|
|
80
|
+
being interpreted'.
|
|
81
|
+
|
|
82
|
+
The file URL scheme is unusual in that it does not specify an
|
|
83
|
+
Internet protocol or access method for such files; as such, its
|
|
84
|
+
utility in network protocols between hosts is limited.
|
|
85
|
+
=end
|
|
86
|
+
|
|
87
|
+
module REGEXP
|
|
88
|
+
module PATTERN
|
|
89
|
+
DRIVE_SPEC = "[A-Za-z]:"
|
|
90
|
+
FILE_ESCAPED = ESCAPED
|
|
91
|
+
FILE_UNRESERVED = "-_.!~*'()#{ALNUM}"
|
|
92
|
+
FILE_PCHAR = "(?:[#{FILE_UNRESERVED}:@?&=+$,]|#{FILE_ESCAPED})"
|
|
93
|
+
|
|
94
|
+
# pchar = unreserved | escaped |
|
|
95
|
+
# ":" | "@" | "&" | "=" | "+" | "$" | ","
|
|
96
|
+
PCHAR = "(?:[#{UNRESERVED}:@&=+$,]|#{ESCAPED})"
|
|
97
|
+
# param = *pchar
|
|
98
|
+
PARAM = "#{PCHAR}*"
|
|
99
|
+
|
|
100
|
+
FILE_SEGMENT = "#{FILE_PCHAR}*(?:;#{PARAM})*"
|
|
101
|
+
FILE_PATH_SEGMENTS = "#{FILE_SEGMENT}(?:/#{FILE_SEGMENT})*"
|
|
102
|
+
FILE_ABS_PATH = "(?:/#{DRIVE_SPEC})?/#{FILE_PATH_SEGMENTS}"
|
|
103
|
+
|
|
104
|
+
FILE_REL_SEGMENT = "(?:[#{FILE_UNRESERVED};@?&=+$,]|#{FILE_ESCAPED})+"
|
|
105
|
+
FILE_REL_PATH = "#{FILE_REL_SEGMENT}(?:#{FILE_ABS_PATH})?"
|
|
106
|
+
|
|
107
|
+
#FILE_ABS_PATH = "(?:/#{DRIVE_SPEC})?/#{FILE_PATH_SEGMENTS}(?:\\?#{QUERY})?"
|
|
108
|
+
end
|
|
109
|
+
EMPTYHOST = Regexp.new("^$", false).freeze #"
|
|
110
|
+
FILE_ABS_PATH = Regexp.new("^#{PATTERN::FILE_ABS_PATH}$", false).freeze
|
|
111
|
+
end # module REGEXP
|
|
112
|
+
|
|
113
|
+
class FILE < Generic
|
|
114
|
+
#FILE_ABS_PATH = REGEXP::FILE_ABS_PATH
|
|
115
|
+
COMPONENT = [
|
|
116
|
+
:scheme,
|
|
117
|
+
:host,
|
|
118
|
+
:path,
|
|
119
|
+
].freeze
|
|
120
|
+
|
|
121
|
+
def check_host(v)
|
|
122
|
+
return true if v && EMPTYHOST =~ v
|
|
123
|
+
super
|
|
124
|
+
end
|
|
125
|
+
private :check_host
|
|
126
|
+
|
|
127
|
+
def check_path(v)
|
|
128
|
+
# raise if both hier and opaque are not nil, because:
|
|
129
|
+
# absoluteURI = scheme ":" ( hier_part | opaque_part )
|
|
130
|
+
# hier_part = ( net_path | abs_path ) [ "?" query ]
|
|
131
|
+
#p "URI::FILE self=#{self} v=#{v}"
|
|
132
|
+
if v && @opaque
|
|
133
|
+
raise InvalidURIError,
|
|
134
|
+
"path conflicts with opaque"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
if @scheme
|
|
138
|
+
if v && v != '' && FILE_ABS_PATH !~ v
|
|
139
|
+
raise InvalidComponentError,
|
|
140
|
+
"bad component(expected absolute path component): #{v}"
|
|
141
|
+
end
|
|
142
|
+
else
|
|
143
|
+
if v && v != '' && FILE_ABS_PATH !~ v && FILE_REL_PATH !~ v
|
|
144
|
+
raise InvalidComponentError,
|
|
145
|
+
"bad component(expected relative path component): #{v}"
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
return true
|
|
150
|
+
end
|
|
151
|
+
private :check_path
|
|
152
|
+
|
|
153
|
+
def path=(v)
|
|
154
|
+
check_path(v)
|
|
155
|
+
set_path(v)
|
|
156
|
+
v
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def normalize!
|
|
160
|
+
super
|
|
161
|
+
if host && host == 'localhost'
|
|
162
|
+
set_host('')
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def file(*args)
|
|
167
|
+
pth = self.path(*args)
|
|
168
|
+
pth.chop! if pth[-1,1] == '/' && pth != '/'
|
|
169
|
+
return pth
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#
|
|
173
|
+
# == Description
|
|
174
|
+
#
|
|
175
|
+
# Create a new URI::FILE object from components of URI::FILE with
|
|
176
|
+
# check. It is scheme, userinfo, host, port, path, query and
|
|
177
|
+
# fragment. It provided by an Array of a Hash.
|
|
178
|
+
#
|
|
179
|
+
def self.build(args)
|
|
180
|
+
#p "In build: "+args.inspect
|
|
181
|
+
tmp = Util::make_components_hash(self, args)
|
|
182
|
+
return super(tmp)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
#
|
|
186
|
+
# == Description
|
|
187
|
+
#
|
|
188
|
+
# Create a new URI::FILE object from ``generic'' components with no
|
|
189
|
+
# check.
|
|
190
|
+
#
|
|
191
|
+
def initialize(*arg)
|
|
192
|
+
super(*arg)
|
|
193
|
+
self.host = '' if self.host.nil?
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
@@schemes['FILE'] = FILE
|
|
198
|
+
end
|
data/lib/rio/util.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
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 Util #:nodoc: all
|
|
39
|
+
def build_sym_hash(syms)
|
|
40
|
+
result = {}
|
|
41
|
+
syms.each do |sym|
|
|
42
|
+
result[sym.to_s] = 1
|
|
43
|
+
end
|
|
44
|
+
result
|
|
45
|
+
end
|
|
46
|
+
module_function :build_sym_hash
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/rio/version.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
|
|
38
|
+
module RIO
|
|
39
|
+
# :stopdoc:
|
|
40
|
+
module Version #:nodoc: all
|
|
41
|
+
VERSION = '0.4.3'
|
|
42
|
+
|
|
43
|
+
N = VERSION.split('.').freeze
|
|
44
|
+
MAJOR = N[0].freeze
|
|
45
|
+
MINOR = N[1].freeze
|
|
46
|
+
TEENY = N[2].freeze
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
VERSION = Version::VERSION
|
|
50
|
+
# :startdoc:
|
|
51
|
+
end
|
data/lib/rio.rb
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
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/version'
|
|
38
|
+
require 'rio/base'
|
|
39
|
+
require 'rio/def'
|
|
40
|
+
require 'rio/exception'
|
|
41
|
+
|
|
42
|
+
require 'forwardable'
|
|
43
|
+
|
|
44
|
+
$trace_states = false
|
|
45
|
+
|
|
46
|
+
require 'rio/kernel'
|
|
47
|
+
require 'rio/constructor'
|
|
48
|
+
require 'rio/construct'
|
|
49
|
+
|
|
50
|
+
require 'rio/const'
|
|
51
|
+
|
|
52
|
+
module RIO
|
|
53
|
+
class Rio #:doc:
|
|
54
|
+
require 'rio/local'
|
|
55
|
+
include Local
|
|
56
|
+
require 'rio/factory'
|
|
57
|
+
protected
|
|
58
|
+
|
|
59
|
+
attr_reader :state
|
|
60
|
+
|
|
61
|
+
public
|
|
62
|
+
|
|
63
|
+
# See RIO.rio
|
|
64
|
+
def initialize(*args)
|
|
65
|
+
@state = Factory.instance.create_state(*args)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def initialize_copy(*args)
|
|
69
|
+
#p callstr("initialize_copy",args[0].inspect)
|
|
70
|
+
super
|
|
71
|
+
@state = Factory.instance.clone_state(@state)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# See RIO.rio
|
|
75
|
+
def self.rio(*args,&block) # :yields: self
|
|
76
|
+
ario = new(*args)
|
|
77
|
+
if block_given?
|
|
78
|
+
old_closeoncopy = ario.closeoncopy?
|
|
79
|
+
begin
|
|
80
|
+
yield ario.nocloseoncopy
|
|
81
|
+
ensure
|
|
82
|
+
ario.reset.closeoncopy(old_closeoncopy)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
ario
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Returns the string representation of a Rio that is used by Ruby's libraries.
|
|
89
|
+
# For Rios that exist on the file system this is Rio#fspath.
|
|
90
|
+
# For FTP and HTTP Rios, this is the URL.
|
|
91
|
+
#
|
|
92
|
+
# rio('/a/b/c').to_s ==> "/a/b/c"
|
|
93
|
+
# rio('b/c').to_s ==> "b/c"
|
|
94
|
+
# rio('C:/b/c').to_s ==> "C:/b/c"
|
|
95
|
+
# rio('//ahost/a/b').to_s ==> "//ahost/a/b"
|
|
96
|
+
# rio('file://ahost/a/b').to_s ==> "//ahost/a/b"
|
|
97
|
+
# rio('file:///a/b').to_s ==> "/a/b"
|
|
98
|
+
# rio('file://localhost/a/b').to_s ==> "/a/b"
|
|
99
|
+
# rio('http://ahost/index.html').to_s ==> "http://ahost/index.html"
|
|
100
|
+
#
|
|
101
|
+
def to_s() target.to_s end
|
|
102
|
+
|
|
103
|
+
alias :to_str :to_s
|
|
104
|
+
def dup
|
|
105
|
+
#p callstr('dup',self)
|
|
106
|
+
self.class.new(self.to_rl)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def method_missing(sym,*args,&block) #:nodoc:
|
|
110
|
+
#p callstr('method_missing',sym,*args)
|
|
111
|
+
|
|
112
|
+
result = target.__send__(sym,*args,&block)
|
|
113
|
+
return result unless result.kind_of? State::Base and result.equal? target
|
|
114
|
+
|
|
115
|
+
self
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def inspect()
|
|
119
|
+
cl = self.class.to_s[5..-1]
|
|
120
|
+
st = state.target.class.to_s[5..-1]
|
|
121
|
+
sprintf('#<%s:0x%x:"%s" (%s)>',cl,self.object_id,self.to_url,st)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
protected
|
|
126
|
+
|
|
127
|
+
def target() #:nodoc:
|
|
128
|
+
@state.target
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def callstr(func,*args) #:nodoc:
|
|
132
|
+
self.class.to_s+'.'+func.to_s+'('+args.join(',')+')'
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end # class Rio
|
|
136
|
+
end # module RIO
|
|
137
|
+
module RIO
|
|
138
|
+
class Rio
|
|
139
|
+
USE_IF = true #:nodoc:
|
|
140
|
+
|
|
141
|
+
if USE_IF
|
|
142
|
+
include Enumerable
|
|
143
|
+
require 'rio/if'
|
|
144
|
+
include RIO::IF::Grande
|
|
145
|
+
require 'rio/ext/if'
|
|
146
|
+
include RIO::IF::Ext
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
#require 'rio/ext/zipfile.rb'
|
|
152
|
+
|
|
153
|
+
if $0 == __FILE__
|
|
154
|
+
eval DATA.read, nil, $0, __LINE__+4
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
__END__
|
|
158
|
+
|
|
159
|
+
puts
|
|
160
|
+
puts("Run the tests that came with the distribution")
|
|
161
|
+
puts("From the distribution directory use 'test/runtests.rb'")
|
|
162
|
+
puts
|