wishdev-rio 0.4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +341 -0
- data/README +81 -0
- data/Rakefile +281 -0
- data/build_doc.rb +94 -0
- data/doc/ANNOUNCE +159 -0
- data/doc/RELEASE_NOTES +308 -0
- data/doc/RIOIS +215 -0
- data/doc/generators/template/html/rio.css +428 -0
- data/doc/generators/template/html/rio.rb +523 -0
- data/doc/generators/template/html/ugly.rb +132 -0
- data/doc/pkg_def.rb +60 -0
- data/doc/rfc1738.txt +1403 -0
- data/doc/rfc959.txt +3933 -0
- data/ex/catcsv.rb +64 -0
- data/ex/colx.rb +8 -0
- data/ex/findinruby +15 -0
- data/ex/findruby +14 -0
- data/ex/passwd_report.rb +8 -0
- data/ex/prompt.rb +25 -0
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +42 -0
- data/ex/riogunzip +31 -0
- data/ex/riogzip +24 -0
- data/ex/rioprompt.rb +10 -0
- data/ex/targz2zip +17 -0
- data/ex/tonl +10 -0
- data/lib/rio/abstract_method.rb +56 -0
- data/lib/rio/argv.rb +56 -0
- data/lib/rio/arycopy.rb +43 -0
- data/lib/rio/assert.rb +114 -0
- data/lib/rio/base.rb +56 -0
- data/lib/rio/callstr.rb +46 -0
- data/lib/rio/const.rb +51 -0
- data/lib/rio/construct.rb +50 -0
- data/lib/rio/constructor.rb +258 -0
- data/lib/rio/context/autoclose.rb +72 -0
- data/lib/rio/context/copying.rb +55 -0
- data/lib/rio/context/cxx.rb +66 -0
- data/lib/rio/context/dir.rb +120 -0
- data/lib/rio/context/gzip.rb +50 -0
- data/lib/rio/context/methods.rb +182 -0
- data/lib/rio/context/skip.rb +66 -0
- data/lib/rio/context/stream.rb +229 -0
- data/lib/rio/context.rb +117 -0
- data/lib/rio/cp.rb +370 -0
- data/lib/rio/def.rb +53 -0
- data/lib/rio/dir.rb +144 -0
- data/lib/rio/doc/EXAMPLES.rb +299 -0
- data/lib/rio/doc/HOWTO.rb +737 -0
- data/lib/rio/doc/INDEX.rb +311 -0
- data/lib/rio/doc/INTRO.rb +1068 -0
- data/lib/rio/doc/OPTIONAL.rb +130 -0
- data/lib/rio/doc/SYNOPSIS.rb +183 -0
- data/lib/rio/doc.rb +45 -0
- data/lib/rio/entrysel.rb +246 -0
- data/lib/rio/exception/copy.rb +97 -0
- data/lib/rio/exception/notimplemented.rb +57 -0
- data/lib/rio/exception/notsupported.rb +46 -0
- data/lib/rio/exception/open.rb +61 -0
- data/lib/rio/exception/state.rb +73 -0
- data/lib/rio/exception.rb +41 -0
- data/lib/rio/ext/csv.rb +351 -0
- data/lib/rio/ext/if.rb +45 -0
- data/lib/rio/ext/mp3info.rb +80 -0
- data/lib/rio/ext/splitlines.rb +253 -0
- data/lib/rio/ext/yaml/doc.rb +133 -0
- data/lib/rio/ext/yaml/tie.rb +149 -0
- data/lib/rio/ext/yaml.rb +164 -0
- data/lib/rio/ext/zipfile/fs.rb +116 -0
- data/lib/rio/ext/zipfile/rl.rb +251 -0
- data/lib/rio/ext/zipfile/rootdir.rb +117 -0
- data/lib/rio/ext/zipfile/state.rb +161 -0
- data/lib/rio/ext/zipfile/wrap.rb +204 -0
- data/lib/rio/ext/zipfile.rb +110 -0
- data/lib/rio/ext.rb +138 -0
- data/lib/rio/factory.rb +436 -0
- data/lib/rio/file.rb +118 -0
- data/lib/rio/filter/closeoneof.rb +103 -0
- data/lib/rio/filter/gzip.rb +70 -0
- data/lib/rio/filter.rb +94 -0
- data/lib/rio/fs/base.rb +41 -0
- data/lib/rio/fs/impl.rb +122 -0
- data/lib/rio/fs/native.rb +75 -0
- data/lib/rio/fs/stream.rb +61 -0
- data/lib/rio/fs/url.rb +63 -0
- data/lib/rio/ftp/conncache.rb +101 -0
- data/lib/rio/ftp/dir.rb +94 -0
- data/lib/rio/ftp/fs.rb +180 -0
- data/lib/rio/ftp/ftpfile.rb +20 -0
- data/lib/rio/grande.rb +97 -0
- data/lib/rio/handle.rb +100 -0
- data/lib/rio/if/basic.rb +64 -0
- data/lib/rio/if/csv.rb +76 -0
- data/lib/rio/if/dir.rb +157 -0
- data/lib/rio/if/file.rb +89 -0
- data/lib/rio/if/fileordir.rb +268 -0
- data/lib/rio/if/grande.rb +729 -0
- data/lib/rio/if/grande_entry.rb +379 -0
- data/lib/rio/if/grande_stream.rb +693 -0
- data/lib/rio/if/internal.rb +125 -0
- data/lib/rio/if/path.rb +462 -0
- data/lib/rio/if/rubyio.rb +681 -0
- data/lib/rio/if/string.rb +83 -0
- data/lib/rio/if/temp.rb +45 -0
- data/lib/rio/if/test.rb +282 -0
- data/lib/rio/if/yaml.rb +206 -0
- data/lib/rio/if.rb +64 -0
- data/lib/rio/ioh.rb +162 -0
- data/lib/rio/iomode.rb +109 -0
- data/lib/rio/ios/fail.rb +106 -0
- data/lib/rio/ios/generic.rb +119 -0
- data/lib/rio/ios/mode.rb +60 -0
- data/lib/rio/ios/null.rb +119 -0
- data/lib/rio/iowrap.rb +128 -0
- data/lib/rio/kernel.rb +54 -0
- data/lib/rio/local.rb +62 -0
- data/lib/rio/match.rb +53 -0
- data/lib/rio/matchrecord.rb +283 -0
- data/lib/rio/no_warn.rb +49 -0
- data/lib/rio/nullio.rb +159 -0
- data/lib/rio/open3.rb +68 -0
- data/lib/rio/ops/construct.rb +61 -0
- data/lib/rio/ops/create.rb +77 -0
- data/lib/rio/ops/dir.rb +346 -0
- data/lib/rio/ops/either.rb +134 -0
- data/lib/rio/ops/file.rb +102 -0
- data/lib/rio/ops/path.rb +296 -0
- data/lib/rio/ops/stream/input.rb +267 -0
- data/lib/rio/ops/stream/output.rb +100 -0
- data/lib/rio/ops/stream/read.rb +86 -0
- data/lib/rio/ops/stream/write.rb +57 -0
- data/lib/rio/ops/stream.rb +87 -0
- data/lib/rio/ops/symlink.rb +80 -0
- data/lib/rio/path/reset.rb +69 -0
- data/lib/rio/path.rb +129 -0
- data/lib/rio/piper/cp.rb +80 -0
- data/lib/rio/piper.rb +122 -0
- data/lib/rio/prompt.rb +66 -0
- data/lib/rio/rectype.rb +88 -0
- data/lib/rio/rl/base.rb +118 -0
- data/lib/rio/rl/builder.rb +117 -0
- data/lib/rio/rl/chmap.rb +66 -0
- data/lib/rio/rl/fs2url.rb +82 -0
- data/lib/rio/rl/ioi.rb +78 -0
- data/lib/rio/rl/path.rb +110 -0
- data/lib/rio/rl/pathmethods.rb +116 -0
- data/lib/rio/rl/uri.rb +200 -0
- data/lib/rio/rl/withpath.rb +296 -0
- data/lib/rio/scheme/aryio.rb +88 -0
- data/lib/rio/scheme/cmdio.rb +80 -0
- data/lib/rio/scheme/cmdpipe.rb +118 -0
- data/lib/rio/scheme/fd.rb +65 -0
- data/lib/rio/scheme/ftp.rb +141 -0
- data/lib/rio/scheme/http.rb +78 -0
- data/lib/rio/scheme/null.rb +55 -0
- data/lib/rio/scheme/path.rb +98 -0
- data/lib/rio/scheme/stderr.rb +55 -0
- data/lib/rio/scheme/stdio.rb +71 -0
- data/lib/rio/scheme/strio.rb +87 -0
- data/lib/rio/scheme/sysio.rb +63 -0
- data/lib/rio/scheme/tcp.rb +75 -0
- data/lib/rio/scheme/temp.rb +200 -0
- data/lib/rio/state/error.rb +72 -0
- data/lib/rio/state.rb +242 -0
- data/lib/rio/stream/base.rb +54 -0
- data/lib/rio/stream/duplex.rb +79 -0
- data/lib/rio/stream/open.rb +202 -0
- data/lib/rio/stream.rb +181 -0
- data/lib/rio/symantics.rb +45 -0
- data/lib/rio/tempdir.rb +132 -0
- data/lib/rio/to_rio/all.rb +39 -0
- data/lib/rio/to_rio/array.rb +39 -0
- data/lib/rio/to_rio/io.rb +40 -0
- data/lib/rio/to_rio/object.rb +42 -0
- data/lib/rio/to_rio/string.rb +40 -0
- data/lib/rio/to_rio.rb +67 -0
- data/lib/rio/uri/file.rb +198 -0
- data/lib/rio/util.rb +48 -0
- data/lib/rio/version.rb +51 -0
- data/lib/rio.rb +162 -0
- data/setup.rb +1360 -0
- data/test/bin/count_lines.rb +11 -0
- data/test/bin/find_lines.rb +13 -0
- data/test/bin/list_dir.rb +14 -0
- data/test/ftp/all.rb +9 -0
- data/test/ftp/anon_copy_data.rb +36 -0
- data/test/ftp/anon_misc.rb +124 -0
- data/test/ftp/anon_read.rb +105 -0
- data/test/ftp/anon_special.rb +68 -0
- data/test/ftp/anon_write.rb +70 -0
- data/test/ftp/ftp2ftp.rb +51 -0
- data/test/ftp/initftpfiles.rb +14 -0
- data/test/ftp/testdef.rb +55 -0
- data/test/gem_runtests.rb +15 -0
- data/test/http/all.rb +4 -0
- data/test/http/copy-from-http.rb +141 -0
- data/test/http/uri-meta.rb +72 -0
- data/test/lib/temp_server.rb +46 -0
- data/test/runalltests.rb +17 -0
- data/test/runftptests.rb +14 -0
- data/test/runhttp.rb +11 -0
- data/test/runhttptests.rb +14 -0
- data/test/runtests.rb +52 -0
- data/test/tc/abs.rb +355 -0
- data/test/tc/all.rb +80 -0
- data/test/tc/base.rb +31 -0
- data/test/tc/base2.rb +87 -0
- data/test/tc/cd1.rb +113 -0
- data/test/tc/clearsel.rb +68 -0
- data/test/tc/clone.rb +208 -0
- data/test/tc/closeoncopy.rb +102 -0
- data/test/tc/closeoneof.rb +194 -0
- data/test/tc/cmdpipe.rb +149 -0
- data/test/tc/copy-dir-samevar.rb +91 -0
- data/test/tc/copy-from.rb +129 -0
- data/test/tc/copy-to.rb +91 -0
- data/test/tc/copy.rb +74 -0
- data/test/tc/copyarray.rb +188 -0
- data/test/tc/copydest.rb +50 -0
- data/test/tc/copydir.rb +166 -0
- data/test/tc/copydirlines.rb +121 -0
- data/test/tc/copylines.rb +46 -0
- data/test/tc/copynonex.rb +118 -0
- data/test/tc/copysymlink.rb +39 -0
- data/test/tc/create.rb +114 -0
- data/test/tc/csv.rb +226 -0
- data/test/tc/csv2.rb +138 -0
- data/test/tc/csv_columns.rb +37 -0
- data/test/tc/csvutil.rb +56 -0
- data/test/tc/dir.rb +76 -0
- data/test/tc/dir_iter.rb +383 -0
- data/test/tc/dirautoclose.rb +67 -0
- data/test/tc/dirent.rb +178 -0
- data/test/tc/dirss.rb +81 -0
- data/test/tc/each.rb +111 -0
- data/test/tc/each_break.rb +243 -0
- data/test/tc/edf.rb +81 -0
- data/test/tc/empty.rb +51 -0
- data/test/tc/emptyriodir.rb +129 -0
- data/test/tc/entary.rb +227 -0
- data/test/tc/entsel.rb +110 -0
- data/test/tc/eq.rb +101 -0
- data/test/tc/expand_path.rb +69 -0
- data/test/tc/ext.rb +136 -0
- data/test/tc/fileno.rb +94 -0
- data/test/tc/files_select.rb +92 -0
- data/test/tc/get.rb +152 -0
- data/test/tc/getrec.rb +137 -0
- data/test/tc/gzip.rb +109 -0
- data/test/tc/io_each_byte.rb +60 -0
- data/test/tc/io_read.rb +80 -0
- data/test/tc/iometh.rb +149 -0
- data/test/tc/likeio.rb +116 -0
- data/test/tc/line_record_row.rb +51 -0
- data/test/tc/lineno.rb +196 -0
- data/test/tc/lines.rb +66 -0
- data/test/tc/misc.rb +432 -0
- data/test/tc/nolines.rb +204 -0
- data/test/tc/noqae.rb +879 -0
- data/test/tc/null.rb +45 -0
- data/test/tc/once.rb +6 -0
- data/test/tc/overload.rb +140 -0
- data/test/tc/pa.rb +158 -0
- data/test/tc/path_parts.rb +175 -0
- data/test/tc/pathop.rb +60 -0
- data/test/tc/paths.rb +145 -0
- data/test/tc/pid.rb +31 -0
- data/test/tc/piper.rb +143 -0
- data/test/tc/programs_util.rb +24 -0
- data/test/tc/qae.rb +493 -0
- data/test/tc/qae_riovar.rb +499 -0
- data/test/tc/readline.rb +30 -0
- data/test/tc/records.rb +68 -0
- data/test/tc/rename.rb +233 -0
- data/test/tc/rename_assign.rb +45 -0
- data/test/tc/riorl.rb +181 -0
- data/test/tc/route.rb +51 -0
- data/test/tc/selnosel.rb +33 -0
- data/test/tc/skip.rb +89 -0
- data/test/tc/skiplines.rb +71 -0
- data/test/tc/split.rb +28 -0
- data/test/tc/splitlines.rb +65 -0
- data/test/tc/splitpath.rb +83 -0
- data/test/tc/sub.rb +46 -0
- data/test/tc/symlink.rb +176 -0
- data/test/tc/symlink0.rb +348 -0
- data/test/tc/symlink1.rb +114 -0
- data/test/tc/synopsis.rb +75 -0
- data/test/tc/temp.rb +152 -0
- data/test/tc/tempdir.rb +60 -0
- data/test/tc/tempfile.rb +66 -0
- data/test/tc/testcase.rb +170 -0
- data/test/tc/tonl.rb +37 -0
- data/test/tc/truncate.rb +39 -0
- data/test/tc/yaml.rb +275 -0
- metadata +387 -0
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
|