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,149 @@
|
|
|
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 'yaml'
|
|
38
|
+
require 'forwardable'
|
|
39
|
+
require 'delegate'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
module Ext
|
|
43
|
+
module YAML #:nodoc: all
|
|
44
|
+
module Tie
|
|
45
|
+
class Doc
|
|
46
|
+
extend Forwardable
|
|
47
|
+
def initialize(fn)
|
|
48
|
+
@filename = fn
|
|
49
|
+
@io = nil
|
|
50
|
+
@doc = nil
|
|
51
|
+
@root = nil
|
|
52
|
+
end
|
|
53
|
+
def open()
|
|
54
|
+
@io = ::File.new('database.yml',"r")
|
|
55
|
+
@doc = ::YAML.load(@io)
|
|
56
|
+
@root = RIO::Ext::YAML::Tie::Root.new(@doc)
|
|
57
|
+
self
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def close()
|
|
61
|
+
if @root.dirty?
|
|
62
|
+
@io.close
|
|
63
|
+
::File.open('database.yml',"w") do |ios|
|
|
64
|
+
::YAML.dump(@doc,ios)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def_instance_delegators(:@root,:inspect)
|
|
70
|
+
def method_missing(sym,*args)
|
|
71
|
+
@root.__send__(sym,*args)
|
|
72
|
+
end
|
|
73
|
+
def self.new_node(doc,cont)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
module RIO
|
|
81
|
+
module Ext
|
|
82
|
+
module YAML #:nodoc: all
|
|
83
|
+
module Tie
|
|
84
|
+
class Base
|
|
85
|
+
attr :doc,:cont
|
|
86
|
+
def initialize(doc,cont=nil)
|
|
87
|
+
@doc = doc
|
|
88
|
+
@cont = cont
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
class Root < Base
|
|
92
|
+
extend Forwardable
|
|
93
|
+
attr_accessor :dirty
|
|
94
|
+
def initialize(doc)
|
|
95
|
+
@doc = doc
|
|
96
|
+
@root = Tie::Hash.new(@doc,self)
|
|
97
|
+
@dirty = false
|
|
98
|
+
end
|
|
99
|
+
def dirty=(val)
|
|
100
|
+
@dirty = val
|
|
101
|
+
end
|
|
102
|
+
def dirty?()
|
|
103
|
+
@dirty
|
|
104
|
+
end
|
|
105
|
+
def_instance_delegators(:@root,:inspect)
|
|
106
|
+
def method_missing(sym,*args)
|
|
107
|
+
@root.__send__(sym,*args)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
module RIO
|
|
116
|
+
module Ext
|
|
117
|
+
module YAML #:nodoc: all
|
|
118
|
+
module Tie
|
|
119
|
+
module Node
|
|
120
|
+
def dirty=(val)
|
|
121
|
+
cont.dirty=(val)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
class Hash < DelegateClass(::Hash)
|
|
125
|
+
include Tie::Node
|
|
126
|
+
attr_reader :doc
|
|
127
|
+
attr_reader :cont
|
|
128
|
+
def initialize(doc,cont=nil)
|
|
129
|
+
@doc = doc
|
|
130
|
+
@cont = cont
|
|
131
|
+
super(@doc)
|
|
132
|
+
end
|
|
133
|
+
def [](key)
|
|
134
|
+
val = super
|
|
135
|
+
case val
|
|
136
|
+
when ::Hash then Tie::Hash.new(val,self)
|
|
137
|
+
else val
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
def []=(key,val)
|
|
141
|
+
self.dirty = true
|
|
142
|
+
super
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
__END__
|
data/lib/rio/ext/yaml.rb
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
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 'yaml'
|
|
38
|
+
|
|
39
|
+
module RIO
|
|
40
|
+
module Ext
|
|
41
|
+
module YAML #:nodoc: all
|
|
42
|
+
module Cx
|
|
43
|
+
def yaml(&block)
|
|
44
|
+
cxx('yaml',true,&block)
|
|
45
|
+
end
|
|
46
|
+
def yamldoc(&block)
|
|
47
|
+
#@yamldoc = YAML::Tie::Doc.new(self.fspath).open
|
|
48
|
+
become('Ext::YAML::Doc::Existing')
|
|
49
|
+
end
|
|
50
|
+
def yaml?() cxx?('yaml') end
|
|
51
|
+
def yaml_(fs=',',rs=nil)
|
|
52
|
+
cxx_('yaml',true)
|
|
53
|
+
end
|
|
54
|
+
protected :yaml_
|
|
55
|
+
def objects(*args) records(*args) end
|
|
56
|
+
def documents(*args) rows(*args) end
|
|
57
|
+
def object(*args) record(*args) end
|
|
58
|
+
def document(*args) row(*args) end
|
|
59
|
+
def skipobjects(*args) skiprecords(*args) end
|
|
60
|
+
def skipdocuments(*args) skiprows(*args) end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
module YAML
|
|
64
|
+
module Input
|
|
65
|
+
|
|
66
|
+
def cpto_(arg)
|
|
67
|
+
#p callstr('cpto_',arg.inspect)
|
|
68
|
+
|
|
69
|
+
case arg
|
|
70
|
+
when ::Array,::String then super
|
|
71
|
+
when ::IO,::StringIO then cpto_io_(arg)
|
|
72
|
+
else super
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
def apto_(arg)
|
|
76
|
+
case arg
|
|
77
|
+
when ::Array,::String then super
|
|
78
|
+
when ::IO,::StringIO then cpto_io_(arg)
|
|
79
|
+
else super
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
def cpto_io_(ioarg)
|
|
83
|
+
recs = self.to_a
|
|
84
|
+
if recs.size == 1
|
|
85
|
+
YAML.dump(recs[0],ioarg)
|
|
86
|
+
else
|
|
87
|
+
YAML.dump(recs,ioarg)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
def cpto_string_(string)
|
|
91
|
+
string << ::YAML.dump_stream(self.contents)
|
|
92
|
+
end
|
|
93
|
+
def get_(arg=nil)
|
|
94
|
+
case cx['stream_itertype']
|
|
95
|
+
when 'lines' then super
|
|
96
|
+
when 'records' then ::YAML.load(self.ioh)
|
|
97
|
+
when 'rows' then ::YAML.dump(::YAML.load(self.ioh))
|
|
98
|
+
else ::YAML.load(self.ioh)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
def each_rec_(&block)
|
|
102
|
+
case cx['stream_itertype']
|
|
103
|
+
when 'lines' then super
|
|
104
|
+
when 'records' then ::YAML.load_documents(self.ioh,&block)
|
|
105
|
+
when 'rows' then ::YAML.load_documents(self.ioh) { |obj| yield obj.to_yaml }
|
|
106
|
+
else ::YAML.load_documents(self.ioh,&block)
|
|
107
|
+
end
|
|
108
|
+
self
|
|
109
|
+
end
|
|
110
|
+
def load()
|
|
111
|
+
getrec()
|
|
112
|
+
end
|
|
113
|
+
def getobj()
|
|
114
|
+
getrec()
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
module YAML
|
|
121
|
+
module Output
|
|
122
|
+
protected
|
|
123
|
+
|
|
124
|
+
def cpfrom_(arg)
|
|
125
|
+
#p "yaml#cpfrom_(#{arg})"
|
|
126
|
+
case arg
|
|
127
|
+
#when ::Array then cpfrom_array_(arg)
|
|
128
|
+
when Rio,::IO,::StringIO then super
|
|
129
|
+
else self.put_(arg)
|
|
130
|
+
end
|
|
131
|
+
self
|
|
132
|
+
end
|
|
133
|
+
# def cpfrom_array_(array)
|
|
134
|
+
# array.each { |el|
|
|
135
|
+
# self.put_(el)
|
|
136
|
+
# }
|
|
137
|
+
# self
|
|
138
|
+
# end
|
|
139
|
+
# def cpfrom_rio_(ario)
|
|
140
|
+
# p "yaml#cpfrom_rio_(#{ario})"
|
|
141
|
+
# ioh.puts(::YAML.dump_stream(*ario[]))
|
|
142
|
+
# self
|
|
143
|
+
# end
|
|
144
|
+
def put_(obj)
|
|
145
|
+
#p callstr('put_',obj)
|
|
146
|
+
ioh.puts(obj.to_yaml)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
public
|
|
150
|
+
|
|
151
|
+
def dump(obj)
|
|
152
|
+
putrec!(obj)
|
|
153
|
+
end
|
|
154
|
+
def putobj(obj)
|
|
155
|
+
putrec(obj)
|
|
156
|
+
end
|
|
157
|
+
def putobj!(obj)
|
|
158
|
+
putrec!(obj)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
__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
|
+
require 'rio/fs/base'
|
|
37
|
+
require 'zip/zip'
|
|
38
|
+
require 'zip/zipfilesystem'
|
|
39
|
+
require 'rio/scheme/path'
|
|
40
|
+
require 'rio/ext/zipfile/wrap'
|
|
41
|
+
|
|
42
|
+
module RIO
|
|
43
|
+
module ZipFile
|
|
44
|
+
module RootDir
|
|
45
|
+
class FS
|
|
46
|
+
attr_reader :dir
|
|
47
|
+
def initialize(zipfile)
|
|
48
|
+
@zipfile = zipfile
|
|
49
|
+
@dir = @zipfile.dir
|
|
50
|
+
@file = @zipfile.file
|
|
51
|
+
@test = @zipfile.file
|
|
52
|
+
#p "InFile: #{@file.class}"
|
|
53
|
+
end
|
|
54
|
+
def commit(&block)
|
|
55
|
+
yield if block_given?
|
|
56
|
+
@zipfile.commit
|
|
57
|
+
end
|
|
58
|
+
include RIO::FS::Str
|
|
59
|
+
include RIO::FS::Dir
|
|
60
|
+
include RIO::FS::Test
|
|
61
|
+
def mkdir(*args)
|
|
62
|
+
commit{super}
|
|
63
|
+
end
|
|
64
|
+
def rmdir(*args)
|
|
65
|
+
commit{@dir.rmdir(*args)}
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
module InFile
|
|
70
|
+
class FS
|
|
71
|
+
attr_reader :file,:dir
|
|
72
|
+
def initialize(zipfile)
|
|
73
|
+
@zipfile = zipfile
|
|
74
|
+
@file = RIO::ZipFile::Wrap::File.new(@zipfile.file)
|
|
75
|
+
@dir = RIO::ZipFile::Wrap::Dir.new(@zipfile.dir)
|
|
76
|
+
@test = @file
|
|
77
|
+
#p "InFile: #{@file.class}"
|
|
78
|
+
end
|
|
79
|
+
include RIO::FS::File
|
|
80
|
+
include RIO::FS::Dir
|
|
81
|
+
include RIO::FS::Test
|
|
82
|
+
include RIO::FS::Str
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
__END__
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class CentralDir < RIO::FS::Native
|
|
92
|
+
def initialize(zipfilepath)
|
|
93
|
+
@zipfilepath = zipfilepath
|
|
94
|
+
@zipfile = Zip::ZipFile.new(@zipfilepath)
|
|
95
|
+
super
|
|
96
|
+
end
|
|
97
|
+
def mkdir(path)
|
|
98
|
+
@zipfile.mkdir(path)
|
|
99
|
+
end
|
|
100
|
+
def rmdir(path)
|
|
101
|
+
@zipfile.remove(path)
|
|
102
|
+
end
|
|
103
|
+
def file()
|
|
104
|
+
self
|
|
105
|
+
end
|
|
106
|
+
def open(zipfilepath)
|
|
107
|
+
@zipfilepath = zipfilepath
|
|
108
|
+
@zipfile = Zip::ZipFile.new(@zipfilepath)
|
|
109
|
+
RIO::ZipFile::CentralDir.new(@zipfile)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,251 @@
|
|
|
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 'uri'
|
|
37
|
+
require 'rio/uri/file'
|
|
38
|
+
require 'rio/ext/zipfile/fs'
|
|
39
|
+
|
|
40
|
+
module RIO
|
|
41
|
+
module ZipFile #:nodoc: all
|
|
42
|
+
module RootDir
|
|
43
|
+
RESET_STATE = 'ZipFile::State::Reset'
|
|
44
|
+
#RESET_STATE = RIO::RL::PathBase::RESET_STATE
|
|
45
|
+
|
|
46
|
+
require 'rio/rl/base'
|
|
47
|
+
class RL < RIO::RL::Base
|
|
48
|
+
RIOSCHEME = 'zipfile'
|
|
49
|
+
RIOPATH = RIO::RL::CHMAP.invert[RIOSCHEME].to_s.freeze
|
|
50
|
+
attr_reader :zipfilepath,:infilepath
|
|
51
|
+
def initialize(zipfilepath,infilepath=nil)
|
|
52
|
+
@zipfilepath = zipfilepath
|
|
53
|
+
@uri = URI(@zipfilepath)
|
|
54
|
+
if infilepath
|
|
55
|
+
@infilepath = infilepath
|
|
56
|
+
@uri.query = @infilepath
|
|
57
|
+
end
|
|
58
|
+
@zipfile = ::Zip::ZipFile.new(@zipfilepath,::Zip::ZipFile::CREATE)
|
|
59
|
+
super()
|
|
60
|
+
end
|
|
61
|
+
def file_rl
|
|
62
|
+
RIO::File::RL.new(infilepath,{:fs => RIO::ZipFile::InFile::FS.new(@zipfile)})
|
|
63
|
+
end
|
|
64
|
+
def openfs_()
|
|
65
|
+
RIO::ZipFile::RootDir::FS.new(@zipfile)
|
|
66
|
+
end
|
|
67
|
+
def open()
|
|
68
|
+
IOH::Dir.new(ZipFile::Wrap::Stream::Root.new(@zipfile))
|
|
69
|
+
end
|
|
70
|
+
def close()
|
|
71
|
+
p "CLOSING ZIPFILE RL"
|
|
72
|
+
end
|
|
73
|
+
def path()
|
|
74
|
+
@infilepath
|
|
75
|
+
end
|
|
76
|
+
def fspath()
|
|
77
|
+
@infilepath
|
|
78
|
+
end
|
|
79
|
+
def base(*args)
|
|
80
|
+
#p "base: #{args.inspect}"
|
|
81
|
+
''
|
|
82
|
+
end
|
|
83
|
+
def path_no_slash() self.path.to_s.sub(/\/$/,'') end
|
|
84
|
+
#def path() nil end
|
|
85
|
+
def scheme() self.class.const_get(:RIOSCHEME) end
|
|
86
|
+
def opaque()
|
|
87
|
+
@uri.to_s
|
|
88
|
+
end
|
|
89
|
+
include RIO::RL::PathMethods
|
|
90
|
+
def urlpath()
|
|
91
|
+
return '' unless fspath
|
|
92
|
+
RIO::RL.fs2url(fspath)
|
|
93
|
+
end
|
|
94
|
+
def urlpath=(arg) @infilepath = RIO::RL.url2fs(arg) end
|
|
95
|
+
|
|
96
|
+
# USAGE EXAMPLES
|
|
97
|
+
# zroot = rio('f.zip').zipfile
|
|
98
|
+
#
|
|
99
|
+
# rio(zroot,'tdir').mkdir
|
|
100
|
+
# rio(zroot,'tdir').mkdir
|
|
101
|
+
# rio(zroot).each {}
|
|
102
|
+
# rio(:zipfile,'t.zip','tdir').mkdir
|
|
103
|
+
# rio('zipfile:t.zip','tdir').mkdir
|
|
104
|
+
# rio('zipfile:t.zip?tdir').mkdir
|
|
105
|
+
# rio(?z,'t.zip?tdir').mkdir
|
|
106
|
+
# rio(?z,'t.zip','tdir').mkdir
|
|
107
|
+
# rio('zipfile:file:///tmp/t.zip?tdir').mkdir
|
|
108
|
+
SPLIT_RE = %r|(.+)(?:\?(.+))?$|.freeze
|
|
109
|
+
def self.splitrl(s)
|
|
110
|
+
sub,opq,whole = split_riorl(s)
|
|
111
|
+
if opq.nil? or opq.empty?
|
|
112
|
+
[]
|
|
113
|
+
elsif bm = SPLIT_RE.match(opq)
|
|
114
|
+
zpath = bm[1] unless bm[1].nil? or bm[1].empty?
|
|
115
|
+
ipath = bm[2] unless bm[2].nil? or bm[2].empty?
|
|
116
|
+
[zpath,ipath]
|
|
117
|
+
else
|
|
118
|
+
[]
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
__END__
|
|
128
|
+
module Dir
|
|
129
|
+
require 'rio/rl/path'
|
|
130
|
+
RESET_STATE = RIO::RL::PathBase::RESET_STATE
|
|
131
|
+
require 'tmpdir'
|
|
132
|
+
class RL < RIO::RL::PathBase
|
|
133
|
+
RIOSCHEME = 'tempdir'
|
|
134
|
+
DFLT_PREFIX = Temp::RL::DFLT_PREFIX
|
|
135
|
+
DFLT_TMPDIR = Temp::RL::DFLT_TMPDIR
|
|
136
|
+
attr_reader :prefix,:tmpdir,:tmprl
|
|
137
|
+
def initialize(file_prefix=DFLT_PREFIX,temp_dir=DFLT_TMPDIR)
|
|
138
|
+
#puts "initialize(#{file_prefix.inspect},#{temp_dir.inspect})"
|
|
139
|
+
@prefix = file_prefix || DFLT_PREFIX
|
|
140
|
+
@tmpdir = temp_dir || DFLT_TMPDIR
|
|
141
|
+
require 'rio/tempdir'
|
|
142
|
+
@td = ::Tempdir.new( @prefix.to_s, @tmpdir.to_s)
|
|
143
|
+
super(@td.to_s)
|
|
144
|
+
end
|
|
145
|
+
def dir_rl()
|
|
146
|
+
RIO::Dir::RL.new(self.uri, {:fs => self.fs})
|
|
147
|
+
#self
|
|
148
|
+
end
|
|
149
|
+
SPLIT_RE = Temp::RL::SPLIT_RE
|
|
150
|
+
def self.splitrl(s)
|
|
151
|
+
Temp::RL.splitrl(s)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
module File
|
|
156
|
+
require 'rio/rl/path'
|
|
157
|
+
RESET_STATE = 'Temp::Stream::Open'
|
|
158
|
+
class RL < RIO::RL::PathBase
|
|
159
|
+
RIOSCHEME = 'tempfile'
|
|
160
|
+
DFLT_PREFIX = Temp::RL::DFLT_PREFIX
|
|
161
|
+
DFLT_TMPDIR = Temp::RL::DFLT_TMPDIR
|
|
162
|
+
attr_reader :prefix,:tmpdir,:tmprl
|
|
163
|
+
def initialize(file_prefix=DFLT_PREFIX,temp_dir=DFLT_TMPDIR)
|
|
164
|
+
#puts "initialize(#{file_prefix.inspect},#{temp_dir.inspect})"
|
|
165
|
+
@prefix = file_prefix || DFLT_PREFIX
|
|
166
|
+
@tmpdir = temp_dir || DFLT_TMPDIR
|
|
167
|
+
require 'tempfile'
|
|
168
|
+
@tf = ::Tempfile.new( @prefix.to_s, @tmpdir.to_s)
|
|
169
|
+
super(@tf.path)
|
|
170
|
+
end
|
|
171
|
+
def file_rl()
|
|
172
|
+
RIO::File::RL.new(self.uri,{:fs => self.fs})
|
|
173
|
+
#self
|
|
174
|
+
end
|
|
175
|
+
def open(mode='ignored')
|
|
176
|
+
#p callstr('open',mode)
|
|
177
|
+
@tf
|
|
178
|
+
end
|
|
179
|
+
def close
|
|
180
|
+
super
|
|
181
|
+
@tf = nil
|
|
182
|
+
end
|
|
183
|
+
SPLIT_RE = Temp::RL::SPLIT_RE
|
|
184
|
+
def self.splitrl(s)
|
|
185
|
+
Temp::RL.splitrl(s)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
require 'rio/state'
|
|
190
|
+
class Reset < State::Base
|
|
191
|
+
def initialize(*args)
|
|
192
|
+
super
|
|
193
|
+
#p args
|
|
194
|
+
@tempobj = nil
|
|
195
|
+
end
|
|
196
|
+
#def self.default_cx
|
|
197
|
+
# Cx::Vars.new( { 'closeoneof' => false, 'closeoncopy' => false } )
|
|
198
|
+
#end
|
|
199
|
+
|
|
200
|
+
def check?() true end
|
|
201
|
+
def mkdir(prefix=rl.prefix,tmpdir=rl.tmpdir)
|
|
202
|
+
self.rl = RIO::Temp::Dir::RL.new(prefix, tmpdir)
|
|
203
|
+
become 'Dir::Existing'
|
|
204
|
+
end
|
|
205
|
+
# def mkdir()
|
|
206
|
+
# dir()
|
|
207
|
+
# end
|
|
208
|
+
def chdir(&block)
|
|
209
|
+
self.mkdir.chdir(&block)
|
|
210
|
+
end
|
|
211
|
+
def file(prefix=rl.prefix,tmpdir=rl.tmpdir)
|
|
212
|
+
self.rl = RIO::Temp::File::RL.new(prefix, tmpdir)
|
|
213
|
+
become 'Temp::Stream::Open'
|
|
214
|
+
end
|
|
215
|
+
def scheme() rl.scheme() end
|
|
216
|
+
def host() rl.host() end
|
|
217
|
+
def opaque() rl.opaque() end
|
|
218
|
+
def to_s() rl.url() end
|
|
219
|
+
def exist?() false end
|
|
220
|
+
def file?() false end
|
|
221
|
+
def dir?() false end
|
|
222
|
+
def open?() false end
|
|
223
|
+
def closed?() true end
|
|
224
|
+
def when_missing(sym,*args)
|
|
225
|
+
#p @rl.scheme
|
|
226
|
+
if @tempobj.nil?
|
|
227
|
+
file()
|
|
228
|
+
else
|
|
229
|
+
gofigure(sym,*args)
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
require 'rio/stream/open'
|
|
234
|
+
module Stream
|
|
235
|
+
class Open < RIO::Stream::Open
|
|
236
|
+
def iostate(sym)
|
|
237
|
+
mode_('w+').open_.inout()
|
|
238
|
+
end
|
|
239
|
+
# def inout() stream_state('Temp::Stream::InOut') end
|
|
240
|
+
end
|
|
241
|
+
# require 'rio/stream'
|
|
242
|
+
# class InOut < RIO::Stream::InOut
|
|
243
|
+
# def base_state() 'Temp::Stream::Close' end
|
|
244
|
+
# end
|
|
245
|
+
# class Close < RIO::Stream::Close
|
|
246
|
+
# def base_state() 'Temp::Reset' end
|
|
247
|
+
# end
|
|
248
|
+
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|