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/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
+