rio 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. data/ChangeLog +1273 -1482
  2. data/README +2 -2
  3. data/Rakefile +5 -5
  4. data/VERSION +1 -1
  5. data/{RUNME.1st.rb → build_doc.rb} +4 -10
  6. data/doc/ANNOUNCE +33 -80
  7. data/doc/RELEASE_NOTES +31 -1
  8. data/doc/generators/template/html/rio.rb +3 -3
  9. data/lib/rio/abstract_method.rb +2 -2
  10. data/lib/rio/argv.rb +2 -2
  11. data/lib/rio/arycopy.rb +2 -2
  12. data/lib/rio/assert.rb +2 -2
  13. data/lib/rio/base.rb +2 -2
  14. data/lib/rio/callstr.rb +47 -0
  15. data/lib/rio/const.rb +52 -0
  16. data/lib/rio/construct.rb +6 -24
  17. data/lib/rio/constructor.rb +12 -2
  18. data/lib/rio/context/autoclose.rb +73 -0
  19. data/lib/rio/context/copying.rb +2 -2
  20. data/lib/rio/context/cxx.rb +2 -2
  21. data/lib/rio/context/dir.rb +2 -2
  22. data/lib/rio/context/gzip.rb +2 -2
  23. data/lib/rio/context/methods.rb +6 -34
  24. data/lib/rio/context/skip.rb +2 -2
  25. data/lib/rio/context/stream.rb +2 -2
  26. data/lib/rio/context.rb +17 -2
  27. data/lib/rio/cp.rb +35 -9
  28. data/lib/rio/def.rb +54 -0
  29. data/lib/rio/dir.rb +19 -20
  30. data/lib/rio/doc/HOWTO.rb +23 -7
  31. data/lib/rio/doc/INTRO.rb +57 -23
  32. data/lib/rio/doc/MISC.rb +2 -2
  33. data/lib/rio/doc/OPTIONAL.rb +134 -0
  34. data/lib/rio/doc/SYNOPSIS.rb +11 -4
  35. data/lib/rio/doc.rb +2 -2
  36. data/lib/rio/entrysel.rb +25 -6
  37. data/lib/rio/exception/copy.rb +2 -2
  38. data/lib/rio/exception/notsupported.rb +47 -0
  39. data/lib/rio/exception/open.rb +2 -2
  40. data/lib/rio/exception/state.rb +2 -2
  41. data/lib/rio/exception.rb +2 -2
  42. data/lib/rio/ext/csv.rb +56 -11
  43. data/lib/rio/ext/yaml.rb +2 -2
  44. data/lib/rio/ext/zipfile.rb +91 -0
  45. data/lib/rio/ext.rb +38 -3
  46. data/lib/rio/factory.rb +17 -34
  47. data/lib/rio/file.rb +48 -8
  48. data/lib/rio/filter/closeoneof.rb +36 -16
  49. data/lib/rio/filter/gzip.rb +2 -2
  50. data/lib/rio/filter.rb +2 -2
  51. data/lib/rio/fs/base.rb +42 -0
  52. data/lib/rio/fs/impl.rb +123 -0
  53. data/lib/rio/fs/native.rb +76 -0
  54. data/lib/rio/{record.rb → fs/stream.rb} +21 -18
  55. data/lib/rio/fs/url.rb +64 -0
  56. data/lib/rio/ftp/{ioh.rb → conncache.rb} +38 -39
  57. data/lib/rio/ftp/dir.rb +95 -0
  58. data/lib/rio/ftp/fs.rb +173 -0
  59. data/lib/rio/ftp/ftpfile.rb +20 -0
  60. data/lib/rio/grande.rb +2 -2
  61. data/lib/rio/handle.rb +2 -2
  62. data/lib/rio/if/basic.rb +2 -2
  63. data/lib/rio/if/csv.rb +2 -2
  64. data/lib/rio/if/dir.rb +2 -2
  65. data/lib/rio/if/file.rb +26 -2
  66. data/lib/rio/if/fileordir.rb +44 -49
  67. data/lib/rio/if/grande.rb +32 -10
  68. data/lib/rio/if/grande_entry.rb +12 -2
  69. data/lib/rio/if/grande_stream.rb +17 -28
  70. data/lib/rio/if/internal.rb +2 -2
  71. data/lib/rio/if/path.rb +7 -6
  72. data/lib/rio/if/stream.rb +85 -29
  73. data/lib/rio/if/string.rb +2 -2
  74. data/lib/rio/if/temp.rb +2 -2
  75. data/lib/rio/if/test.rb +37 -4
  76. data/lib/rio/if/yaml.rb +2 -2
  77. data/lib/rio/if.rb +2 -2
  78. data/lib/rio/impl/path.rb +2 -2
  79. data/lib/rio/ioh.rb +17 -6
  80. data/lib/rio/iomode.rb +4 -3
  81. data/lib/rio/ios/fail.rb +107 -0
  82. data/lib/rio/ios/generic.rb +120 -0
  83. data/lib/rio/ios/mode.rb +61 -0
  84. data/lib/rio/ios/null.rb +120 -0
  85. data/lib/rio/iowrap.rb +129 -0
  86. data/lib/rio/kernel.rb +12 -3
  87. data/lib/rio/local.rb +2 -2
  88. data/lib/rio/match.rb +3 -3
  89. data/lib/rio/matchrecord.rb +2 -2
  90. data/lib/rio/no_warn.rb +50 -0
  91. data/lib/rio/{arrayio.rb → nullio.rb} +47 -86
  92. data/lib/rio/open3.rb +2 -2
  93. data/lib/rio/ops/construct.rb +20 -13
  94. data/lib/rio/ops/create.rb +10 -19
  95. data/lib/rio/ops/dir.rb +60 -54
  96. data/lib/rio/ops/either.rb +11 -9
  97. data/lib/rio/ops/file.rb +28 -24
  98. data/lib/rio/ops/path.rb +45 -43
  99. data/lib/rio/ops/stream/input.rb +12 -8
  100. data/lib/rio/ops/stream/output.rb +2 -2
  101. data/lib/rio/ops/stream/read.rb +35 -32
  102. data/lib/rio/ops/stream/write.rb +5 -5
  103. data/lib/rio/ops/stream.rb +7 -3
  104. data/lib/rio/ops/symlink.rb +12 -10
  105. data/lib/rio/path/reset.rb +5 -5
  106. data/lib/rio/path.rb +32 -24
  107. data/lib/rio/piper/cp.rb +2 -2
  108. data/lib/rio/piper.rb +2 -2
  109. data/lib/rio/prompt.rb +2 -2
  110. data/lib/rio/rectype.rb +9 -7
  111. data/lib/rio/rl/base.rb +5 -4
  112. data/lib/rio/rl/builder.rb +17 -5
  113. data/lib/rio/rl/ioi.rb +14 -4
  114. data/lib/rio/rl/path.rb +23 -15
  115. data/lib/rio/rl/pathmethods.rb +12 -2
  116. data/lib/rio/rl/uri.rb +13 -6
  117. data/lib/rio/scheme/aryio.rb +3 -3
  118. data/lib/rio/scheme/cmdio.rb +4 -3
  119. data/lib/rio/scheme/cmdpipe.rb +3 -35
  120. data/lib/rio/scheme/fd.rb +4 -3
  121. data/lib/rio/scheme/ftp.rb +36 -7
  122. data/lib/rio/scheme/http.rb +2 -2
  123. data/lib/rio/{context/closeoneof.rb → scheme/null.rb} +17 -11
  124. data/lib/rio/scheme/path.rb +28 -30
  125. data/lib/rio/scheme/stderr.rb +4 -4
  126. data/lib/rio/scheme/stdio.rb +6 -5
  127. data/lib/rio/scheme/strio.rb +10 -20
  128. data/lib/rio/scheme/sysio.rb +5 -2
  129. data/lib/rio/scheme/tcp.rb +4 -3
  130. data/lib/rio/scheme/temp.rb +14 -1
  131. data/lib/rio/state/error.rb +2 -2
  132. data/lib/rio/state.rb +80 -34
  133. data/lib/rio/stream/base.rb +7 -2
  134. data/lib/rio/stream/duplex.rb +13 -10
  135. data/lib/rio/stream/open.rb +74 -79
  136. data/lib/rio/stream.rb +15 -23
  137. data/lib/rio/symantics.rb +2 -2
  138. data/lib/rio/tempdir.rb +132 -132
  139. data/lib/rio/to_rio/all.rb +40 -0
  140. data/lib/rio/to_rio/array.rb +40 -0
  141. data/lib/rio/to_rio/io.rb +41 -0
  142. data/lib/rio/to_rio/object.rb +43 -0
  143. data/lib/rio/to_rio/string.rb +41 -0
  144. data/lib/rio/to_rio.rb +13 -2
  145. data/lib/rio/uri/file.rb +2 -2
  146. data/lib/rio/util.rb +2 -2
  147. data/lib/rio/version.rb +3 -3
  148. data/lib/rio.rb +16 -25
  149. data/test/bin/count_lines.rb +11 -0
  150. data/test/bin/find_lines.rb +13 -0
  151. data/test/bin/list_dir.rb +14 -0
  152. data/test/ftp/all.rb +9 -0
  153. data/test/ftp/anon_misc.rb +112 -0
  154. data/test/ftp/anon_read.rb +105 -0
  155. data/test/ftp/anon_special.rb +68 -0
  156. data/test/ftp/anon_write.rb +63 -0
  157. data/test/ftp/ftp2ftp.rb +51 -0
  158. data/test/ftp/initftpfiles.rb +14 -0
  159. data/test/ftp/testdef.rb +51 -0
  160. data/test/gem_runtests.rb +15 -15
  161. data/test/runalltests.rb +15 -0
  162. data/test/runftptests.rb +14 -0
  163. data/test/{1.rb → runhttptests.rb} +14 -14
  164. data/test/runtests.rb +14 -14
  165. data/test/tc/all.rb +36 -21
  166. data/test/tc/cmdpipe.rb +18 -15
  167. data/test/tc/copy-from-http.rb +89 -0
  168. data/test/tc/copy-from.rb +1 -52
  169. data/test/tc/copy.rb +19 -17
  170. data/test/tc/csv2.rb +6 -3
  171. data/test/tc/empty.rb +47 -0
  172. data/test/tc/emptyriodir.rb +129 -0
  173. data/test/tc/entsel.rb +110 -0
  174. data/test/tc/files_select.rb +92 -0
  175. data/test/tc/get.rb +7 -6
  176. data/test/tc/getrec.rb +2 -5
  177. data/test/tc/gzip.rb +82 -0
  178. data/test/tc/io_each_byte.rb +60 -0
  179. data/test/tc/io_read.rb +80 -0
  180. data/test/tc/iometh.rb +149 -0
  181. data/test/tc/likeio.rb +112 -0
  182. data/test/tc/methods.rb +10 -9
  183. data/test/tc/misc.rb +1 -37
  184. data/test/tc/null.rb +45 -0
  185. data/test/tc/pid.rb +31 -0
  186. data/test/tc/piper.rb +34 -37
  187. data/test/tc/programs_util.rb +24 -0
  188. data/test/tc/readline.rb +30 -0
  189. data/test/tc/rename.rb +12 -0
  190. data/test/tc/tempfile.rb +14 -0
  191. data/test/tc/testcase.rb +6 -0
  192. data/test/tc/tonl.rb +37 -0
  193. metadata +181 -144
  194. data/ex/colx.rb +0 -8
  195. data/ex/findinruby +0 -16
  196. data/ex/findruby +0 -15
  197. data/ex/passwd_report.rb +0 -8
  198. data/ex/prompt.rb +0 -25
  199. data/ex/rgb.txt.gz +0 -0
  200. data/ex/riocat +0 -35
  201. data/ex/riogunzip +0 -31
  202. data/ex/riogzip +0 -24
  203. data/ex/rioprompt.rb +0 -6
  204. data/ex/targz2zip +0 -17
  205. data/ex/tolf +0 -11
  206. data/lib/rio/ftp/conn.rb +0 -167
  207. data/lib/rio/ftp.rb +0 -275
  208. data/test/once.rb +0 -7
data/lib/rio/ext/csv.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -35,9 +35,28 @@
35
35
  # The documented interface and behavior is subject to change without notice.</b>
36
36
 
37
37
 
38
+ # begin
39
+ # require 'faster_csv' # first choice--for speed
40
+
41
+ # # A CSV compatible interface for FasterCSV.
42
+ # module CSV # :nodoc:
43
+ # def self.parse_line( line, field_sep=nil, row_sep=nil )
44
+ # FasterCSV.parse_line( line, :col_sep => field_sep || ",",
45
+ # :row_sep => row_sep || :auto )
46
+ # end
47
+
48
+ # def self.generate_line( array, field_sep=nil, row_sep=nil )
49
+ # FasterCSV.generate_line( array, :col_sep => field_sep || ",",
50
+ # :row_sep => row_sep || "" )
51
+ # end
52
+ # end
53
+ # rescue LoadError
54
+ # require 'csv' # second choice--slower but standard
55
+ # end
56
+
38
57
  require 'csv'
39
- require 'rio/record'
40
58
 
59
+ $EXTEND_CSV_RESULTS = false
41
60
  module RIO
42
61
  module Ext
43
62
  module CSV
@@ -92,21 +111,42 @@ module RIO
92
111
  end
93
112
  end
94
113
  end
114
+ end
115
+ end
95
116
 
96
117
 
118
+ module RIO
119
+ module Ext
97
120
  module CSV
98
121
  module Input
99
122
 
100
123
  protected
124
+ # def ior()
125
+ # p cx['stream_itertype']
126
+ # case cx['stream_itertype']
127
+ # when 'lines',nil
128
+ # self.ioh.iostack[-2]
129
+ # else
130
+ # self.ioh
131
+ # end
132
+ # end
133
+ # def each_rec_(&block)
134
+ # self.ior.each { |line|
135
+ # yield line
136
+ # }
137
+ # self
138
+ # end
101
139
 
102
140
  def to_rec_(raw_rec)
103
141
  #_init_cols_from_line(raw_rec) if @recno == 0
104
142
  #p "#{callstr('to_rec_',raw_rec,@recno)} ; itertype=#{cx['stream_itertype']}"
105
143
  case cx['stream_itertype']
106
144
  when 'lines'
107
- unless copying_from?
108
- raw_rec.extend(RIO::Ext::CSV::Str)
109
- raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs'])
145
+ if $EXTEND_CSV_RESULTS
146
+ unless copying_from?
147
+ raw_rec.extend(RIO::Ext::CSV::Str)
148
+ raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs'])
149
+ end
110
150
  end
111
151
  raw_rec
112
152
  when 'records'
@@ -154,15 +194,20 @@ module RIO
154
194
  end
155
195
  tfields
156
196
  end
157
- def _l2a(line,fs,rs)
197
+ def parse_line_(line,fs,rs)
158
198
  ::CSV.parse_line(line,fs,rs)
159
199
  end
200
+ def _l2a(line,fs,rs)
201
+ parse_line_(line,fs,rs)
202
+ end
160
203
  def _l2record(line,fs,rs)
161
204
  #p callstr('_l2record',line,fs,rs,cols)
162
- fields = trim(::CSV.parse_line(line,fs,rs))
163
- unless copying_from?
164
- fields.extend(RIO::Ext::CSV::Ary)
165
- fields.csv_rec_to_s = _rec_to_s_proc(fs,rs)
205
+ fields = trim(parse_line_(line,fs,rs))
206
+ if $EXTEND_CSV_RESULTS
207
+ unless copying_from?
208
+ fields.extend(RIO::Ext::CSV::Ary)
209
+ fields.csv_rec_to_s = _rec_to_s_proc(fs,rs)
210
+ end
166
211
  end
167
212
  fields
168
213
  end
data/lib/rio/ext/yaml.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -0,0 +1,91 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 2006 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. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+ module RIO
38
+ module_function
39
+ def load_lib(lib)
40
+ begin
41
+ require lib
42
+ rescue LoadError => ex
43
+ begin
44
+ p "using Gem for #{lib}" if $DEBUG
45
+ require 'rubygems'
46
+ require_gem lib
47
+ rescue
48
+ raise ex
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ begin
55
+ RIO.load_lib('zip/zip')
56
+ require 'zip/zipfilesystem'
57
+ require 'rio/ext/zipfile/opt'
58
+ RIO::Ext::ZipFile.load_extension
59
+ rescue LoadError
60
+ p "No zipfile support" if $DEBUG
61
+ end
62
+
63
+
64
+ # module RIO
65
+ # module Ext
66
+ # module ZipFile
67
+ # module Cx
68
+ # def zipfile(&block)
69
+ # #require 'rio/ext/zipfile/state'
70
+ # cxx('zipfile',true,&block)
71
+ # #self.extend(ZipFile::State).fstream
72
+ # end
73
+ # def zipfile?() cxx?('zipfile') end
74
+ # def zipfile_()
75
+ # cxx_('zipfile',true)
76
+ # end
77
+ # protected :zipfile_
78
+
79
+ # def zipent(&block)
80
+ # cxx('zipent',true,&block)
81
+ # end
82
+ # def zipent?() cxx?('zipent') end
83
+ # def zipent_()
84
+ # cxx_('zipent',true)
85
+ # end
86
+ # protected :zipent_
87
+ # end
88
+ # end
89
+ # end
90
+ # end
91
+ __END__
data/lib/rio/ext.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -37,7 +37,33 @@
37
37
 
38
38
  require 'rio/ext/csv'
39
39
  require 'rio/ext/yaml'
40
+ #require 'rio/ext/zipfile'
41
+
40
42
  require 'rio/util'
43
+ module RIO
44
+ module Ext #:nodoc: all
45
+ @@extensions = {}
46
+
47
+ module_function
48
+ def add(cl,meth)
49
+ @@extensions[cl] ||= []
50
+ @@extensions[cl].push(meth)
51
+ end
52
+ def extend_state(state_class,ext_module)
53
+ ext_proc = proc{ |obj| obj.extend(ext_module) }
54
+ RIO::Ext.add(state_class,ext_proc)
55
+ end
56
+
57
+ def became(obj)
58
+ if @@extensions[obj.class]
59
+ @@extensions[obj.class].each { |meth|
60
+ meth[obj]
61
+ }
62
+ end
63
+ end
64
+ end
65
+ end
66
+
41
67
  module RIO
42
68
  module Ext #:nodoc: all
43
69
  OUTPUT_SYMS = Util::build_sym_hash(CSV::Output.instance_methods + YAML::Output.instance_methods)
@@ -45,14 +71,22 @@ module RIO
45
71
  module Cx
46
72
  include CSV::Cx
47
73
  include YAML::Cx
74
+ #include ZipFile::Cx
48
75
  end
49
76
  end
50
77
  module Ext
51
78
  module Input
52
79
  def add_extensions(obj)
53
80
  #p "add_extensions(#{obj.inspect})"
54
- obj.extend(CSV::Input) if obj.csv?
81
+ #p obj.ioh
82
+ if obj.csv?
83
+ obj.extend(CSV::Input)
84
+ end
55
85
  obj.extend(YAML::Input) if obj.yaml?
86
+ # if obj.zipfile?
87
+ # require 'rio/ext/zipfile/state'
88
+ # obj.extend(ZipFile::Input)
89
+ # end
56
90
  obj
57
91
  end
58
92
  module_function :add_extensions
@@ -67,3 +101,4 @@ module RIO
67
101
  end
68
102
  end
69
103
  end
104
+
data/lib/rio/factory.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -64,12 +64,18 @@ module RIO
64
64
  when 'file','path'
65
65
  require 'rio/scheme/path'
66
66
  Path
67
+ when 'zfile','zpath'
68
+ require 'rio/ext/zipfile/zpath'
69
+ Ext::ZipFile::ZPath
67
70
  when 'stdio','stdin','stdout'
68
71
  require 'rio/scheme/stdio'
69
72
  StdIO
70
73
  when 'stderr'
71
74
  require 'rio/scheme/stderr'
72
75
  StdErr
76
+ when 'null'
77
+ require 'rio/scheme/null'
78
+ Null
73
79
  when 'tempfile'
74
80
  require 'rio/scheme/temp'
75
81
  Temp::File
@@ -138,54 +144,32 @@ module RIO
138
144
 
139
145
  'Stream::Close' => 'rio/stream/open',
140
146
  'Stream::Reset' => 'rio/stream',
141
-
142
147
  'Stream::Open' => 'rio/stream/open',
143
148
  'Stream::Input' => 'rio/stream',
144
149
  'Stream::Output' => 'rio/stream',
145
150
  'Stream::InOut' => 'rio/stream',
146
151
 
147
152
  'Stream::Duplex::Open' => 'rio/stream/duplex',
148
- 'Stream::Duplex::Input' => 'rio/stream/duplex',
149
- 'Stream::Duplex::Output' => 'rio/stream/duplex',
150
- 'Stream::Duplex::InOut' => 'rio/stream/duplex',
151
153
 
152
- 'Path::Stream::Input' => 'rio/scheme/path',
153
- 'Path::Stream::Output' => 'rio/scheme/path',
154
- 'Path::Stream::InOut' => 'rio/scheme/path',
155
154
  'Path::Stream::Open' => 'rio/scheme/path',
156
155
 
157
- 'StrIO::Stream::Input' => 'rio/scheme/strio',
158
- 'StrIO::Stream::Output' => 'rio/scheme/strio',
159
- 'StrIO::Stream::InOut' => 'rio/scheme/strio',
160
156
  'StrIO::Stream::Open' => 'rio/scheme/strio',
161
157
 
158
+ 'Null::Stream::Open' => 'rio/scheme/null',
159
+
160
+ 'ZipFile::CentralDir::Open' => 'rio/zipfile/centraldir',
161
+ 'ZipFile::CentralDir::Stream' => 'rio/zipfile/centraldir',
162
+ 'ZipFile::CentralDir::Close' => 'rio/zipfile/centraldir',
163
+ 'ZipFile::Path::Str' => 'rio/zipfile/path',
164
+
162
165
  'CmdPipe::Stream::Reset' => 'rio/scheme/cmdpipe',
163
- # 'CmdPipe::Stream::Open' => 'rio/scheme/cmdpipe',
164
- # 'CmdPipe::Stream::Input' => 'rio/scheme/cmdpipe',
165
- # 'CmdPipe::Stream::Output' => 'rio/scheme/cmdpipe',
166
- # 'CmdPipe::Stream::InOut' => 'rio/scheme/cmdpipe',
167
166
 
168
167
  'HTTP::Stream::Input' => 'rio/scheme/http',
169
168
  'HTTP::Stream::Open' => 'rio/scheme/http',
170
169
 
171
170
  'Temp::Reset' => 'rio/scheme/temp',
172
171
  'Temp::Stream::Open' => 'rio/scheme/temp',
173
- #'Temp::Stream::Close' => 'rio/scheme/temp',
174
- #'Temp::Stream::InOut' => 'rio/scheme/temp',
175
-
176
- 'FTP::State::Dir' => 'rio/ftp',
177
- 'FTP::State::File' => 'rio/ftp',
178
- 'FTP::State::Reset' => 'rio/ftp',
179
- 'FTP::State::Open' => 'rio/ftp',
180
- 'FTP::Stream::Input' => 'rio/ftp',
181
- 'FTP::Stream::Open' => 'rio/ftp',
182
- 'FTP::Stream::Close' => 'rio/ftp',
183
- 'FTP::Stream::Reset' => 'rio/ftp',
184
-
185
- 'AryIO::Stream::Input' => 'rio/scheme/aryio',
186
- 'AryIO::Stream::Output' => 'rio/scheme/aryio',
187
- 'AryIO::Stream::InOut' => 'rio/scheme/aryio',
188
- 'AryIO::Stream::Open' => 'rio/scheme/aryio',
172
+
189
173
  }
190
174
  def state2class(state_name)
191
175
  #p "state_name=#{state_name}"
@@ -218,8 +202,7 @@ module RIO
218
202
  # factory creates a state from args
219
203
  def create_state(*args)
220
204
  riorl = RIO::RL::Builder.build(*args)
221
- # state_class = state2class(reset_state(riorl))
222
- create_handle(state2class(reset_state(riorl)).new_r(riorl))
205
+ create_handle(state2class(reset_state(riorl)).new(riorl))
223
206
  end
224
207
  def clone_state(state)
225
208
  create_handle(state.target.clone)
data/lib/rio/file.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -35,6 +35,7 @@
35
35
  # The documented interface and behavior is subject to change without notice.</b>
36
36
 
37
37
 
38
+ require 'rio/state'
38
39
  require 'rio/ops/path'
39
40
  require 'rio/ops/file'
40
41
 
@@ -45,12 +46,24 @@ module RIO
45
46
  class Base < State::Base
46
47
  include Ops::Path::Str
47
48
 
49
+ protected
50
+
51
+ def stream_rl_
52
+ #RIO::File::RL.new(self.to_uri,{:fs => self.fs})
53
+ self.rl.file_rl
54
+ end
55
+
56
+ public
57
+
48
58
  def fstream()
49
- self.rl = RIO::File::RL.new(self.to_uri)
59
+ #p self.rl.class
60
+ self.rl = self.stream_rl_
50
61
  become 'Path::Stream::Open'
51
- # become 'Stream::Open'
52
62
  end
53
- def when_missing(sym,*args) fstream() end
63
+
64
+ def when_missing(sym,*args)
65
+ fstream()
66
+ end
54
67
  end
55
68
 
56
69
  class NonExisting < Base
@@ -60,19 +73,46 @@ module RIO
60
73
 
61
74
  class Existing < Base
62
75
  include Ops::File::Existing
76
+ include Enumerable
77
+
63
78
  def check?() self.file? end
79
+ def handle_skipped
80
+ return self unless cx.has_key?('skip_args')
81
+ args = cx['skip_args'] || []
82
+ self.skipentries(*args)
83
+ end
84
+ def [](*args)
85
+ #p "#{callstr('[]',*args)} ss_type=#{ss_type?}"
86
+ if _using_files_with_a_file
87
+ unless args.empty?
88
+ ss_args = cx['ss_args'] = args
89
+ return self.files(*ss_args).to_a
90
+ else
91
+ return to_a()
92
+ end
93
+ else
94
+ fstream[*args]
95
+ end
96
+
97
+ end
64
98
  def each(*args,&block)
65
99
  #p "#{callstr('each',*args)} ss_type=#{ss_type?}"
66
- if ss_type? == 'files' and !stream_iter?
67
- #sel = Match::Entry::Selector.new(cx['sel'],cx['nosel'])
100
+ if _using_files_with_a_file
101
+ handle_skipped()
68
102
  sel = Match::Entry::Selector.new(cx['entry_sel'])
69
103
  yield new_rio_cx(self) if sel.match?(self)
70
104
  else
71
105
  fstream.each(*args,&block)
72
106
  end
73
107
  end
108
+
109
+ private
110
+
111
+ def _using_files_with_a_file
112
+ ss_type? == 'files' and !stream_iter?
113
+ end
74
114
  end
75
115
 
76
116
  end
77
117
 
78
- end # module RIO
118
+ end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -48,36 +48,56 @@ module RIO
48
48
  def autoclosed?
49
49
  @autoclosed
50
50
  end
51
- def close_on_eof(rtn)
51
+ # def close_on_eof_raise(&block)
52
+ # begin
53
+ # rtn = yield
54
+ # rescue EOFError
55
+ # close_on_eof_(rtn)
56
+ # raise
57
+ # end
58
+ # rtn
59
+ # end
60
+ def close_on_eof(&block)
52
61
  #p callstr('close_on_eof',rtn)
53
- # p @ios
62
+ rtn = yield
54
63
  if handle.eof?
55
64
  close_on_eof_(rtn)
56
65
  end
57
66
  rtn
58
67
  end
68
+ def close_on_eof1(&block)
69
+ #p callstr('close_on_eof',rtn)
70
+ if handle.eof?
71
+ close_on_eof_(nil)
72
+ yield
73
+ else
74
+ yield
75
+ end
76
+ end
59
77
  def close_on_eof_(rtn)
60
78
  #p callstr('close_on_eof_',rtn)
61
- # p @ios
62
79
  unless @autoclosed or closed?
63
- handle.close()
80
+ #handle.close()
64
81
  @oncloseproc.call() unless @oncloseproc.nil?
65
82
  @autoclosed = true
66
83
  end
67
84
  rtn
68
85
  end
69
86
 
70
- def readlines(*args) close_on_eof(super) end
71
- def each_line(*args,&block) close_on_eof(super) end
72
- def each_byte(*args,&block) close_on_eof(super) end
73
- def each_bytes(nb,*args,&block) close_on_eof(super) end
74
- def readline(*args) close_on_eof(super) end
75
- def read(*args) close_on_eof(super) end
76
- def readchar(*args) close_on_eof(super) end
77
- def gets(*args) close_on_eof(super) end
87
+ def each_line(*args,&block) close_on_eof{super} end
88
+ def each_byte(*args,&block) close_on_eof{super} end
89
+ def each_bytes(nb,*args,&block) close_on_eof{super} end
90
+
91
+ def readline(*args) close_on_eof{super} end
92
+
93
+ def readchar(*args) close_on_eof{super} end
94
+ def gets(*args) close_on_eof{super} end
95
+ def readlines(*args) close_on_eof{super} end
96
+
97
+ def read(*args) close_on_eof{super} end
78
98
 
79
- def copy_stream(dst) close_on_eof(super) end
80
- def contents() close_on_eof(super) end
99
+ def copy_stream(dst) close_on_eof{super} end
100
+ def contents() close_on_eof{super} end
81
101
  end
82
102
  end
83
103
  end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
data/lib/rio/filter.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -0,0 +1,42 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 2006 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. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+ module RIO
38
+ module FS
39
+ class Base
40
+ end
41
+ end
42
+ end