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.
Files changed (296) hide show
  1. data/COPYING +341 -0
  2. data/README +81 -0
  3. data/Rakefile +281 -0
  4. data/build_doc.rb +94 -0
  5. data/doc/ANNOUNCE +159 -0
  6. data/doc/RELEASE_NOTES +308 -0
  7. data/doc/RIOIS +215 -0
  8. data/doc/generators/template/html/rio.css +428 -0
  9. data/doc/generators/template/html/rio.rb +523 -0
  10. data/doc/generators/template/html/ugly.rb +132 -0
  11. data/doc/pkg_def.rb +60 -0
  12. data/doc/rfc1738.txt +1403 -0
  13. data/doc/rfc959.txt +3933 -0
  14. data/ex/catcsv.rb +64 -0
  15. data/ex/colx.rb +8 -0
  16. data/ex/findinruby +15 -0
  17. data/ex/findruby +14 -0
  18. data/ex/passwd_report.rb +8 -0
  19. data/ex/prompt.rb +25 -0
  20. data/ex/rgb.txt.gz +0 -0
  21. data/ex/riocat +42 -0
  22. data/ex/riogunzip +31 -0
  23. data/ex/riogzip +24 -0
  24. data/ex/rioprompt.rb +10 -0
  25. data/ex/targz2zip +17 -0
  26. data/ex/tonl +10 -0
  27. data/lib/rio/abstract_method.rb +56 -0
  28. data/lib/rio/argv.rb +56 -0
  29. data/lib/rio/arycopy.rb +43 -0
  30. data/lib/rio/assert.rb +114 -0
  31. data/lib/rio/base.rb +56 -0
  32. data/lib/rio/callstr.rb +46 -0
  33. data/lib/rio/const.rb +51 -0
  34. data/lib/rio/construct.rb +50 -0
  35. data/lib/rio/constructor.rb +258 -0
  36. data/lib/rio/context/autoclose.rb +72 -0
  37. data/lib/rio/context/copying.rb +55 -0
  38. data/lib/rio/context/cxx.rb +66 -0
  39. data/lib/rio/context/dir.rb +120 -0
  40. data/lib/rio/context/gzip.rb +50 -0
  41. data/lib/rio/context/methods.rb +182 -0
  42. data/lib/rio/context/skip.rb +66 -0
  43. data/lib/rio/context/stream.rb +229 -0
  44. data/lib/rio/context.rb +117 -0
  45. data/lib/rio/cp.rb +370 -0
  46. data/lib/rio/def.rb +53 -0
  47. data/lib/rio/dir.rb +144 -0
  48. data/lib/rio/doc/EXAMPLES.rb +299 -0
  49. data/lib/rio/doc/HOWTO.rb +737 -0
  50. data/lib/rio/doc/INDEX.rb +311 -0
  51. data/lib/rio/doc/INTRO.rb +1068 -0
  52. data/lib/rio/doc/OPTIONAL.rb +130 -0
  53. data/lib/rio/doc/SYNOPSIS.rb +183 -0
  54. data/lib/rio/doc.rb +45 -0
  55. data/lib/rio/entrysel.rb +246 -0
  56. data/lib/rio/exception/copy.rb +97 -0
  57. data/lib/rio/exception/notimplemented.rb +57 -0
  58. data/lib/rio/exception/notsupported.rb +46 -0
  59. data/lib/rio/exception/open.rb +61 -0
  60. data/lib/rio/exception/state.rb +73 -0
  61. data/lib/rio/exception.rb +41 -0
  62. data/lib/rio/ext/csv.rb +351 -0
  63. data/lib/rio/ext/if.rb +45 -0
  64. data/lib/rio/ext/mp3info.rb +80 -0
  65. data/lib/rio/ext/splitlines.rb +253 -0
  66. data/lib/rio/ext/yaml/doc.rb +133 -0
  67. data/lib/rio/ext/yaml/tie.rb +149 -0
  68. data/lib/rio/ext/yaml.rb +164 -0
  69. data/lib/rio/ext/zipfile/fs.rb +116 -0
  70. data/lib/rio/ext/zipfile/rl.rb +251 -0
  71. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  72. data/lib/rio/ext/zipfile/state.rb +161 -0
  73. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  74. data/lib/rio/ext/zipfile.rb +110 -0
  75. data/lib/rio/ext.rb +138 -0
  76. data/lib/rio/factory.rb +436 -0
  77. data/lib/rio/file.rb +118 -0
  78. data/lib/rio/filter/closeoneof.rb +103 -0
  79. data/lib/rio/filter/gzip.rb +70 -0
  80. data/lib/rio/filter.rb +94 -0
  81. data/lib/rio/fs/base.rb +41 -0
  82. data/lib/rio/fs/impl.rb +122 -0
  83. data/lib/rio/fs/native.rb +75 -0
  84. data/lib/rio/fs/stream.rb +61 -0
  85. data/lib/rio/fs/url.rb +63 -0
  86. data/lib/rio/ftp/conncache.rb +101 -0
  87. data/lib/rio/ftp/dir.rb +94 -0
  88. data/lib/rio/ftp/fs.rb +180 -0
  89. data/lib/rio/ftp/ftpfile.rb +20 -0
  90. data/lib/rio/grande.rb +97 -0
  91. data/lib/rio/handle.rb +100 -0
  92. data/lib/rio/if/basic.rb +64 -0
  93. data/lib/rio/if/csv.rb +76 -0
  94. data/lib/rio/if/dir.rb +157 -0
  95. data/lib/rio/if/file.rb +89 -0
  96. data/lib/rio/if/fileordir.rb +268 -0
  97. data/lib/rio/if/grande.rb +729 -0
  98. data/lib/rio/if/grande_entry.rb +379 -0
  99. data/lib/rio/if/grande_stream.rb +693 -0
  100. data/lib/rio/if/internal.rb +125 -0
  101. data/lib/rio/if/path.rb +462 -0
  102. data/lib/rio/if/rubyio.rb +681 -0
  103. data/lib/rio/if/string.rb +83 -0
  104. data/lib/rio/if/temp.rb +45 -0
  105. data/lib/rio/if/test.rb +282 -0
  106. data/lib/rio/if/yaml.rb +206 -0
  107. data/lib/rio/if.rb +64 -0
  108. data/lib/rio/ioh.rb +162 -0
  109. data/lib/rio/iomode.rb +109 -0
  110. data/lib/rio/ios/fail.rb +106 -0
  111. data/lib/rio/ios/generic.rb +119 -0
  112. data/lib/rio/ios/mode.rb +60 -0
  113. data/lib/rio/ios/null.rb +119 -0
  114. data/lib/rio/iowrap.rb +128 -0
  115. data/lib/rio/kernel.rb +54 -0
  116. data/lib/rio/local.rb +62 -0
  117. data/lib/rio/match.rb +53 -0
  118. data/lib/rio/matchrecord.rb +283 -0
  119. data/lib/rio/no_warn.rb +49 -0
  120. data/lib/rio/nullio.rb +159 -0
  121. data/lib/rio/open3.rb +68 -0
  122. data/lib/rio/ops/construct.rb +61 -0
  123. data/lib/rio/ops/create.rb +77 -0
  124. data/lib/rio/ops/dir.rb +346 -0
  125. data/lib/rio/ops/either.rb +134 -0
  126. data/lib/rio/ops/file.rb +102 -0
  127. data/lib/rio/ops/path.rb +296 -0
  128. data/lib/rio/ops/stream/input.rb +267 -0
  129. data/lib/rio/ops/stream/output.rb +100 -0
  130. data/lib/rio/ops/stream/read.rb +86 -0
  131. data/lib/rio/ops/stream/write.rb +57 -0
  132. data/lib/rio/ops/stream.rb +87 -0
  133. data/lib/rio/ops/symlink.rb +80 -0
  134. data/lib/rio/path/reset.rb +69 -0
  135. data/lib/rio/path.rb +129 -0
  136. data/lib/rio/piper/cp.rb +80 -0
  137. data/lib/rio/piper.rb +122 -0
  138. data/lib/rio/prompt.rb +66 -0
  139. data/lib/rio/rectype.rb +88 -0
  140. data/lib/rio/rl/base.rb +118 -0
  141. data/lib/rio/rl/builder.rb +117 -0
  142. data/lib/rio/rl/chmap.rb +66 -0
  143. data/lib/rio/rl/fs2url.rb +82 -0
  144. data/lib/rio/rl/ioi.rb +78 -0
  145. data/lib/rio/rl/path.rb +110 -0
  146. data/lib/rio/rl/pathmethods.rb +116 -0
  147. data/lib/rio/rl/uri.rb +200 -0
  148. data/lib/rio/rl/withpath.rb +296 -0
  149. data/lib/rio/scheme/aryio.rb +88 -0
  150. data/lib/rio/scheme/cmdio.rb +80 -0
  151. data/lib/rio/scheme/cmdpipe.rb +118 -0
  152. data/lib/rio/scheme/fd.rb +65 -0
  153. data/lib/rio/scheme/ftp.rb +141 -0
  154. data/lib/rio/scheme/http.rb +78 -0
  155. data/lib/rio/scheme/null.rb +55 -0
  156. data/lib/rio/scheme/path.rb +98 -0
  157. data/lib/rio/scheme/stderr.rb +55 -0
  158. data/lib/rio/scheme/stdio.rb +71 -0
  159. data/lib/rio/scheme/strio.rb +87 -0
  160. data/lib/rio/scheme/sysio.rb +63 -0
  161. data/lib/rio/scheme/tcp.rb +75 -0
  162. data/lib/rio/scheme/temp.rb +200 -0
  163. data/lib/rio/state/error.rb +72 -0
  164. data/lib/rio/state.rb +242 -0
  165. data/lib/rio/stream/base.rb +54 -0
  166. data/lib/rio/stream/duplex.rb +79 -0
  167. data/lib/rio/stream/open.rb +202 -0
  168. data/lib/rio/stream.rb +181 -0
  169. data/lib/rio/symantics.rb +45 -0
  170. data/lib/rio/tempdir.rb +132 -0
  171. data/lib/rio/to_rio/all.rb +39 -0
  172. data/lib/rio/to_rio/array.rb +39 -0
  173. data/lib/rio/to_rio/io.rb +40 -0
  174. data/lib/rio/to_rio/object.rb +42 -0
  175. data/lib/rio/to_rio/string.rb +40 -0
  176. data/lib/rio/to_rio.rb +67 -0
  177. data/lib/rio/uri/file.rb +198 -0
  178. data/lib/rio/util.rb +48 -0
  179. data/lib/rio/version.rb +51 -0
  180. data/lib/rio.rb +162 -0
  181. data/setup.rb +1360 -0
  182. data/test/bin/count_lines.rb +11 -0
  183. data/test/bin/find_lines.rb +13 -0
  184. data/test/bin/list_dir.rb +14 -0
  185. data/test/ftp/all.rb +9 -0
  186. data/test/ftp/anon_copy_data.rb +36 -0
  187. data/test/ftp/anon_misc.rb +124 -0
  188. data/test/ftp/anon_read.rb +105 -0
  189. data/test/ftp/anon_special.rb +68 -0
  190. data/test/ftp/anon_write.rb +70 -0
  191. data/test/ftp/ftp2ftp.rb +51 -0
  192. data/test/ftp/initftpfiles.rb +14 -0
  193. data/test/ftp/testdef.rb +55 -0
  194. data/test/gem_runtests.rb +15 -0
  195. data/test/http/all.rb +4 -0
  196. data/test/http/copy-from-http.rb +141 -0
  197. data/test/http/uri-meta.rb +72 -0
  198. data/test/lib/temp_server.rb +46 -0
  199. data/test/runalltests.rb +17 -0
  200. data/test/runftptests.rb +14 -0
  201. data/test/runhttp.rb +11 -0
  202. data/test/runhttptests.rb +14 -0
  203. data/test/runtests.rb +52 -0
  204. data/test/tc/abs.rb +355 -0
  205. data/test/tc/all.rb +80 -0
  206. data/test/tc/base.rb +31 -0
  207. data/test/tc/base2.rb +87 -0
  208. data/test/tc/cd1.rb +113 -0
  209. data/test/tc/clearsel.rb +68 -0
  210. data/test/tc/clone.rb +208 -0
  211. data/test/tc/closeoncopy.rb +102 -0
  212. data/test/tc/closeoneof.rb +194 -0
  213. data/test/tc/cmdpipe.rb +149 -0
  214. data/test/tc/copy-dir-samevar.rb +91 -0
  215. data/test/tc/copy-from.rb +129 -0
  216. data/test/tc/copy-to.rb +91 -0
  217. data/test/tc/copy.rb +74 -0
  218. data/test/tc/copyarray.rb +188 -0
  219. data/test/tc/copydest.rb +50 -0
  220. data/test/tc/copydir.rb +166 -0
  221. data/test/tc/copydirlines.rb +121 -0
  222. data/test/tc/copylines.rb +46 -0
  223. data/test/tc/copynonex.rb +118 -0
  224. data/test/tc/copysymlink.rb +39 -0
  225. data/test/tc/create.rb +114 -0
  226. data/test/tc/csv.rb +226 -0
  227. data/test/tc/csv2.rb +138 -0
  228. data/test/tc/csv_columns.rb +37 -0
  229. data/test/tc/csvutil.rb +56 -0
  230. data/test/tc/dir.rb +76 -0
  231. data/test/tc/dir_iter.rb +383 -0
  232. data/test/tc/dirautoclose.rb +67 -0
  233. data/test/tc/dirent.rb +178 -0
  234. data/test/tc/dirss.rb +81 -0
  235. data/test/tc/each.rb +111 -0
  236. data/test/tc/each_break.rb +243 -0
  237. data/test/tc/edf.rb +81 -0
  238. data/test/tc/empty.rb +51 -0
  239. data/test/tc/emptyriodir.rb +129 -0
  240. data/test/tc/entary.rb +227 -0
  241. data/test/tc/entsel.rb +110 -0
  242. data/test/tc/eq.rb +101 -0
  243. data/test/tc/expand_path.rb +69 -0
  244. data/test/tc/ext.rb +136 -0
  245. data/test/tc/fileno.rb +94 -0
  246. data/test/tc/files_select.rb +92 -0
  247. data/test/tc/get.rb +152 -0
  248. data/test/tc/getrec.rb +137 -0
  249. data/test/tc/gzip.rb +109 -0
  250. data/test/tc/io_each_byte.rb +60 -0
  251. data/test/tc/io_read.rb +80 -0
  252. data/test/tc/iometh.rb +149 -0
  253. data/test/tc/likeio.rb +116 -0
  254. data/test/tc/line_record_row.rb +51 -0
  255. data/test/tc/lineno.rb +196 -0
  256. data/test/tc/lines.rb +66 -0
  257. data/test/tc/misc.rb +432 -0
  258. data/test/tc/nolines.rb +204 -0
  259. data/test/tc/noqae.rb +879 -0
  260. data/test/tc/null.rb +45 -0
  261. data/test/tc/once.rb +6 -0
  262. data/test/tc/overload.rb +140 -0
  263. data/test/tc/pa.rb +158 -0
  264. data/test/tc/path_parts.rb +175 -0
  265. data/test/tc/pathop.rb +60 -0
  266. data/test/tc/paths.rb +145 -0
  267. data/test/tc/pid.rb +31 -0
  268. data/test/tc/piper.rb +143 -0
  269. data/test/tc/programs_util.rb +24 -0
  270. data/test/tc/qae.rb +493 -0
  271. data/test/tc/qae_riovar.rb +499 -0
  272. data/test/tc/readline.rb +30 -0
  273. data/test/tc/records.rb +68 -0
  274. data/test/tc/rename.rb +233 -0
  275. data/test/tc/rename_assign.rb +45 -0
  276. data/test/tc/riorl.rb +181 -0
  277. data/test/tc/route.rb +51 -0
  278. data/test/tc/selnosel.rb +33 -0
  279. data/test/tc/skip.rb +89 -0
  280. data/test/tc/skiplines.rb +71 -0
  281. data/test/tc/split.rb +28 -0
  282. data/test/tc/splitlines.rb +65 -0
  283. data/test/tc/splitpath.rb +83 -0
  284. data/test/tc/sub.rb +46 -0
  285. data/test/tc/symlink.rb +176 -0
  286. data/test/tc/symlink0.rb +348 -0
  287. data/test/tc/symlink1.rb +114 -0
  288. data/test/tc/synopsis.rb +75 -0
  289. data/test/tc/temp.rb +152 -0
  290. data/test/tc/tempdir.rb +60 -0
  291. data/test/tc/tempfile.rb +66 -0
  292. data/test/tc/testcase.rb +170 -0
  293. data/test/tc/tonl.rb +37 -0
  294. data/test/tc/truncate.rb +39 -0
  295. data/test/tc/yaml.rb +275 -0
  296. 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__
@@ -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