rio 0.3.8 → 0.3.9

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 (223) hide show
  1. data/README +18 -12
  2. data/Rakefile +57 -87
  3. data/build_doc.rb +19 -17
  4. data/doc/ANNOUNCE +3 -32
  5. data/doc/RELEASE_NOTES +4 -5
  6. data/doc/RIOIS +215 -0
  7. data/doc/generators/template/html/rio.css +428 -0
  8. data/doc/generators/template/html/rio.rb +18 -389
  9. data/doc/generators/template/html/ugly.rb +130 -0
  10. data/doc/pkg_def.rb +66 -0
  11. data/ex/catcsv.rb +64 -0
  12. data/ex/colx.rb +8 -0
  13. data/ex/findinruby +15 -0
  14. data/ex/findruby +14 -0
  15. data/ex/passwd_report.rb +8 -0
  16. data/ex/prompt.rb +25 -0
  17. data/ex/rgb.txt.gz +0 -0
  18. data/ex/riocat +42 -0
  19. data/ex/riogunzip +31 -0
  20. data/ex/riogzip +24 -0
  21. data/ex/rioprompt.rb +10 -0
  22. data/ex/targz2zip +17 -0
  23. data/ex/tonl +10 -0
  24. data/lib/rio.rb +16 -10
  25. data/lib/rio/abstract_method.rb +3 -4
  26. data/lib/rio/argv.rb +3 -4
  27. data/lib/rio/arycopy.rb +3 -4
  28. data/lib/rio/assert.rb +3 -4
  29. data/lib/rio/base.rb +3 -4
  30. data/lib/rio/callstr.rb +3 -4
  31. data/lib/rio/const.rb +3 -4
  32. data/lib/rio/construct.rb +3 -4
  33. data/lib/rio/constructor.rb +12 -8
  34. data/lib/rio/context.rb +15 -30
  35. data/lib/rio/context/autoclose.rb +3 -4
  36. data/lib/rio/context/copying.rb +3 -4
  37. data/lib/rio/context/cxx.rb +3 -4
  38. data/lib/rio/context/dir.rb +3 -4
  39. data/lib/rio/context/gzip.rb +3 -4
  40. data/lib/rio/context/methods.rb +16 -5
  41. data/lib/rio/context/skip.rb +3 -4
  42. data/lib/rio/context/stream.rb +42 -5
  43. data/lib/rio/cp.rb +7 -7
  44. data/lib/rio/def.rb +3 -4
  45. data/lib/rio/dir.rb +3 -4
  46. data/lib/rio/doc.rb +4 -5
  47. data/lib/rio/doc/EXAMPLES.rb +299 -0
  48. data/lib/rio/doc/HOWTO.rb +3 -4
  49. data/lib/rio/doc/INTRO.rb +86 -105
  50. data/lib/rio/doc/OPTIONAL.rb +4 -5
  51. data/lib/rio/doc/SYNOPSIS.rb +7 -6
  52. data/lib/rio/entrysel.rb +21 -23
  53. data/lib/rio/exception.rb +3 -4
  54. data/lib/rio/exception/copy.rb +3 -4
  55. data/lib/rio/exception/notimplemented.rb +57 -0
  56. data/lib/rio/exception/notsupported.rb +3 -4
  57. data/lib/rio/exception/open.rb +3 -4
  58. data/lib/rio/exception/state.rb +3 -4
  59. data/lib/rio/ext.rb +47 -13
  60. data/lib/rio/ext/csv.rb +4 -5
  61. data/lib/rio/ext/if.rb +45 -0
  62. data/lib/rio/ext/mp3info.rb +80 -0
  63. data/lib/rio/ext/splitlines.rb +253 -0
  64. data/lib/rio/ext/yaml.rb +9 -5
  65. data/lib/rio/ext/yaml/doc.rb +133 -0
  66. data/lib/rio/ext/yaml/tie.rb +149 -0
  67. data/lib/rio/ext/zipfile.rb +23 -4
  68. data/lib/rio/ext/zipfile/fs.rb +116 -0
  69. data/lib/rio/ext/zipfile/rl.rb +251 -0
  70. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  71. data/lib/rio/ext/zipfile/state.rb +161 -0
  72. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  73. data/lib/rio/factory.rb +235 -27
  74. data/lib/rio/file.rb +4 -4
  75. data/lib/rio/filter.rb +3 -4
  76. data/lib/rio/filter/closeoneof.rb +3 -4
  77. data/lib/rio/filter/gzip.rb +9 -4
  78. data/lib/rio/fs/base.rb +3 -4
  79. data/lib/rio/fs/impl.rb +4 -5
  80. data/lib/rio/fs/native.rb +3 -4
  81. data/lib/rio/fs/stream.rb +3 -4
  82. data/lib/rio/fs/url.rb +3 -4
  83. data/lib/rio/ftp/conncache.rb +19 -5
  84. data/lib/rio/ftp/dir.rb +3 -4
  85. data/lib/rio/ftp/fs.rb +30 -24
  86. data/lib/rio/grande.rb +27 -7
  87. data/lib/rio/handle.rb +3 -4
  88. data/lib/rio/if.rb +19 -15
  89. data/lib/rio/if/basic.rb +7 -7
  90. data/lib/rio/if/csv.rb +5 -6
  91. data/lib/rio/if/dir.rb +120 -114
  92. data/lib/rio/if/file.rb +52 -44
  93. data/lib/rio/if/fileordir.rb +217 -211
  94. data/lib/rio/if/grande.rb +674 -644
  95. data/lib/rio/if/grande_entry.rb +321 -313
  96. data/lib/rio/if/grande_stream.rb +653 -553
  97. data/lib/rio/if/internal.rb +3 -4
  98. data/lib/rio/if/path.rb +425 -426
  99. data/lib/rio/if/rubyio.rb +681 -0
  100. data/lib/rio/if/string.rb +42 -5
  101. data/lib/rio/if/temp.rb +3 -4
  102. data/lib/rio/if/test.rb +245 -238
  103. data/lib/rio/if/yaml.rb +15 -41
  104. data/lib/rio/ioh.rb +7 -5
  105. data/lib/rio/iomode.rb +19 -7
  106. data/lib/rio/ios/fail.rb +4 -5
  107. data/lib/rio/ios/generic.rb +4 -5
  108. data/lib/rio/ios/mode.rb +4 -5
  109. data/lib/rio/ios/null.rb +6 -7
  110. data/lib/rio/iowrap.rb +3 -4
  111. data/lib/rio/kernel.rb +3 -5
  112. data/lib/rio/local.rb +3 -4
  113. data/lib/rio/match.rb +3 -4
  114. data/lib/rio/matchrecord.rb +3 -4
  115. data/lib/rio/no_warn.rb +3 -4
  116. data/lib/rio/nullio.rb +3 -4
  117. data/lib/rio/open3.rb +4 -5
  118. data/lib/rio/ops/construct.rb +3 -4
  119. data/lib/rio/ops/create.rb +11 -6
  120. data/lib/rio/ops/dir.rb +19 -8
  121. data/lib/rio/ops/either.rb +6 -5
  122. data/lib/rio/ops/file.rb +3 -4
  123. data/lib/rio/ops/path.rb +14 -35
  124. data/lib/rio/ops/stream.rb +3 -4
  125. data/lib/rio/ops/stream/input.rb +4 -7
  126. data/lib/rio/ops/stream/output.rb +3 -4
  127. data/lib/rio/ops/stream/read.rb +6 -5
  128. data/lib/rio/ops/stream/write.rb +3 -4
  129. data/lib/rio/ops/symlink.rb +3 -4
  130. data/lib/rio/path.rb +22 -18
  131. data/lib/rio/path/reset.rb +4 -5
  132. data/lib/rio/piper.rb +3 -4
  133. data/lib/rio/piper/cp.rb +3 -4
  134. data/lib/rio/prompt.rb +10 -5
  135. data/lib/rio/rectype.rb +5 -5
  136. data/lib/rio/rl/base.rb +17 -71
  137. data/lib/rio/rl/builder.rb +14 -38
  138. data/lib/rio/rl/chmap.rb +66 -0
  139. data/lib/rio/rl/fs2url.rb +82 -0
  140. data/lib/rio/rl/ioi.rb +4 -4
  141. data/lib/rio/rl/path.rb +44 -122
  142. data/lib/rio/rl/pathmethods.rb +19 -8
  143. data/lib/rio/rl/uri.rb +137 -60
  144. data/lib/rio/rl/withpath.rb +295 -0
  145. data/lib/rio/scheme/aryio.rb +3 -4
  146. data/lib/rio/scheme/cmdio.rb +3 -4
  147. data/lib/rio/scheme/cmdpipe.rb +4 -4
  148. data/lib/rio/scheme/fd.rb +3 -4
  149. data/lib/rio/scheme/ftp.rb +7 -7
  150. data/lib/rio/scheme/http.rb +4 -5
  151. data/lib/rio/scheme/null.rb +3 -4
  152. data/lib/rio/scheme/path.rb +3 -4
  153. data/lib/rio/scheme/stderr.rb +3 -4
  154. data/lib/rio/scheme/stdio.rb +3 -4
  155. data/lib/rio/scheme/strio.rb +3 -4
  156. data/lib/rio/scheme/sysio.rb +3 -4
  157. data/lib/rio/scheme/tcp.rb +3 -4
  158. data/lib/rio/scheme/temp.rb +6 -6
  159. data/lib/rio/state.rb +18 -46
  160. data/lib/rio/state/error.rb +3 -4
  161. data/lib/rio/stream.rb +4 -4
  162. data/lib/rio/stream/base.rb +3 -4
  163. data/lib/rio/stream/duplex.rb +3 -4
  164. data/lib/rio/stream/open.rb +3 -8
  165. data/lib/rio/symantics.rb +3 -4
  166. data/lib/rio/tempdir.rb +2 -2
  167. data/lib/rio/to_rio.rb +3 -4
  168. data/lib/rio/to_rio/all.rb +3 -4
  169. data/lib/rio/to_rio/array.rb +4 -5
  170. data/lib/rio/to_rio/io.rb +4 -5
  171. data/lib/rio/to_rio/object.rb +4 -5
  172. data/lib/rio/to_rio/string.rb +4 -5
  173. data/lib/rio/uri/file.rb +41 -5
  174. data/lib/rio/util.rb +3 -4
  175. data/lib/rio/version.rb +4 -5
  176. data/setup.rb +368 -339
  177. data/test/bin/list_dir.rb +1 -1
  178. data/test/ftp/anon_misc.rb +13 -1
  179. data/test/ftp/anon_special.rb +6 -6
  180. data/test/ftp/anon_write.rb +10 -3
  181. data/test/ftp/ftp2ftp.rb +2 -2
  182. data/test/ftp/testdef.rb +9 -6
  183. data/test/http/all.rb +3 -0
  184. data/test/http/copy-from-http.rb +140 -0
  185. data/test/lib/temp_server.rb +44 -0
  186. data/test/runalltests.rb +3 -1
  187. data/test/runhttp.rb +12 -0
  188. data/test/runhttptests.rb +1 -1
  189. data/test/runtests.rb +41 -3
  190. data/test/tc/abs.rb +9 -5
  191. data/test/tc/all.rb +9 -4
  192. data/test/tc/base.rb +1 -1
  193. data/test/tc/base2.rb +87 -0
  194. data/test/tc/{methods.rb → clone.rb} +72 -50
  195. data/test/tc/closeoncopy.rb +13 -2
  196. data/test/tc/copy-dir-samevar.rb +91 -0
  197. data/test/tc/dir_iter.rb +0 -1
  198. data/test/tc/empty.rb +6 -2
  199. data/test/tc/expand_path.rb +36 -54
  200. data/test/tc/ext.rb +42 -18
  201. data/test/tc/gzip.rb +30 -3
  202. data/test/tc/likeio.rb +5 -1
  203. data/test/tc/line_record_row.rb +51 -0
  204. data/test/tc/noqae.rb +71 -70
  205. data/test/tc/path_parts.rb +175 -0
  206. data/test/tc/programs_util.rb +3 -3
  207. data/test/tc/rename.rb +4 -5
  208. data/test/tc/riorl.rb +9 -7
  209. data/test/tc/skip.rb +35 -6
  210. data/test/tc/skiplines.rb +34 -5
  211. data/test/tc/split.rb +8 -50
  212. data/test/tc/splitlines.rb +65 -0
  213. data/test/tc/splitpath.rb +83 -0
  214. data/test/tc/testcase.rb +1 -1
  215. data/test/tc/truncate.rb +39 -0
  216. data/test/tc/yaml.rb +9 -8
  217. metadata +261 -207
  218. data/ChangeLog +0 -1418
  219. data/VERSION +0 -1
  220. data/lib/rio/doc/MISC.rb +0 -259
  221. data/lib/rio/if/stream.rb +0 -680
  222. data/lib/rio/impl/path.rb +0 -87
  223. data/test/tc/copy-from-http.rb +0 -89
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  # begin
@@ -139,7 +138,7 @@ module RIO
139
138
 
140
139
  def to_rec_(raw_rec)
141
140
  #_init_cols_from_line(raw_rec) if @recno == 0
142
- #p "#{callstr('to_rec_',raw_rec,@recno)} ; itertype=#{cx['stream_itertype']}"
141
+ #p "#{callstr('to_rec_',raw_rec.inspect,@recno)} ; itertype=#{cx['stream_itertype']}"
143
142
  case cx['stream_itertype']
144
143
  when 'lines'
145
144
  if $EXTEND_CSV_RESULTS
@@ -0,0 +1,45 @@
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
+ module RIO
37
+ module IF
38
+ module Ext
39
+ def zipfile(arg=true,&block)
40
+ require 'rio/ext/zipfile'
41
+ target.zipfile(arg,&block)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,80 @@
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 'mp3info'
38
+ require 'forwardable'
39
+ module RIO
40
+ module Ext
41
+ module Mp3Info
42
+ def mp3info() ::Mp3Info.new(self.fspath) end
43
+
44
+ extend Forwardable
45
+
46
+ def_instance_delegators(:mp3info,:tag,:bitrate,:samplerate)
47
+ def_instance_delegators(:tag,:tracknum)
48
+ def title() _chop0(tag.title) end
49
+ def album() _chop0(tag.album) end
50
+ def artist() _chop0(tag.artist) end
51
+ def year() _chop0(tag.year.to_s) end
52
+ def mp3length() mp3info.length end
53
+ def vbr() mp3info.vbr end
54
+ alias :vbr? :vbr
55
+ def time()
56
+ t = Time.at(mp3length).getutc
57
+ t.strftime(t.hour == 0 ? "%M:%S" : "%H:%M:%S")
58
+ end
59
+
60
+ private
61
+
62
+ def _chop0(str)
63
+ str && str.length > 0 && str[-1] == 0 ? str.chop : str
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+
70
+ module RIO
71
+ module Ops
72
+ module File
73
+ module Existing
74
+ include RIO::Ext::Mp3Info
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ __END__
@@ -0,0 +1,253 @@
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
+ # begin
38
+ # require 'faster_csv' # first choice--for speed
39
+
40
+ # # A CSV compatible interface for FasterCSV.
41
+ # module CSV # :nodoc:
42
+ # def self.parse_line( line, field_sep=nil, row_sep=nil )
43
+ # FasterCSV.parse_line( line, :col_sep => field_sep || ",",
44
+ # :row_sep => row_sep || :auto )
45
+ # end
46
+
47
+ # def self.generate_line( array, field_sep=nil, row_sep=nil )
48
+ # FasterCSV.generate_line( array, :col_sep => field_sep || ",",
49
+ # :row_sep => row_sep || "" )
50
+ # end
51
+ # end
52
+ # rescue LoadError
53
+ # require 'csv' # second choice--slower but standard
54
+ # end
55
+
56
+ module RIO
57
+ module Ext
58
+ module SplitLines
59
+ module Cx
60
+ def splitlines(sep=',',&block)
61
+ #p callstr('splitlines',sep)
62
+ cx['split_lines_sep'] = sep
63
+ cxx('splitlines',true,&block)
64
+ end
65
+ def splitlines?() cxx?('splitlines') end
66
+ def splitlines_(sep=',',rs=nil)
67
+ cx['split_lines_sep'] = sep
68
+ cxx_('splitlines',true)
69
+ end
70
+ protected :splitlines_
71
+ def columns(*ranges,&block)
72
+ if skipping?
73
+ cx['skipping'] = false
74
+ skipcolumns(*args,&block)
75
+ else
76
+ @cnames = nil
77
+ cx['col_args'] = ranges.flatten
78
+ cxx('columns',true,&block)
79
+ end
80
+ end
81
+ def skipcolumns(*ranges,&block)
82
+ @cnames = nil
83
+ cx['nocol_args'] = ranges.flatten
84
+ cxx('columns',true,&block)
85
+ end
86
+ def columns?()
87
+ cxx?('columns')
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ module RIO
94
+ module Ext
95
+ module SplitLines
96
+ module Input
97
+
98
+ protected
99
+
100
+ def to_rec_(raw_rec)
101
+ #_init_cols_from_line(raw_rec) if @recno == 0
102
+ #p "#{callstr('to_rec_',raw_rec.inspect,@recno)} ; itertype=#{cx['stream_itertype']}"
103
+ case cx['stream_itertype']
104
+ when 'lines'
105
+ raw_rec
106
+ when 'records'
107
+ _l2record(raw_rec,cx['split_lines_sep'])
108
+ else
109
+ _l2record(raw_rec,cx['split_lines_sep'])
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ def trim(fields)
116
+ #p callstr('trim',fields)
117
+ ycols = cx['col_args']
118
+ ncols = cx['nocol_args']
119
+ return [] if ncols and ncols.empty?
120
+ if ycols.nil? and ncols.nil?
121
+ return fields
122
+ end
123
+ ncols = [] if ncols.nil?
124
+ ycols = [(0...fields.size)] if ycols.nil? or ycols.empty?
125
+ cols = []
126
+ fields.each_index { |i|
127
+ yes = nil
128
+ no = nil
129
+ ycols.each { |yc|
130
+ if yc === i
131
+ yes = true
132
+ break
133
+ end
134
+ }
135
+ ncols.each { |nc|
136
+ if nc === i
137
+ no = true
138
+ break
139
+ end
140
+ }
141
+
142
+ cols << i if yes and !no
143
+ }
144
+ tfields = []
145
+ cols.each do |i|
146
+ tfields << fields[i]
147
+ end
148
+ tfields
149
+ end
150
+ def parse_line_(line,sep)
151
+ #p callstr('parse_line_',line,sep)
152
+ line.split(sep)
153
+ end
154
+ def _l2a(line,sep)
155
+ parse_line_(line,dep)
156
+ end
157
+ def _l2record(line,sep)
158
+ #p callstr('_l2record',line,sep)
159
+ trim(parse_line_(line,sep))
160
+ end
161
+
162
+ def _init_cols_from_line(line)
163
+ ary = _l2record(line,cx['split_lines_sep'])
164
+ _init_cols_from_ary(ary)
165
+ end
166
+
167
+ def _init_cols_from_num(num)
168
+ fake_rec = (0...num).map { |n| "Column#{num}" }
169
+ _init_cols_from_ary(fake_rec)
170
+ end
171
+ def _init_cols_from_hash(hash)
172
+ _init_cols_from_ary(hash.keys)
173
+ end
174
+ def _init_cols_from_ary(ary)
175
+ #p callstr('_init_cols_from_ary',ary)
176
+ if columns?
177
+ cx['col_names'] = []
178
+ cx['col_nums'] = []
179
+
180
+ ary.each_with_index do |cname,idx|
181
+ cx['col_args'].each do |arg|
182
+ if arg === ( arg.kind_of?(::Regexp) || arg.kind_of?(::String) ? cname : idx )
183
+ cx['col_names'] << cname
184
+ cx['col_nums'] << idx
185
+ end
186
+ end
187
+ end
188
+ else
189
+ cx['col_names'] = ary
190
+ end
191
+ cx.values_at('col_nums','col_names')
192
+ end
193
+
194
+ end
195
+ end
196
+
197
+ module SplitLines
198
+ module Output
199
+
200
+ public
201
+
202
+ def putrow(*argv)
203
+ row = ( argv.length == 1 && argv[0].kind_of?(::Array) ? argv[0] : argv )
204
+ self.puts(row.join(self.cx['split_lines_sep']))
205
+ end
206
+ def putrow!(*argv)
207
+ putrow(*argv)
208
+ close
209
+ end
210
+
211
+ protected
212
+
213
+ def put_(arg,sep=cx['split_lines_sep'])
214
+ #p callstr('put_',arg.inspect,fs,rs)
215
+ puts(_to_line(arg,sep))
216
+ end
217
+
218
+ def cpfrom_array_(ary)
219
+ #p callstr('copy_from_array',ary.inspect)
220
+ if ary.empty?
221
+ super
222
+ else
223
+ if ary[0].kind_of? ::Array
224
+ super
225
+ else
226
+ put_(ary)
227
+ end
228
+ end
229
+ end
230
+
231
+ private
232
+
233
+ def _to_line(arg,sep=cx['split_lines_sep'])
234
+ #p callstr('_to_line',arg.inspect,fs,rs)
235
+ case arg
236
+ when ::Array
237
+ _ary_to_line(arg,sep)
238
+ when ::Hash
239
+ _ary_to_line(arg.values,sep)
240
+ else
241
+ arg
242
+ end
243
+ end
244
+
245
+ def _ary_to_line(ary,sep)
246
+ ary.join(sep)
247
+ end
248
+ public
249
+ end
250
+ end
251
+ end
252
+ end
253
+ __END__
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  require 'yaml'
@@ -44,6 +43,10 @@ module RIO
44
43
  def yaml(&block)
45
44
  cxx('yaml',true,&block)
46
45
  end
46
+ def yamldoc(&block)
47
+ #@yamldoc = YAML::Tie::Doc.new(self.fspath).open
48
+ become('Ext::YAML::Doc::Existing')
49
+ end
47
50
  def yaml?() cxx?('yaml') end
48
51
  def yaml_(fs=',',rs=nil)
49
52
  cxx_('yaml',true)
@@ -57,6 +60,7 @@ module RIO
57
60
  end
58
61
  module YAML
59
62
  module Input
63
+
60
64
  def cpto_(arg)
61
65
  #p callstr('cpto_',arg.inspect)
62
66
 
@@ -92,7 +96,7 @@ module RIO
92
96
  }
93
97
  end
94
98
  def cpto_string_(string)
95
- string << YAML.dump_stream(self.contents)
99
+ string << ::YAML.dump_stream(self.contents)
96
100
  end
97
101
  def get_(arg=nil)
98
102
  case cx['stream_itertype']