rio 0.3.8 → 0.3.9

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 (223) hide show
  1. data/README +18 -12
  2. data/Rakefile +57 -87
  3. data/build_doc.rb +19 -17
  4. data/doc/ANNOUNCE +3 -32
  5. data/doc/RELEASE_NOTES +4 -5
  6. data/doc/RIOIS +215 -0
  7. data/doc/generators/template/html/rio.css +428 -0
  8. data/doc/generators/template/html/rio.rb +18 -389
  9. data/doc/generators/template/html/ugly.rb +130 -0
  10. data/doc/pkg_def.rb +66 -0
  11. data/ex/catcsv.rb +64 -0
  12. data/ex/colx.rb +8 -0
  13. data/ex/findinruby +15 -0
  14. data/ex/findruby +14 -0
  15. data/ex/passwd_report.rb +8 -0
  16. data/ex/prompt.rb +25 -0
  17. data/ex/rgb.txt.gz +0 -0
  18. data/ex/riocat +42 -0
  19. data/ex/riogunzip +31 -0
  20. data/ex/riogzip +24 -0
  21. data/ex/rioprompt.rb +10 -0
  22. data/ex/targz2zip +17 -0
  23. data/ex/tonl +10 -0
  24. data/lib/rio.rb +16 -10
  25. data/lib/rio/abstract_method.rb +3 -4
  26. data/lib/rio/argv.rb +3 -4
  27. data/lib/rio/arycopy.rb +3 -4
  28. data/lib/rio/assert.rb +3 -4
  29. data/lib/rio/base.rb +3 -4
  30. data/lib/rio/callstr.rb +3 -4
  31. data/lib/rio/const.rb +3 -4
  32. data/lib/rio/construct.rb +3 -4
  33. data/lib/rio/constructor.rb +12 -8
  34. data/lib/rio/context.rb +15 -30
  35. data/lib/rio/context/autoclose.rb +3 -4
  36. data/lib/rio/context/copying.rb +3 -4
  37. data/lib/rio/context/cxx.rb +3 -4
  38. data/lib/rio/context/dir.rb +3 -4
  39. data/lib/rio/context/gzip.rb +3 -4
  40. data/lib/rio/context/methods.rb +16 -5
  41. data/lib/rio/context/skip.rb +3 -4
  42. data/lib/rio/context/stream.rb +42 -5
  43. data/lib/rio/cp.rb +7 -7
  44. data/lib/rio/def.rb +3 -4
  45. data/lib/rio/dir.rb +3 -4
  46. data/lib/rio/doc.rb +4 -5
  47. data/lib/rio/doc/EXAMPLES.rb +299 -0
  48. data/lib/rio/doc/HOWTO.rb +3 -4
  49. data/lib/rio/doc/INTRO.rb +86 -105
  50. data/lib/rio/doc/OPTIONAL.rb +4 -5
  51. data/lib/rio/doc/SYNOPSIS.rb +7 -6
  52. data/lib/rio/entrysel.rb +21 -23
  53. data/lib/rio/exception.rb +3 -4
  54. data/lib/rio/exception/copy.rb +3 -4
  55. data/lib/rio/exception/notimplemented.rb +57 -0
  56. data/lib/rio/exception/notsupported.rb +3 -4
  57. data/lib/rio/exception/open.rb +3 -4
  58. data/lib/rio/exception/state.rb +3 -4
  59. data/lib/rio/ext.rb +47 -13
  60. data/lib/rio/ext/csv.rb +4 -5
  61. data/lib/rio/ext/if.rb +45 -0
  62. data/lib/rio/ext/mp3info.rb +80 -0
  63. data/lib/rio/ext/splitlines.rb +253 -0
  64. data/lib/rio/ext/yaml.rb +9 -5
  65. data/lib/rio/ext/yaml/doc.rb +133 -0
  66. data/lib/rio/ext/yaml/tie.rb +149 -0
  67. data/lib/rio/ext/zipfile.rb +23 -4
  68. data/lib/rio/ext/zipfile/fs.rb +116 -0
  69. data/lib/rio/ext/zipfile/rl.rb +251 -0
  70. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  71. data/lib/rio/ext/zipfile/state.rb +161 -0
  72. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  73. data/lib/rio/factory.rb +235 -27
  74. data/lib/rio/file.rb +4 -4
  75. data/lib/rio/filter.rb +3 -4
  76. data/lib/rio/filter/closeoneof.rb +3 -4
  77. data/lib/rio/filter/gzip.rb +9 -4
  78. data/lib/rio/fs/base.rb +3 -4
  79. data/lib/rio/fs/impl.rb +4 -5
  80. data/lib/rio/fs/native.rb +3 -4
  81. data/lib/rio/fs/stream.rb +3 -4
  82. data/lib/rio/fs/url.rb +3 -4
  83. data/lib/rio/ftp/conncache.rb +19 -5
  84. data/lib/rio/ftp/dir.rb +3 -4
  85. data/lib/rio/ftp/fs.rb +30 -24
  86. data/lib/rio/grande.rb +27 -7
  87. data/lib/rio/handle.rb +3 -4
  88. data/lib/rio/if.rb +19 -15
  89. data/lib/rio/if/basic.rb +7 -7
  90. data/lib/rio/if/csv.rb +5 -6
  91. data/lib/rio/if/dir.rb +120 -114
  92. data/lib/rio/if/file.rb +52 -44
  93. data/lib/rio/if/fileordir.rb +217 -211
  94. data/lib/rio/if/grande.rb +674 -644
  95. data/lib/rio/if/grande_entry.rb +321 -313
  96. data/lib/rio/if/grande_stream.rb +653 -553
  97. data/lib/rio/if/internal.rb +3 -4
  98. data/lib/rio/if/path.rb +425 -426
  99. data/lib/rio/if/rubyio.rb +681 -0
  100. data/lib/rio/if/string.rb +42 -5
  101. data/lib/rio/if/temp.rb +3 -4
  102. data/lib/rio/if/test.rb +245 -238
  103. data/lib/rio/if/yaml.rb +15 -41
  104. data/lib/rio/ioh.rb +7 -5
  105. data/lib/rio/iomode.rb +19 -7
  106. data/lib/rio/ios/fail.rb +4 -5
  107. data/lib/rio/ios/generic.rb +4 -5
  108. data/lib/rio/ios/mode.rb +4 -5
  109. data/lib/rio/ios/null.rb +6 -7
  110. data/lib/rio/iowrap.rb +3 -4
  111. data/lib/rio/kernel.rb +3 -5
  112. data/lib/rio/local.rb +3 -4
  113. data/lib/rio/match.rb +3 -4
  114. data/lib/rio/matchrecord.rb +3 -4
  115. data/lib/rio/no_warn.rb +3 -4
  116. data/lib/rio/nullio.rb +3 -4
  117. data/lib/rio/open3.rb +4 -5
  118. data/lib/rio/ops/construct.rb +3 -4
  119. data/lib/rio/ops/create.rb +11 -6
  120. data/lib/rio/ops/dir.rb +19 -8
  121. data/lib/rio/ops/either.rb +6 -5
  122. data/lib/rio/ops/file.rb +3 -4
  123. data/lib/rio/ops/path.rb +14 -35
  124. data/lib/rio/ops/stream.rb +3 -4
  125. data/lib/rio/ops/stream/input.rb +4 -7
  126. data/lib/rio/ops/stream/output.rb +3 -4
  127. data/lib/rio/ops/stream/read.rb +6 -5
  128. data/lib/rio/ops/stream/write.rb +3 -4
  129. data/lib/rio/ops/symlink.rb +3 -4
  130. data/lib/rio/path.rb +22 -18
  131. data/lib/rio/path/reset.rb +4 -5
  132. data/lib/rio/piper.rb +3 -4
  133. data/lib/rio/piper/cp.rb +3 -4
  134. data/lib/rio/prompt.rb +10 -5
  135. data/lib/rio/rectype.rb +5 -5
  136. data/lib/rio/rl/base.rb +17 -71
  137. data/lib/rio/rl/builder.rb +14 -38
  138. data/lib/rio/rl/chmap.rb +66 -0
  139. data/lib/rio/rl/fs2url.rb +82 -0
  140. data/lib/rio/rl/ioi.rb +4 -4
  141. data/lib/rio/rl/path.rb +44 -122
  142. data/lib/rio/rl/pathmethods.rb +19 -8
  143. data/lib/rio/rl/uri.rb +137 -60
  144. data/lib/rio/rl/withpath.rb +295 -0
  145. data/lib/rio/scheme/aryio.rb +3 -4
  146. data/lib/rio/scheme/cmdio.rb +3 -4
  147. data/lib/rio/scheme/cmdpipe.rb +4 -4
  148. data/lib/rio/scheme/fd.rb +3 -4
  149. data/lib/rio/scheme/ftp.rb +7 -7
  150. data/lib/rio/scheme/http.rb +4 -5
  151. data/lib/rio/scheme/null.rb +3 -4
  152. data/lib/rio/scheme/path.rb +3 -4
  153. data/lib/rio/scheme/stderr.rb +3 -4
  154. data/lib/rio/scheme/stdio.rb +3 -4
  155. data/lib/rio/scheme/strio.rb +3 -4
  156. data/lib/rio/scheme/sysio.rb +3 -4
  157. data/lib/rio/scheme/tcp.rb +3 -4
  158. data/lib/rio/scheme/temp.rb +6 -6
  159. data/lib/rio/state.rb +18 -46
  160. data/lib/rio/state/error.rb +3 -4
  161. data/lib/rio/stream.rb +4 -4
  162. data/lib/rio/stream/base.rb +3 -4
  163. data/lib/rio/stream/duplex.rb +3 -4
  164. data/lib/rio/stream/open.rb +3 -8
  165. data/lib/rio/symantics.rb +3 -4
  166. data/lib/rio/tempdir.rb +2 -2
  167. data/lib/rio/to_rio.rb +3 -4
  168. data/lib/rio/to_rio/all.rb +3 -4
  169. data/lib/rio/to_rio/array.rb +4 -5
  170. data/lib/rio/to_rio/io.rb +4 -5
  171. data/lib/rio/to_rio/object.rb +4 -5
  172. data/lib/rio/to_rio/string.rb +4 -5
  173. data/lib/rio/uri/file.rb +41 -5
  174. data/lib/rio/util.rb +3 -4
  175. data/lib/rio/version.rb +4 -5
  176. data/setup.rb +368 -339
  177. data/test/bin/list_dir.rb +1 -1
  178. data/test/ftp/anon_misc.rb +13 -1
  179. data/test/ftp/anon_special.rb +6 -6
  180. data/test/ftp/anon_write.rb +10 -3
  181. data/test/ftp/ftp2ftp.rb +2 -2
  182. data/test/ftp/testdef.rb +9 -6
  183. data/test/http/all.rb +3 -0
  184. data/test/http/copy-from-http.rb +140 -0
  185. data/test/lib/temp_server.rb +44 -0
  186. data/test/runalltests.rb +3 -1
  187. data/test/runhttp.rb +12 -0
  188. data/test/runhttptests.rb +1 -1
  189. data/test/runtests.rb +41 -3
  190. data/test/tc/abs.rb +9 -5
  191. data/test/tc/all.rb +9 -4
  192. data/test/tc/base.rb +1 -1
  193. data/test/tc/base2.rb +87 -0
  194. data/test/tc/{methods.rb → clone.rb} +72 -50
  195. data/test/tc/closeoncopy.rb +13 -2
  196. data/test/tc/copy-dir-samevar.rb +91 -0
  197. data/test/tc/dir_iter.rb +0 -1
  198. data/test/tc/empty.rb +6 -2
  199. data/test/tc/expand_path.rb +36 -54
  200. data/test/tc/ext.rb +42 -18
  201. data/test/tc/gzip.rb +30 -3
  202. data/test/tc/likeio.rb +5 -1
  203. data/test/tc/line_record_row.rb +51 -0
  204. data/test/tc/noqae.rb +71 -70
  205. data/test/tc/path_parts.rb +175 -0
  206. data/test/tc/programs_util.rb +3 -3
  207. data/test/tc/rename.rb +4 -5
  208. data/test/tc/riorl.rb +9 -7
  209. data/test/tc/skip.rb +35 -6
  210. data/test/tc/skiplines.rb +34 -5
  211. data/test/tc/split.rb +8 -50
  212. data/test/tc/splitlines.rb +65 -0
  213. data/test/tc/splitpath.rb +83 -0
  214. data/test/tc/testcase.rb +1 -1
  215. data/test/tc/truncate.rb +39 -0
  216. data/test/tc/yaml.rb +9 -8
  217. metadata +261 -207
  218. data/ChangeLog +0 -1418
  219. data/VERSION +0 -1
  220. data/lib/rio/doc/MISC.rb +0 -259
  221. data/lib/rio/if/stream.rb +0 -680
  222. data/lib/rio/impl/path.rb +0 -87
  223. data/test/tc/copy-from-http.rb +0 -89
@@ -0,0 +1,130 @@
1
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
2
+ # All rights reserved
3
+ #
4
+ # This file is part of the Rio library for ruby.
5
+ #
6
+ # Rio is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Rio is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Rio; if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ #
20
+
21
+
22
+ # This is disgraceful -- a hack required to exert control over how rubygems builds
23
+ # documentation for Rio. My desire to have the command "gem install rio" build the
24
+ # docs correctly overrides my sense of propriety in this case. I apologize to anyone
25
+ # who should have to look at this ugliness.
26
+
27
+ # Begin UGLY
28
+ module Generators #:nodoc: all
29
+ #####################################################################
30
+ #
31
+ # Handle common markup tasks for the various Html classes
32
+ #
33
+
34
+ module MarkUp
35
+
36
+ # Convert a string in markup format into HTML. We keep a cached
37
+ # SimpleMarkup object lying around after the first time we're
38
+ # called per object.
39
+
40
+ def markup(str, remove_para=false)
41
+ return '' unless str
42
+ unless defined? @markup
43
+ #p 'RIO MARKUP'
44
+ @markup = SM::SimpleMarkup.new
45
+
46
+ # class names, variable names, file names, or instance variables
47
+ # @markup.add_special(/(
48
+ # \b([A-Z]\w*(::\w+)*[.\#]\w+) # A::B.meth
49
+ # | \b([A-Z]\w+(::\w+)*) # A::B..
50
+ # | \#\w+[!?=]? # #meth_name
51
+ # | \b\w+([_\/\.]+\w+)+[!?=]? # meth_name
52
+ # )/x,
53
+ # :CROSSREF)
54
+ meth_name_re = '\w+[!?=]?|<{1,2}|>{1,2}|\[\]|\||\/|\+@?|={2,3}|=~'
55
+ @markup.add_special(/(
56
+ \b([A-Z]\w*(::\w+)*[.\#](#{meth_name_re})) # A::B.meth
57
+ | \b([A-Z]\w+(::\w+)*) # A::B..
58
+ | \#(#{meth_name_re}) # #meth_name
59
+ | \b\w+([_\/\.]+\w+)+[!?=]? # meth_name
60
+ )/x,
61
+ :CROSSREF)
62
+
63
+ # external hyperlinks
64
+ @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
65
+
66
+ # and links of the form <text>[<url>]
67
+ @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)
68
+ # @markup.add_special(/\b(\S+?\[\S+?\.\S+?\])/, :TIDYLINK)
69
+
70
+ end
71
+ unless defined? @html_formatter
72
+ @html_formatter = HyperlinkHtml.new(self.path, self)
73
+ end
74
+
75
+ # Convert leading comment markers to spaces, but only
76
+ # if all non-blank lines have them
77
+
78
+ if str =~ /^(?>\s*)[^\#]/
79
+ content = str
80
+ else
81
+ content = str.gsub(/^\s*(#+)/) { $1.tr('#',' ') }
82
+ end
83
+
84
+ res = @markup.convert(content, @html_formatter)
85
+ if remove_para
86
+ res.sub!(/^<p>/, '')
87
+ res.sub!(/<\/p>$/, '')
88
+ end
89
+ res
90
+ end
91
+ end
92
+ end
93
+ module Generators
94
+ class HyperlinkHtml < SM::ToHtml
95
+ def handle_special_CROSSREF(special)
96
+ #p 'handle_special_CROSSREF'
97
+ name = special.text
98
+ if name[0,1] == '#'
99
+ lookup = name[1..-1]
100
+ name = lookup unless Options.instance.show_hash
101
+ else
102
+ lookup = name
103
+ end
104
+
105
+ if /([A-Z].*)[.\#](.*)/ =~ lookup
106
+ container = $1
107
+ method = $2
108
+ ref = @context.find_symbol(container, method)
109
+ else
110
+ ref = @context.find_symbol(lookup)
111
+ end
112
+
113
+ if ref and ref.document_self
114
+ #print "#{name} =>"
115
+ name.sub!(/^(RIO::)?IF::.+\#/,'Rio#')
116
+ name.sub!(/^#/,'Rio#')
117
+ #puts " #{name}"
118
+ if %w[Rio Grande String].include?(name) or name =~ /^(Dir)/
119
+ #if %w[Rio Grande String].include?(name)
120
+ name
121
+ else
122
+ "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>"
123
+ end
124
+ else
125
+ name
126
+ end
127
+ end
128
+ end
129
+ end
130
+ # End UGLY
@@ -0,0 +1,66 @@
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
+ # To create the documentation for Rio run the command
24
+ # ruby build_doc.rb
25
+ # from the distribution directory.
26
+ #++
27
+
28
+ require 'rio/doc'
29
+
30
+ module PKG
31
+ NAME = "rio"
32
+ TITLE = RIO::TITLE
33
+ VERSION = RIO::VERSION
34
+ FULLNAME = PKG::NAME + "-" + PKG::VERSION
35
+ SUMMARY = RIO::SUMMARY
36
+ DESCRIPTION = RIO::DESCRIPTION
37
+ AUTHOR = "Christopher Kleckner"
38
+ EMAIL = "rio4ruby@rubyforge.org"
39
+ HOMEPAGE = "http://rio.rubyforge.org/"
40
+ RUBYFORGE_PROJECT = "rio"
41
+ RDOC_OPTIONS = ['--show-hash','--line-numbers','-mRIO::Doc::SYNOPSIS','-Tdoc/generators/template/html/rio.rb']
42
+ module FILES
43
+ SRC = rio('lib').norecurse('.svn').files['*.rb']
44
+ DOC = rio['README'] + rio('lib')['rio.rb'] + rio('lib/rio/doc/')['*.rb'] +
45
+ rio('lib/rio/if/')['*.rb'] + rio('lib/rio')['kernel.rb','constructor.rb']
46
+ XMP = rio('ex').entries[]
47
+ D2 = rio('doc').norecurse('.svn').all.files.skip.dirs['rdoc','.svn']
48
+ TST = rio('test').norecurse('.svn').all.files('*.rb').skip.dirs['qp','.svn']
49
+ MSC = rio.files['setup.rb', 'build_doc.rb', 'COPYING', 'Rakefile', 'ChangeLog', 'VERSION']
50
+
51
+ # ) do |fl|
52
+ # fl.exclude( /\bsvn\b/ )
53
+ # fl.exclude( 'doc/rdoc' )
54
+ # end
55
+ [SRC,DOC,XMP,D2,TST,MSC].each do |fary|
56
+ fary.map! { |f| f.to_s }
57
+ end
58
+ DIST = SRC + DOC + XMP + D2 + TST + MSC
59
+ end
60
+
61
+ # SRC_FILES = FileList['lib/**/*.rb']
62
+ # DOC_FILES = FileList['README','lib/rio.rb','lib/rio/doc/*.rb',
63
+ # 'lib/rio/if/*.rb','lib/rio/kernel.rb','lib/rio/constructor.rb']
64
+ OUT_DIR = 'pkg'
65
+ OUT_FILES = %w[.gem .tar.gz .zip].map { |ex| OUT_DIR + '/' + FULLNAME + ex }
66
+ end
@@ -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__
@@ -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
@@ -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__
@@ -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
+
@@ -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__
Binary file
@@ -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
+
@@ -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
@@ -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
+ #
@@ -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