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/build_doc.rb
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#--
|
|
3
|
+
# ===============================================================================
|
|
4
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
5
|
+
# All rights reserved
|
|
6
|
+
#
|
|
7
|
+
# This file is part of the Rio library for ruby.
|
|
8
|
+
#
|
|
9
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
#
|
|
14
|
+
# Rio is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
# GNU General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# You should have received a copy of the GNU General Public License
|
|
20
|
+
# along with Rio; if not, write to the Free Software
|
|
21
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
22
|
+
# ===============================================================================
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#++
|
|
28
|
+
|
|
29
|
+
$:.unshift 'lib'
|
|
30
|
+
require 'rio'
|
|
31
|
+
require 'rio/prompt'
|
|
32
|
+
require 'doc/pkg_def'
|
|
33
|
+
|
|
34
|
+
module DFLT
|
|
35
|
+
RDOC_DIR = rio('doc/rdoc')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#puts "Rio interactive RDoc installer."
|
|
39
|
+
def doc_dir?(d)
|
|
40
|
+
have_dirs = ['classes','files'].inject(true) {|isdir,f| isdir and rio(d,f).dir?}
|
|
41
|
+
have_files = ['created.rid','fr_class_index.html',
|
|
42
|
+
'fr_file_index.html','fr_method_index.html',
|
|
43
|
+
'index.html','rdoc-style.css'].inject(true) { |isfile,f| isfile && rio(d,f).file? }
|
|
44
|
+
have_dirs && have_files
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rdoc_dir = RIO.promptr('Where shall I build the rdoc documentation',DFLT::RDOC_DIR)
|
|
48
|
+
|
|
49
|
+
if rdoc_dir.exist?
|
|
50
|
+
delit = 'y'
|
|
51
|
+
if rdoc_dir.dir?
|
|
52
|
+
unless doc_dir?(rdoc_dir)
|
|
53
|
+
delit = RIO.promptd("Directory '#{rdoc_dir}' exists. Would you like to delete it? ", 'n' )
|
|
54
|
+
end
|
|
55
|
+
else
|
|
56
|
+
delit = RIO.promptd("Non directory '#{rdoc_dir}' exists. Would you like to delete it? ", 'n' )
|
|
57
|
+
end
|
|
58
|
+
if delit =~ /^[yY]/
|
|
59
|
+
rio(rdoc_dir).delete!
|
|
60
|
+
else
|
|
61
|
+
exit(-1)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
rdoc_dir = rio(rdoc_dir)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
argv = []
|
|
70
|
+
argv << '--op' << rdoc_dir.to_s
|
|
71
|
+
argv += PKG::RDOC_OPTIONS
|
|
72
|
+
argv += PKG::FILES::DOC
|
|
73
|
+
|
|
74
|
+
require 'rdoc/rdoc'
|
|
75
|
+
begin
|
|
76
|
+
r = RDoc::RDoc.new
|
|
77
|
+
r.document(argv)
|
|
78
|
+
rescue RDoc::RDocError => e
|
|
79
|
+
$stderr.puts e.message
|
|
80
|
+
exit(1)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
docindex = (rdoc_dir/'index.html').abs.to_url
|
|
84
|
+
msg = "Please point your browser at '#{docindex}'"
|
|
85
|
+
lin = ">" + ">" * (msg.length+2) + ">"
|
|
86
|
+
|
|
87
|
+
puts
|
|
88
|
+
puts lin
|
|
89
|
+
puts "> " + msg + " >"
|
|
90
|
+
puts lin
|
|
91
|
+
__END__
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
data/doc/ANNOUNCE
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
Rio 0.4.3
|
|
2
|
+
|
|
3
|
+
= Rio - Ruby I/O Facilitator
|
|
4
|
+
|
|
5
|
+
fa-cil-i-tate: To make easy or easier.
|
|
6
|
+
|
|
7
|
+
== Overview
|
|
8
|
+
|
|
9
|
+
Rio is a facade for most of the standard ruby classes that deal with
|
|
10
|
+
I/O; providing a simple, intuitive, succinct interface to the
|
|
11
|
+
functionality provided by IO, File, Dir, Pathname, FileUtils,
|
|
12
|
+
Tempfile, StringIO, OpenURI and others. Rio also provides an
|
|
13
|
+
application level interface which allows many common I/O idioms to be
|
|
14
|
+
expressed succinctly.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
== SYNOPSIS
|
|
18
|
+
|
|
19
|
+
For the following assume:
|
|
20
|
+
astring = ""
|
|
21
|
+
anarray = []
|
|
22
|
+
|
|
23
|
+
Iterate over the .rb files in a directory.
|
|
24
|
+
rio('adir').files('*.rb') { |entrio| ... }
|
|
25
|
+
|
|
26
|
+
Return an array of the .rb files in a directory.
|
|
27
|
+
anarray = rio('adir').files['*.rb']
|
|
28
|
+
|
|
29
|
+
Copy the .rb files in a directory.to another directory.
|
|
30
|
+
rio('adir').files('*.rb') > rio('another_directory')
|
|
31
|
+
|
|
32
|
+
Iterate over the .rb files in a directory and its subdirectories.
|
|
33
|
+
rio('adir').all.files('*.rb') { |entrio| ... }
|
|
34
|
+
|
|
35
|
+
Return an array of the .rb files in a directory and its
|
|
36
|
+
subdirectories.
|
|
37
|
+
anarray = rio('adir').all.files['*.rb']
|
|
38
|
+
|
|
39
|
+
Copy or append a file to a string
|
|
40
|
+
rio('afile') > astring # copy
|
|
41
|
+
rio('afile') >> astring # append
|
|
42
|
+
|
|
43
|
+
Copy or append a string to a file
|
|
44
|
+
rio('afile') < astring # copy
|
|
45
|
+
rio('afile') << astring # append
|
|
46
|
+
|
|
47
|
+
Copy or append the lines of a file to an array
|
|
48
|
+
rio('afile') > anarray
|
|
49
|
+
rio('afile') >> anarray
|
|
50
|
+
|
|
51
|
+
Copy or append a file to another file
|
|
52
|
+
rio('afile') > rio('another_file')
|
|
53
|
+
rio('afile') >> rio('another_file')
|
|
54
|
+
|
|
55
|
+
Copy a file to a directory
|
|
56
|
+
rio('adir') << rio('afile')
|
|
57
|
+
|
|
58
|
+
Copy a directory to another directory
|
|
59
|
+
rio('adir') >> rio('another_directory')
|
|
60
|
+
|
|
61
|
+
Copy a web-page to a file
|
|
62
|
+
rio('http://rubydoc.org/') > rio('afile')
|
|
63
|
+
|
|
64
|
+
Read a web-page into a string
|
|
65
|
+
astring = rio('http://rubydoc.org/').read
|
|
66
|
+
|
|
67
|
+
Ways to get the chomped lines of a file into an array
|
|
68
|
+
anarray = rio('afile').chomp[] # subscript operator
|
|
69
|
+
rio('afile').chomp > anarray # copy-to operator
|
|
70
|
+
anarray = rio('afile').chomp.to_a # to_a
|
|
71
|
+
anarray = rio('afile').chomp.readlines # IO#readlines
|
|
72
|
+
|
|
73
|
+
Iterate over selected lines of a file
|
|
74
|
+
rio('adir').lines(0..3) { |aline| ... } # a range of lines
|
|
75
|
+
rio('adir').lines(/re/) { |aline| ... } # by regular expression
|
|
76
|
+
rio('adir').lines(0..3,/re/) { |aline| ... } # or both
|
|
77
|
+
|
|
78
|
+
Return selected lines of a file as an array
|
|
79
|
+
rio('adir').lines[0..3] # a range of lines
|
|
80
|
+
rio('adir').lines[/re/] # by regular expression
|
|
81
|
+
rio('adir').lines[0..3,/re/] # or both
|
|
82
|
+
|
|
83
|
+
Iterate over selected chomped lines of a file
|
|
84
|
+
rio('adir').chomp.lines(0..3) { |aline| ... } # a range of lines
|
|
85
|
+
rio('adir').chomp.lines(/re/) { |aline| ... } # by regular expression
|
|
86
|
+
|
|
87
|
+
Return selected chomped lines of a file as an array
|
|
88
|
+
rio('adir').chomp[0..3] # a range of lines
|
|
89
|
+
rio('adir').chomp[/re/] # by regular expression
|
|
90
|
+
|
|
91
|
+
Copy a gzipped file un-gzipping it
|
|
92
|
+
rio('afile.gz').gzip > rio('afile')
|
|
93
|
+
|
|
94
|
+
Copy a plain file, gzipping it
|
|
95
|
+
rio('afile.gz').gzip < rio('afile')
|
|
96
|
+
|
|
97
|
+
Copy a file from a ftp server into a local file un-gzipping it
|
|
98
|
+
rio('ftp://host/afile.gz').gzip > rio('afile')
|
|
99
|
+
|
|
100
|
+
Return an array of .rb files excluding symlinks to .rb files
|
|
101
|
+
rio('adir').files('*.rb').skip[:symlink?]
|
|
102
|
+
|
|
103
|
+
Put the first 10 chomped lines of a gzipped file into an array
|
|
104
|
+
anarray = rio('afile.gz').chomp.gzip[0...10]
|
|
105
|
+
|
|
106
|
+
Copy lines 0 and 3 thru 5 of a gzipped file on an ftp server to stdout
|
|
107
|
+
rio('ftp://host/afile.gz').gzip.lines(0,3..5) > ?-
|
|
108
|
+
|
|
109
|
+
Return an array of files in a directory and its subdirectories,
|
|
110
|
+
without descending into .svn directories.
|
|
111
|
+
rio('adir').norecurse(/^\.svn$/).files[]
|
|
112
|
+
|
|
113
|
+
Iterate over the non-empty, non-comment chomped lines of a file
|
|
114
|
+
rio('afile').chomp.skip(:empty?,/^\s*#/) { |line| ... }
|
|
115
|
+
|
|
116
|
+
Copy the output of th ps command into an array, skipping the header
|
|
117
|
+
line and the ps command entry
|
|
118
|
+
rio(?-,'ps -a').skiplines(0,/ps$/) > anarray
|
|
119
|
+
|
|
120
|
+
Prompt for input and return what was typed
|
|
121
|
+
ans = rio(?-).print("Type Something: ").chomp.gets
|
|
122
|
+
|
|
123
|
+
Change the extension of all .htm files in a directory and its
|
|
124
|
+
subdirectories to .html
|
|
125
|
+
rio('adir').rename.all.files('*.htm') do |htmfile|
|
|
126
|
+
htmfile.extname = '.html'
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
Copy a CSV file, changing the separator to a semicolon
|
|
130
|
+
rio('comma.csv').csv > rio('semicolon.csv').csv(';')
|
|
131
|
+
|
|
132
|
+
Iterate through a CSVfile with each line parsed into an array
|
|
133
|
+
rio('afile.csv').csv { |array_of_fields| ...}
|
|
134
|
+
|
|
135
|
+
Create a tab separated file of accounts in a UNIX passwd file,
|
|
136
|
+
listing only the username, uid, and realname fields
|
|
137
|
+
rio('/etc/passwd').csv(':').columns(0,2,4) > rio('rpt').csv("\t")
|
|
138
|
+
|
|
139
|
+
Pipe multiple commands
|
|
140
|
+
rio('afile') | rio(?-,'acmd') | 'another_cmd' | ?-
|
|
141
|
+
|
|
142
|
+
== Contact
|
|
143
|
+
|
|
144
|
+
Project:: http://rubyforge.org/projects/rio/
|
|
145
|
+
Documentation:: http://rio.rubyforge.org/
|
|
146
|
+
Bugs:: http://rubyforge.org/tracker/?group_id=821
|
|
147
|
+
Email:: rio4ruby@rubyforge.org
|
|
148
|
+
Blog:: http://rio4ruby.blogspot.com
|
|
149
|
+
|
|
150
|
+
== Copyright
|
|
151
|
+
== Ruby 1.9 Mods
|
|
152
|
+
Copyright (c) 2009 John W Higgins. All rights reserved
|
|
153
|
+
Copyright (c) 2005,2006,2007 Christopher Kleckner. All rights reserved
|
|
154
|
+
|
|
155
|
+
== License
|
|
156
|
+
Rio is released under the GNU General Public License
|
|
157
|
+
(http://www.gnu.org/licenses/gpl.html)
|
|
158
|
+
|
|
159
|
+
-Christopher Kleckner
|
data/doc/RELEASE_NOTES
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
=== Rio - Ruby I/O Facilitator
|
|
2
|
+
|
|
3
|
+
Rio is a facade for most of the standard ruby classes that deal with
|
|
4
|
+
I/O; providing a simple, intuitive, succinct interface to the
|
|
5
|
+
functionality provided by IO, File, Dir, Pathname, FileUtils,
|
|
6
|
+
Tempfile, StringIO, OpenURI and others. Rio also provides an
|
|
7
|
+
application level interface which allows many common I/O idioms to be
|
|
8
|
+
expressed succinctly.
|
|
9
|
+
|
|
10
|
+
fa-cil-i-tate: To make easy or easier.
|
|
11
|
+
|
|
12
|
+
To create the documentation for Rio run the command
|
|
13
|
+
ruby build_doc.rb
|
|
14
|
+
from the distribution directory.
|
|
15
|
+
|
|
16
|
+
Then point your browser at the 'doc/rdoc' directory.
|
|
17
|
+
|
|
18
|
+
Suggested Reading
|
|
19
|
+
* RIO::Doc::SYNOPSIS
|
|
20
|
+
* RIO::Doc::INTRO
|
|
21
|
+
* RIO::Doc::HOWTO
|
|
22
|
+
* RIO::Rio
|
|
23
|
+
|
|
24
|
+
== New for version 0.4.1
|
|
25
|
+
* Bug fixes to better handle file system paths with URI special
|
|
26
|
+
characters.
|
|
27
|
+
* Other bug fixes.
|
|
28
|
+
|
|
29
|
+
== New for version 0.4.0
|
|
30
|
+
* Alpha.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
== New for version 0.3.9
|
|
34
|
+
* Bug fixes, code cleanup.
|
|
35
|
+
* See Rio#split
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
== New for version 0.3.8
|
|
39
|
+
* Enhanced support for FTP file-systems. All of Rio's most powerful
|
|
40
|
+
idioms are now supported seamlessly on FTP servers.
|
|
41
|
+
|
|
42
|
+
# copy a file from or to an FTP server
|
|
43
|
+
rio('ftp://ahost/adir/afile') > rio('localfile') # server -> local file
|
|
44
|
+
rio('ftp://ahost/adir/afile') < rio('localfile') # local file -> server
|
|
45
|
+
|
|
46
|
+
# copy an entire directory structure from or to an FTP server
|
|
47
|
+
rio('ftp://ahost/adir') > rio('localdir') # server -> local directory
|
|
48
|
+
rio('ftp://ahost/adir') < rio('localdir') # local directory -> server
|
|
49
|
+
|
|
50
|
+
All of Rio's grande selection and filtering options are available for
|
|
51
|
+
files and directories on FTP servers.
|
|
52
|
+
|
|
53
|
+
# create a gzipped copy of a web page on an ftp server
|
|
54
|
+
rio('ftp://ftphost/f.html.gz').gzip < rio('http://httphost/f.html')
|
|
55
|
+
|
|
56
|
+
# dump the first 10 lines of a gzipped log file on an FTP server to stdout
|
|
57
|
+
rio('ftp://ftphost/logfile.txt').lines(0...10) > ?-
|
|
58
|
+
|
|
59
|
+
# iterate through the entries of a directory on an FTP server
|
|
60
|
+
rio('ftp://ftphost/adir').entries { |entrio| ... }
|
|
61
|
+
|
|
62
|
+
# get an array of all .rb files on an ftp server
|
|
63
|
+
rb_files = rio('ftp://ftphost/').all.files['*.rb']
|
|
64
|
+
|
|
65
|
+
* More tests
|
|
66
|
+
* Bug fixes
|
|
67
|
+
|
|
68
|
+
== Version 0.3.7
|
|
69
|
+
* Maintenance release
|
|
70
|
+
|
|
71
|
+
== New for version 0.3.6
|
|
72
|
+
* Pipe operator and command pipes
|
|
73
|
+
|
|
74
|
+
Pipe multiple commands
|
|
75
|
+
rio('afile') | rio(?-,'acmd') | 'another_cmd' | ?-
|
|
76
|
+
|
|
77
|
+
Run the same series of commands, with different input and/or output
|
|
78
|
+
cmdpipe = rio(?-,'acmd') | rio(?-,'another_cmd')
|
|
79
|
+
rio('infile1') | cmdpipe | rio('outfile1')
|
|
80
|
+
rio('infile2') | cmdpipe | rio('outfile2')
|
|
81
|
+
|
|
82
|
+
cmdpipe2 = rio(?|,'cmd1','cmd2',rio('outfile')) # create a cmdpipe Rio
|
|
83
|
+
rio('infile1') | cmdpipe2 # run with input coming from a file
|
|
84
|
+
rio(?-) | cmdpipe2 # same commands with input from stdin
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
== New for version 0.3.5
|
|
88
|
+
* Partial support for MS Windows drive and UNC path specifications
|
|
89
|
+
|
|
90
|
+
The separator must be '/'. Back-slashes are not supported.
|
|
91
|
+
|
|
92
|
+
Drives and UNC paths may be specified as expected:
|
|
93
|
+
rio("D:/adir/afile")
|
|
94
|
+
rio('//ahost/adir/afile')
|
|
95
|
+
|
|
96
|
+
This support has introduced a change in the behaviour
|
|
97
|
+
of Rio#path. Rio#path now returns the path on the
|
|
98
|
+
file-system for Rios that are on the file-system; returns the path
|
|
99
|
+
portion of the URL for FTP, HTTP and other Rios that
|
|
100
|
+
have a path, and return nil for Rios that have no path
|
|
101
|
+
rio('/a/b/c').path #==> "/a/b/c"
|
|
102
|
+
rio('b/c').path #==> "b/c"
|
|
103
|
+
rio('C:/b/c').path #==> "C:/b/c"
|
|
104
|
+
rio('//ahost/a/b').path #==> "//ahost/a/b"
|
|
105
|
+
rio('file://ahost/a/b').path #==> "//ahost/a/b"
|
|
106
|
+
rio('file:///a/b').path #==> "/a/b"
|
|
107
|
+
rio('file://localhost/a/b').path #==> "/a/b"
|
|
108
|
+
rio('http://ahost/index.html').path #==> "/index.html"
|
|
109
|
+
rio('stdin:').path #==> nil
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
== New for version 0.3.4
|
|
113
|
+
* New Grande Selection parameter.
|
|
114
|
+
|
|
115
|
+
A major weakness of Rio's selection methods (lines, files, etc.)
|
|
116
|
+
has always been that it only implemented a logical OR.
|
|
117
|
+
|
|
118
|
+
rio('afile').lines(0..10,/Rio/) {...}
|
|
119
|
+
iterates through lines that are in the range 0..10 OR
|
|
120
|
+
contain 'Rio'.
|
|
121
|
+
|
|
122
|
+
rio('adir').files(:executable?,'*.rb') {...}
|
|
123
|
+
iterates through files that are executable OR match '*.rb'
|
|
124
|
+
|
|
125
|
+
Selecting files that matched both required using a proc.
|
|
126
|
+
rio('adir').files(proc{ |f| f.executable? and f.fnmatch?('*.rb')}) {...}
|
|
127
|
+
|
|
128
|
+
Rio's grande selection methods will now accept an array of conditions
|
|
129
|
+
which must all be matched, in order to be selected. A logical AND.
|
|
130
|
+
|
|
131
|
+
rio('adir').files([:executable?,'*.rb']) {...}
|
|
132
|
+
|
|
133
|
+
The array, of course, need not be the only paramter.
|
|
134
|
+
|
|
135
|
+
rio('adir').files('*.exe',[:executable?,'*.rb']) {...}
|
|
136
|
+
|
|
137
|
+
selects .exe files and .rb files that are executable.
|
|
138
|
+
|
|
139
|
+
* Renamed some of grande rejection methods.
|
|
140
|
+
(based on a suggestion by Gavin Sinclair)
|
|
141
|
+
nolines => skiplines
|
|
142
|
+
nofiles => skipfiles
|
|
143
|
+
etc.
|
|
144
|
+
|
|
145
|
+
* New skip() grande method
|
|
146
|
+
rio('afile').skip.lines(/Rio/) # same as skiplines(/Rio/)
|
|
147
|
+
rio('afile').lines(/Rio/).skip(0..9) # lines with 'Rio', exclude
|
|
148
|
+
# the first ten lines
|
|
149
|
+
|
|
150
|
+
* Alternative syntaxes for creating Rios that have no path.
|
|
151
|
+
|
|
152
|
+
rio(?-) # create a Rio refering to stdio
|
|
153
|
+
rio(:stdio) # same thing.
|
|
154
|
+
rio.stdio # same thing
|
|
155
|
+
RIO.stdio # ditto
|
|
156
|
+
RIO::Rio.stdio # once again
|
|
157
|
+
|
|
158
|
+
* From Pathname added
|
|
159
|
+
* root?
|
|
160
|
+
* mountpoint?
|
|
161
|
+
* realpath
|
|
162
|
+
* cleanpath
|
|
163
|
+
|
|
164
|
+
* Removed Rio#slurp in favor of Rio#contents.
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
* Added aliases for the copy operators. (suggested by Dave Burt)
|
|
168
|
+
* copy_to >
|
|
169
|
+
* append_to >>
|
|
170
|
+
* copy_from <
|
|
171
|
+
* append_from <<
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
* Bug fixes and corrections
|
|
175
|
+
|
|
176
|
+
Project:: http://rubyforge.org/projects/rio/
|
|
177
|
+
Documentation:: http://rio.rubyforge.org/
|
|
178
|
+
Bugs:: http://rubyforge.org/tracker/?group_id=821
|
|
179
|
+
Email:: rio4ruby@rubyforge.org
|
|
180
|
+
|
|
181
|
+
== New for version 0.3.3
|
|
182
|
+
* Expanded support and documentation for CSV files
|
|
183
|
+
Examples:
|
|
184
|
+
* Copy, changing the separator to a semicolon
|
|
185
|
+
rio('comma.csv').csv > rio('semicolon.csv').csv(';')
|
|
186
|
+
* Iterate through a file with each line parsed into an array
|
|
187
|
+
rio('afile.csv').csv { |array_of_fields| ...}
|
|
188
|
+
* Create an array of arrays of selected fields
|
|
189
|
+
array_of_arrays = rio('afile.csv').csv.columns(1..3,7).to_a
|
|
190
|
+
* Create a tab separated file of accounts in a UNIX passwd file,
|
|
191
|
+
listing only the username, uid, and realname fields
|
|
192
|
+
rio('/etc/passwd').csv(':').columns(0,2,4) > rio('report).csv("\t")
|
|
193
|
+
|
|
194
|
+
Project:: http://rubyforge.org/projects/rio/
|
|
195
|
+
Documentation:: http://rio.rubyforge.org/
|
|
196
|
+
Bugs:: http://rubyforge.org/tracker/?group_id=821
|
|
197
|
+
|
|
198
|
+
== New for version 0.3.2
|
|
199
|
+
|
|
200
|
+
* Based on a suggestion by Wybo Decker and code attributed to Nobu Nokada,
|
|
201
|
+
Rio now supports temporary directories in addition to temporary files.
|
|
202
|
+
* Bug fixes
|
|
203
|
+
* More tests and documentation.
|
|
204
|
+
|
|
205
|
+
== SYNOPSIS
|
|
206
|
+
|
|
207
|
+
For the following assume:
|
|
208
|
+
astring = ""
|
|
209
|
+
anarray = []
|
|
210
|
+
|
|
211
|
+
Copy a file into a string
|
|
212
|
+
rio('afile') > astring
|
|
213
|
+
|
|
214
|
+
Copy the chomped lines of a file into an array
|
|
215
|
+
rio('afile').chomp > anarray
|
|
216
|
+
|
|
217
|
+
Copy a file into another file
|
|
218
|
+
rio('afile') > rio('another_file')
|
|
219
|
+
|
|
220
|
+
Copy a file into a directory
|
|
221
|
+
rio('afile') > rio('adir')
|
|
222
|
+
|
|
223
|
+
Copy an entire directory structure into another directory
|
|
224
|
+
rio('adir') > rio('another_directory')
|
|
225
|
+
|
|
226
|
+
Copy a web page into a file
|
|
227
|
+
rio('http://rubydoc.org/') > rio('afile')
|
|
228
|
+
|
|
229
|
+
Copy a file from a ftp server into a file
|
|
230
|
+
rio('ftp://host/afile.gz') > rio('afile.gz')
|
|
231
|
+
|
|
232
|
+
Copy a gzipped file un-gzipping it
|
|
233
|
+
rio('afile.gz').gzip > rio('afile')
|
|
234
|
+
|
|
235
|
+
Copy a file from a ftp server into a local file un-gzipping it
|
|
236
|
+
rio('ftp://host/afile.gz').gzip > rio('afile')
|
|
237
|
+
|
|
238
|
+
Copy a plain file, gzipping it
|
|
239
|
+
rio('afile.gz').gzip < rio('afile')
|
|
240
|
+
|
|
241
|
+
Iterate over the entries in a directory
|
|
242
|
+
rio('adir').entries { |entrio| ... }
|
|
243
|
+
|
|
244
|
+
Iterate over only the files in a directory
|
|
245
|
+
rio('adir').files { |entrio| ... }
|
|
246
|
+
|
|
247
|
+
Iterate over only the .rb files in a directory
|
|
248
|
+
rio('adir').files('*.rb') { |entrio| ... }
|
|
249
|
+
|
|
250
|
+
Create an array of the .rb entries in a directory
|
|
251
|
+
anarray = rio('adir')['*.rb']
|
|
252
|
+
|
|
253
|
+
Iterate over the .rb files in a directory and its subdirectories
|
|
254
|
+
rio('adir').all.files('*.rb') { |entrio| ... }
|
|
255
|
+
|
|
256
|
+
Create an array of the .rb entries in a directory and its subdirectories
|
|
257
|
+
anarray = rio('adir').all['*.rb']
|
|
258
|
+
|
|
259
|
+
Create an array of the .rb files in a directory and its subdirectories
|
|
260
|
+
anarray = rio('adir').all.files['*.rb']
|
|
261
|
+
|
|
262
|
+
Copy an entire directory structure but only the .rb files from a directory and its subdirectories
|
|
263
|
+
into another directory
|
|
264
|
+
rio('adir').dirs.files('*.rb') > rio('another_directory')
|
|
265
|
+
|
|
266
|
+
Iterate over the chomped lines of a file
|
|
267
|
+
rio('afile').chomp.lines { |line| ... }
|
|
268
|
+
|
|
269
|
+
Put the chomped lines of a file into an array
|
|
270
|
+
anarray = rio('afile').chomp.lines[]
|
|
271
|
+
|
|
272
|
+
Iterate over the first 10 chomped lines of a file
|
|
273
|
+
rio('afile').chomp.lines(0..9) { |line| ... }
|
|
274
|
+
|
|
275
|
+
Put the first 10 chomped lines of a file into an array
|
|
276
|
+
anarray = rio('afile').chomp.lines[0..9]
|
|
277
|
+
|
|
278
|
+
Copy the first 10 lines of a file into another file
|
|
279
|
+
rio('afile').lines(0..9) > rio('another_file')
|
|
280
|
+
|
|
281
|
+
Copy the first 10 lines of a file to stdout
|
|
282
|
+
rio('afile').lines(0..9) > rio(?-)
|
|
283
|
+
|
|
284
|
+
Copy the first 10 lines of a gzipped file to stdout
|
|
285
|
+
rio('afile.gz').gzip.lines(0..9) > rio(?-)
|
|
286
|
+
|
|
287
|
+
Copy the first 10 lines of a gzipped file on an ftp server to stdout
|
|
288
|
+
rio('ftp://host/afile.gz').gzip.lines(0..9) > rio(?-)
|
|
289
|
+
|
|
290
|
+
Put the first 100 chomped lines of a gzipped file into an array
|
|
291
|
+
anarray = rio('afile.gz').gzip[0...100]
|
|
292
|
+
|
|
293
|
+
Copy the output of th ps command into an array, skipping the header line and the ps command entry
|
|
294
|
+
rio(?-,'ps -a').skiplines(0,/ps$/) > anarray
|
|
295
|
+
|
|
296
|
+
Prompt for input and return what was typed
|
|
297
|
+
ans = rio(?-).print("Type Something: ").chomp.gets
|
|
298
|
+
|
|
299
|
+
Change the extension of all files with the extension '.htm' in a directory and its
|
|
300
|
+
subdirectories to have the extension '.html'
|
|
301
|
+
rio('adir').rename.all.files('*.htm') do |htmfile|
|
|
302
|
+
htmfile.extname = '.html'
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
Create a symbolic link 'asymlink' in 'adir' which refers to 'adir/afile'
|
|
306
|
+
rio('adir/afile').symlinke('adir/asymlink')
|
|
307
|
+
|
|
308
|
+
|