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/ex/catcsv.rb ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'rio'
4
+ require 'rio/argv'
5
+ # Concatonate all the CSV files in a directory, but only include the header
6
+ # line from one of them.
7
+ require 'optparse'
8
+ require 'optparse/time'
9
+ require 'ostruct'
10
+ require 'pp'
11
+
12
+ class CatCSVOptions
13
+
14
+ #
15
+ # Return a structure describing the options.
16
+ #
17
+ def self.parse(args)
18
+ # The options specified on the command line will be collected in *options*.
19
+ # We set default values here.
20
+ options = OpenStruct.new
21
+ options.outfile = nil
22
+
23
+ opts = OptionParser.new do |opts|
24
+ opts.banner = "Usage: #{$0} [options] csv_directory"
25
+
26
+ opts.separator ""
27
+ opts.separator "Specific options:"
28
+
29
+ opts.on("-o", "--output [OUTPUT_FILE]", "Specify the output CSV file") do |ofile|
30
+ options.outfile = ofile
31
+ end
32
+
33
+ # No argument, shows at tail. This will print an options summary.
34
+ # Try it and see!
35
+ opts.on_tail("-h", "--help", "Show this message") do
36
+ puts opts
37
+ exit
38
+ end
39
+
40
+ # Print the version.
41
+ opts.on_tail("--version", "Show version") do
42
+ puts OptionParser::Version.join('.')
43
+ exit
44
+ end
45
+ end
46
+
47
+ opts.parse!(args)
48
+ options
49
+ end # parse()
50
+
51
+ end
52
+
53
+ options = CatCSVOptions.parse(ARGV)
54
+
55
+ csvdir = RIO.ARGV.shift
56
+ unless csvdir
57
+ puts options
58
+ exit
59
+ end
60
+ output_file = options.outfile ? rio(options.outfile) : rio(csvdir.filename + '.all.csv')
61
+
62
+ output_file << rio(csvdir).files['*.csv'][0][0] << rio(csvdir).skip.lines(0)
63
+
64
+ __END__
data/ex/colx.rb ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rio'
3
+
4
+ RGBFILE = rio(__FILE__).dirname/'rgb.txt.gz'
5
+
6
+ RGBFILE.gzip.lines(/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\S.+)/) do |line,ma|
7
+ printf("#%02x%02x%02x\t%s\n",*ma[1..4])
8
+ end
data/ex/findinruby ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rio'
4
+ require 'rio/argv'
5
+
6
+ re = ARGV.shift
7
+
8
+ is_ruby_exe = proc{ |f| f.executable? and f.line[0] =~ /^#!.+ruby/ }
9
+
10
+ RIO.ARGV.each do |rpath|
11
+ rpath.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) do |f|
12
+ print f.lines(/#{re}/).map{ |l| "#{f}: #{l}" }
13
+ end
14
+ end
15
+ __END__
data/ex/findruby ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rio'
4
+ require 'rio/argv'
5
+
6
+ is_ruby_exe = proc{ |f| f.executable? and f.line[0] =~ /^#!.+ruby/ }
7
+
8
+ RIO.ARGV.each do |rpath|
9
+ rpath.norecurse('.svn','pkg').files('*.rb',is_ruby_exe) do |f|
10
+ puts f
11
+ end
12
+ end
13
+
14
+ __END__
@@ -0,0 +1,8 @@
1
+ #!/usr/local/bin/ruby
2
+ require 'rio'
3
+
4
+ # Create a tab separated file of accounts in a UNIX passwd file,
5
+ # listing only the username, uid, and realname fields
6
+
7
+ rio('/etc/passwd').csv(':').columns(0,2,4) > rio(?-).csv("\t")
8
+
data/ex/prompt.rb ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'rio'
4
+
5
+ ans = rio(?-).chomp.print("Type Something: ").gets
6
+ rio(?-).puts("You typed '#{ans}'")
7
+
8
+ # Could also be written like this
9
+ #
10
+ #stdio = rio(?-).chomp
11
+ #ans = stdio.print("Type Something: ").gets
12
+ #stdio.puts("You typed '#{ans}'")
13
+ #
14
+ # Or even this
15
+ #
16
+ #stdio = rio(?-).chomp
17
+ #stdio.puts("You typed '#{stdio.print("Type Something: ").gets}'")
18
+ #
19
+ # Or this
20
+ #
21
+ #rio(?-).puts("You typed '#{rio(?-).chomp.print("Type Something: ").gets}'")
22
+ #
23
+
24
+
25
+ __END__
data/ex/rgb.txt.gz ADDED
Binary file
data/ex/riocat ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rio'
4
+
5
+ # riocat: reads from stdin and writes it to stdout
6
+ # example use:
7
+ # riocat < afile.txt >bfile.txt
8
+ #
9
+ # explanation:
10
+ #
11
+ # rio(?-)
12
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
13
+ #
14
+ # rio(?-)
15
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
16
+ #
17
+ # <
18
+ # <: copy operator indicating rio on left is written to and the rio on the right is read from
19
+ #
20
+ rio(?-) < ?-
21
+
22
+ #
23
+ # this could also be written
24
+ # rio(?-) < rio(?-)
25
+ # or
26
+ # rio(?-) > ?-
27
+ # or
28
+ # rio(?-) > rio(?-)
29
+ #
30
+ #
31
+ # this is similar but reads the entire file before writing
32
+ # rio(?-).print!( rio(?-).slurp )
33
+
34
+
35
+
36
+ #rio(?-).print!( rio(?-).slurp)
37
+
38
+
39
+ # DONT DO THIS:
40
+ #io = rio(?-)
41
+ #io.print!( io.slurp )
42
+
data/ex/riogunzip ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rio'
3
+ # riogunzip: reads from stdin, gzips and writes it to stdout
4
+ # example use:
5
+ # riogunzip < afile.txt.gz
6
+ #
7
+ # explanation:
8
+ #
9
+ # rio(?-).gzip
10
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
11
+ # .gzip: filter the input or output through Zlib:Gzip[Reader or Writer]
12
+ #
13
+ # rio(?-)
14
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
15
+ #
16
+ # <
17
+ # rio copy operator indicating the direction of data
18
+ # pointed in this direction the rio on the right is read from and the one on the left is
19
+ # written. (or stdin and stdout respectively)
20
+ #
21
+ rio(?-).gzip > rio(?-)
22
+
23
+ # could be written this way
24
+ # rio(?-) < rio(?-).gzip
25
+ #
26
+ # this is similar, but reads the entire file in before writing it out
27
+ # rio(?-).print!( rio(?-).gzip.contents )
28
+ #
29
+ #rio(?-).gzip.each_record do |rec|
30
+ # rio(?-).print(rec)
31
+ #end
data/ex/riogzip ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rio'
3
+ # riogzip: reads from stdin, gzips and writes it to stdout
4
+ # example use:
5
+ # riogzip < afile.txt > afile.txt.gz
6
+ #
7
+ # explanation:
8
+ #
9
+ # rio(?-).gzip
10
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
11
+ # .gzip: filter the input or output through Zlib:Gzip[Reader or Writer]
12
+ #
13
+ # rio(?-)
14
+ # rio(?-): a rio that will be connected to stdin or stdout depending how it is used
15
+ #
16
+ # <
17
+ # rio copy operator indicating the direction of data
18
+
19
+ rio(?-).gzip < rio(?-)
20
+
21
+ #
22
+ # could also be written:
23
+ # rio(?-) > rio(?-).gzip
24
+ #
data/ex/rioprompt.rb ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'rio/prompt'
4
+
5
+ case answer = RIO.prompt("What is the crux of the biscuit: ")
6
+ when /the apostrophe/i
7
+ puts 'Billy was a Mountain'
8
+ else
9
+ puts "You typed '#{answer}'"
10
+ end
data/ex/targz2zip ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'rio'
4
+ require 'rio/argv'
5
+
6
+ # Create a zip archive from a gzipped tar archive.
7
+ # This depends on the GNU programs 'tar' and 'zip' being available in your PATH
8
+
9
+ TAR='tar'
10
+ ZIP='zip'
11
+
12
+ RIO.ARGV.each { |f|
13
+ f.ext('.tar.gz') if f =~ /\.tar\.gz$/
14
+ rio(??).chdir {
15
+ rio(?-,"#{TAR} xvzkf #{f.abs}") | "#{ZIP} -@ #{f.abs.dirname/f.basename+'.zip'}" | ?-
16
+ }
17
+ }
data/ex/tonl ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rio'
4
+ require 'rio/argv'
5
+
6
+ # converts files given as arguments from DOS format (lines end with "\r\n")
7
+ # to Unix format (lines end with "\n").
8
+
9
+ RIO.ARGV.each { |file| file < file.chomp.map{ |l| "#{l}\n" } }
10
+
@@ -0,0 +1,56 @@
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
+ class AbstractMethodCalled < ::TypeError #:nodoc: all
38
+ end
39
+
40
+ class Module #:nodoc: all
41
+ # abstract_method(symbol, ...)
42
+ # extends Module
43
+ # defines a method which raises AbstractMethodCalled
44
+ # used in a base class to ensure that subclasses define an implementation
45
+ # thus making the base class abstract
46
+ def abstract_method(*syms)
47
+ for symbol in syms
48
+ module_eval <<-"end_eval"
49
+ def #{symbol.id2name}(*args)
50
+ raise AbstractMethodCalled
51
+ end
52
+ end_eval
53
+ end
54
+ end
55
+
56
+ end
data/lib/rio/argv.rb ADDED
@@ -0,0 +1,56 @@
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
+
38
+ require 'rio'
39
+
40
+ module RIO
41
+ def ARGV()
42
+ ::ARGV.map { |path| rio(path) }
43
+ end
44
+ module_function :ARGV
45
+ end
46
+
47
+ if $0 == __FILE__
48
+ eval DATA.read, nil, $0, __LINE__+4
49
+ end
50
+
51
+ __END__
52
+
53
+ puts
54
+ puts("Run the tests that came with the distribution")
55
+ puts("From the distribution directory use 'test/runtests.rb'")
56
+ puts
@@ -0,0 +1,43 @@
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
+ module RIO
38
+ module AryCopy #:nodoc: all
39
+ def >>(dest)
40
+ rio(?") << self >> dest
41
+ end
42
+ end
43
+ end