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
data/lib/rio/ext/if.rb ADDED
@@ -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__
@@ -0,0 +1,133 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
+ # All rights reserved
5
+ #
6
+ # This file is part of the Rio library for ruby.
7
+ #
8
+ # Rio is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Rio is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Rio; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # ===============================================================================
22
+ #++
23
+ #
24
+ # To create the documentation for Rio run the command
25
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ require 'rio/ops/path'
38
+ require 'rio/ops/dir'
39
+ require 'rio/filter/closeoneof'
40
+ require 'rio/ioh'
41
+ module RIO
42
+ module Ext
43
+ module YAML
44
+ module Doc #:nodoc: all
45
+ class Base < State::Base
46
+ include Ops::Path::Str
47
+ def open?() !ioh.nil? end
48
+ end
49
+
50
+ class NonExisting < Base
51
+ def check?() not self.exist? end
52
+ def when_missing(sym,*args) gofigure(sym,*args) end
53
+ end
54
+
55
+ class Existing < Base
56
+
57
+ def check?() self.file? end
58
+ def when_missing(sym,*args) yopen() end
59
+
60
+ public
61
+
62
+ def yopen()
63
+ become 'Ext::YAML::Doc::Open'
64
+ end
65
+ end
66
+ class Open < Base
67
+ def check?() true end
68
+ def open(m=nil,*args) open_(*args) end
69
+ def open_(*args)
70
+ unless open?
71
+ self.ioh = RIO::Ext::YAML::Tie::Doc.new(self.fspath).open
72
+ end
73
+ self
74
+ end
75
+ def when_missing(sym,*args)
76
+ nobj = open_.ystream()
77
+ return nobj unless nobj.nil?
78
+ gofigure(sym,*args)
79
+ end
80
+
81
+ def ystream()
82
+ #cl = 'Dir::Stream'
83
+ #p "LOOP: retry: #{cx['retrystate'].inspect} => #{cl}"
84
+ #return nil if cx['retrystate'] == cl
85
+ #cx['retrystate'] = cl
86
+
87
+ become('Ext::YAML::Doc::Stream')
88
+ end
89
+ end
90
+ class Stream < Base
91
+ def check?() open? end
92
+ def when_missing(sym,*args) retryreset() end
93
+ def base_state() 'Ext::YAML::Doc::Close' end
94
+ def reset() self.close.softreset() end
95
+ alias :copyclose :reset
96
+ def doc() self.ioh end
97
+ def [](arg)
98
+ doc[arg]
99
+ end
100
+ end
101
+ class Close < Base
102
+
103
+ def close()
104
+ #p callstr('close')+" mode='#{mode?}' ioh=#{self.ioh} open?=#{open?}"
105
+ return self unless self.open?
106
+ self.close_
107
+ cx['retrystate'] = nil
108
+ self
109
+ end
110
+
111
+ def close_()
112
+ #p callstr('close_')+" ioh=#{self.ioh} open?=#{open?}"
113
+ return self unless self.open?
114
+ #self.clear_selection
115
+ self.ioh.close
116
+ self.ioh = nil
117
+ self.rl.close
118
+ self
119
+ end
120
+ protected :close_
121
+
122
+ def check?() true end
123
+ def when_missing(sym,*args)
124
+ # p callstr('when_missing',sym,*args)
125
+ self.close_.retryreset()
126
+ end
127
+ end
128
+
129
+
130
+ end
131
+ end
132
+ end
133
+ end # module RIO