rio 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. data/ChangeLog +1273 -1482
  2. data/README +2 -2
  3. data/Rakefile +5 -5
  4. data/VERSION +1 -1
  5. data/{RUNME.1st.rb → build_doc.rb} +4 -10
  6. data/doc/ANNOUNCE +33 -80
  7. data/doc/RELEASE_NOTES +31 -1
  8. data/doc/generators/template/html/rio.rb +3 -3
  9. data/lib/rio/abstract_method.rb +2 -2
  10. data/lib/rio/argv.rb +2 -2
  11. data/lib/rio/arycopy.rb +2 -2
  12. data/lib/rio/assert.rb +2 -2
  13. data/lib/rio/base.rb +2 -2
  14. data/lib/rio/callstr.rb +47 -0
  15. data/lib/rio/const.rb +52 -0
  16. data/lib/rio/construct.rb +6 -24
  17. data/lib/rio/constructor.rb +12 -2
  18. data/lib/rio/context/autoclose.rb +73 -0
  19. data/lib/rio/context/copying.rb +2 -2
  20. data/lib/rio/context/cxx.rb +2 -2
  21. data/lib/rio/context/dir.rb +2 -2
  22. data/lib/rio/context/gzip.rb +2 -2
  23. data/lib/rio/context/methods.rb +6 -34
  24. data/lib/rio/context/skip.rb +2 -2
  25. data/lib/rio/context/stream.rb +2 -2
  26. data/lib/rio/context.rb +17 -2
  27. data/lib/rio/cp.rb +35 -9
  28. data/lib/rio/def.rb +54 -0
  29. data/lib/rio/dir.rb +19 -20
  30. data/lib/rio/doc/HOWTO.rb +23 -7
  31. data/lib/rio/doc/INTRO.rb +57 -23
  32. data/lib/rio/doc/MISC.rb +2 -2
  33. data/lib/rio/doc/OPTIONAL.rb +134 -0
  34. data/lib/rio/doc/SYNOPSIS.rb +11 -4
  35. data/lib/rio/doc.rb +2 -2
  36. data/lib/rio/entrysel.rb +25 -6
  37. data/lib/rio/exception/copy.rb +2 -2
  38. data/lib/rio/exception/notsupported.rb +47 -0
  39. data/lib/rio/exception/open.rb +2 -2
  40. data/lib/rio/exception/state.rb +2 -2
  41. data/lib/rio/exception.rb +2 -2
  42. data/lib/rio/ext/csv.rb +56 -11
  43. data/lib/rio/ext/yaml.rb +2 -2
  44. data/lib/rio/ext/zipfile.rb +91 -0
  45. data/lib/rio/ext.rb +38 -3
  46. data/lib/rio/factory.rb +17 -34
  47. data/lib/rio/file.rb +48 -8
  48. data/lib/rio/filter/closeoneof.rb +36 -16
  49. data/lib/rio/filter/gzip.rb +2 -2
  50. data/lib/rio/filter.rb +2 -2
  51. data/lib/rio/fs/base.rb +42 -0
  52. data/lib/rio/fs/impl.rb +123 -0
  53. data/lib/rio/fs/native.rb +76 -0
  54. data/lib/rio/{record.rb → fs/stream.rb} +21 -18
  55. data/lib/rio/fs/url.rb +64 -0
  56. data/lib/rio/ftp/{ioh.rb → conncache.rb} +38 -39
  57. data/lib/rio/ftp/dir.rb +95 -0
  58. data/lib/rio/ftp/fs.rb +173 -0
  59. data/lib/rio/ftp/ftpfile.rb +20 -0
  60. data/lib/rio/grande.rb +2 -2
  61. data/lib/rio/handle.rb +2 -2
  62. data/lib/rio/if/basic.rb +2 -2
  63. data/lib/rio/if/csv.rb +2 -2
  64. data/lib/rio/if/dir.rb +2 -2
  65. data/lib/rio/if/file.rb +26 -2
  66. data/lib/rio/if/fileordir.rb +44 -49
  67. data/lib/rio/if/grande.rb +32 -10
  68. data/lib/rio/if/grande_entry.rb +12 -2
  69. data/lib/rio/if/grande_stream.rb +17 -28
  70. data/lib/rio/if/internal.rb +2 -2
  71. data/lib/rio/if/path.rb +7 -6
  72. data/lib/rio/if/stream.rb +85 -29
  73. data/lib/rio/if/string.rb +2 -2
  74. data/lib/rio/if/temp.rb +2 -2
  75. data/lib/rio/if/test.rb +37 -4
  76. data/lib/rio/if/yaml.rb +2 -2
  77. data/lib/rio/if.rb +2 -2
  78. data/lib/rio/impl/path.rb +2 -2
  79. data/lib/rio/ioh.rb +17 -6
  80. data/lib/rio/iomode.rb +4 -3
  81. data/lib/rio/ios/fail.rb +107 -0
  82. data/lib/rio/ios/generic.rb +120 -0
  83. data/lib/rio/ios/mode.rb +61 -0
  84. data/lib/rio/ios/null.rb +120 -0
  85. data/lib/rio/iowrap.rb +129 -0
  86. data/lib/rio/kernel.rb +12 -3
  87. data/lib/rio/local.rb +2 -2
  88. data/lib/rio/match.rb +3 -3
  89. data/lib/rio/matchrecord.rb +2 -2
  90. data/lib/rio/no_warn.rb +50 -0
  91. data/lib/rio/{arrayio.rb → nullio.rb} +47 -86
  92. data/lib/rio/open3.rb +2 -2
  93. data/lib/rio/ops/construct.rb +20 -13
  94. data/lib/rio/ops/create.rb +10 -19
  95. data/lib/rio/ops/dir.rb +60 -54
  96. data/lib/rio/ops/either.rb +11 -9
  97. data/lib/rio/ops/file.rb +28 -24
  98. data/lib/rio/ops/path.rb +45 -43
  99. data/lib/rio/ops/stream/input.rb +12 -8
  100. data/lib/rio/ops/stream/output.rb +2 -2
  101. data/lib/rio/ops/stream/read.rb +35 -32
  102. data/lib/rio/ops/stream/write.rb +5 -5
  103. data/lib/rio/ops/stream.rb +7 -3
  104. data/lib/rio/ops/symlink.rb +12 -10
  105. data/lib/rio/path/reset.rb +5 -5
  106. data/lib/rio/path.rb +32 -24
  107. data/lib/rio/piper/cp.rb +2 -2
  108. data/lib/rio/piper.rb +2 -2
  109. data/lib/rio/prompt.rb +2 -2
  110. data/lib/rio/rectype.rb +9 -7
  111. data/lib/rio/rl/base.rb +5 -4
  112. data/lib/rio/rl/builder.rb +17 -5
  113. data/lib/rio/rl/ioi.rb +14 -4
  114. data/lib/rio/rl/path.rb +23 -15
  115. data/lib/rio/rl/pathmethods.rb +12 -2
  116. data/lib/rio/rl/uri.rb +13 -6
  117. data/lib/rio/scheme/aryio.rb +3 -3
  118. data/lib/rio/scheme/cmdio.rb +4 -3
  119. data/lib/rio/scheme/cmdpipe.rb +3 -35
  120. data/lib/rio/scheme/fd.rb +4 -3
  121. data/lib/rio/scheme/ftp.rb +36 -7
  122. data/lib/rio/scheme/http.rb +2 -2
  123. data/lib/rio/{context/closeoneof.rb → scheme/null.rb} +17 -11
  124. data/lib/rio/scheme/path.rb +28 -30
  125. data/lib/rio/scheme/stderr.rb +4 -4
  126. data/lib/rio/scheme/stdio.rb +6 -5
  127. data/lib/rio/scheme/strio.rb +10 -20
  128. data/lib/rio/scheme/sysio.rb +5 -2
  129. data/lib/rio/scheme/tcp.rb +4 -3
  130. data/lib/rio/scheme/temp.rb +14 -1
  131. data/lib/rio/state/error.rb +2 -2
  132. data/lib/rio/state.rb +80 -34
  133. data/lib/rio/stream/base.rb +7 -2
  134. data/lib/rio/stream/duplex.rb +13 -10
  135. data/lib/rio/stream/open.rb +74 -79
  136. data/lib/rio/stream.rb +15 -23
  137. data/lib/rio/symantics.rb +2 -2
  138. data/lib/rio/tempdir.rb +132 -132
  139. data/lib/rio/to_rio/all.rb +40 -0
  140. data/lib/rio/to_rio/array.rb +40 -0
  141. data/lib/rio/to_rio/io.rb +41 -0
  142. data/lib/rio/to_rio/object.rb +43 -0
  143. data/lib/rio/to_rio/string.rb +41 -0
  144. data/lib/rio/to_rio.rb +13 -2
  145. data/lib/rio/uri/file.rb +2 -2
  146. data/lib/rio/util.rb +2 -2
  147. data/lib/rio/version.rb +3 -3
  148. data/lib/rio.rb +16 -25
  149. data/test/bin/count_lines.rb +11 -0
  150. data/test/bin/find_lines.rb +13 -0
  151. data/test/bin/list_dir.rb +14 -0
  152. data/test/ftp/all.rb +9 -0
  153. data/test/ftp/anon_misc.rb +112 -0
  154. data/test/ftp/anon_read.rb +105 -0
  155. data/test/ftp/anon_special.rb +68 -0
  156. data/test/ftp/anon_write.rb +63 -0
  157. data/test/ftp/ftp2ftp.rb +51 -0
  158. data/test/ftp/initftpfiles.rb +14 -0
  159. data/test/ftp/testdef.rb +51 -0
  160. data/test/gem_runtests.rb +15 -15
  161. data/test/runalltests.rb +15 -0
  162. data/test/runftptests.rb +14 -0
  163. data/test/{1.rb → runhttptests.rb} +14 -14
  164. data/test/runtests.rb +14 -14
  165. data/test/tc/all.rb +36 -21
  166. data/test/tc/cmdpipe.rb +18 -15
  167. data/test/tc/copy-from-http.rb +89 -0
  168. data/test/tc/copy-from.rb +1 -52
  169. data/test/tc/copy.rb +19 -17
  170. data/test/tc/csv2.rb +6 -3
  171. data/test/tc/empty.rb +47 -0
  172. data/test/tc/emptyriodir.rb +129 -0
  173. data/test/tc/entsel.rb +110 -0
  174. data/test/tc/files_select.rb +92 -0
  175. data/test/tc/get.rb +7 -6
  176. data/test/tc/getrec.rb +2 -5
  177. data/test/tc/gzip.rb +82 -0
  178. data/test/tc/io_each_byte.rb +60 -0
  179. data/test/tc/io_read.rb +80 -0
  180. data/test/tc/iometh.rb +149 -0
  181. data/test/tc/likeio.rb +112 -0
  182. data/test/tc/methods.rb +10 -9
  183. data/test/tc/misc.rb +1 -37
  184. data/test/tc/null.rb +45 -0
  185. data/test/tc/pid.rb +31 -0
  186. data/test/tc/piper.rb +34 -37
  187. data/test/tc/programs_util.rb +24 -0
  188. data/test/tc/readline.rb +30 -0
  189. data/test/tc/rename.rb +12 -0
  190. data/test/tc/tempfile.rb +14 -0
  191. data/test/tc/testcase.rb +6 -0
  192. data/test/tc/tonl.rb +37 -0
  193. metadata +181 -144
  194. data/ex/colx.rb +0 -8
  195. data/ex/findinruby +0 -16
  196. data/ex/findruby +0 -15
  197. data/ex/passwd_report.rb +0 -8
  198. data/ex/prompt.rb +0 -25
  199. data/ex/rgb.txt.gz +0 -0
  200. data/ex/riocat +0 -35
  201. data/ex/riogunzip +0 -31
  202. data/ex/riogzip +0 -24
  203. data/ex/rioprompt.rb +0 -6
  204. data/ex/targz2zip +0 -17
  205. data/ex/tolf +0 -11
  206. data/lib/rio/ftp/conn.rb +0 -167
  207. data/lib/rio/ftp.rb +0 -275
  208. data/test/once.rb +0 -7
data/lib/rio/doc/INTRO.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -47,8 +47,8 @@ uses Zlib, and CSV to extend that functionality using a simple
47
47
  consistent interface. Most of the instance methods of IO, File and
48
48
  Dir are simply forwarded to the appropriate handle to provide
49
49
  identical functionality. Rio also provides a "grande" interface that
50
- allows many application level IO tasks to be accomplished in line or
51
- two of code.
50
+ allows many application level IO tasks to be expressed succinctly.
51
+
52
52
 
53
53
  Rio functionality can be broadly broken into three categories
54
54
  * path manipulation
@@ -70,7 +70,7 @@ the presence of a block as an implied +each+.
70
70
  == Using a Rio
71
71
 
72
72
  Using a Rio can be described as having 3 steps:
73
- * Creating a Rio (using the constructor or as the result of one of the path manipulation methods)
73
+ * Creating a Rio
74
74
  * Configuring a Rio
75
75
  * Rio I/O
76
76
 
@@ -93,64 +93,97 @@ that have a path and those that don't.
93
93
 
94
94
  To create a Rio that has a path the arguments to +rio+ may be:
95
95
 
96
- * a string representing the entire path. The separator used for Rios is as specified in RFC1738 ('/').
96
+ * a string representing the entire path. The separator used for Rios
97
+ is as specified in RFC1738 ('/').
98
+
97
99
  rio('adir/afile')
100
+
98
101
  * a string representing a fully qualified +file+ URI as per RFC1738
102
+
99
103
  rio('file:///atopleveldir/adir/afile')
104
+
100
105
  * a +URI+ object representing a +file+ or generic +URI+
106
+
101
107
  rio(URI('adir/afile'))
108
+
102
109
  * the components of a path as separate arguments
110
+
103
111
  rio('adir','afile')
112
+
104
113
  * the components of a path as an array
114
+
105
115
  rio(%w/adir afile/)
116
+
106
117
  * another Rio
118
+
107
119
  another_rio = rio('adir/afile')
108
120
  rio(another_rio)
121
+
109
122
  * any object whose +to_s+ method returns one of the above
123
+
110
124
  rio(Pathname.new('apath'))
111
- * any combination of the above either as separate arguments or as elements of an array,
125
+
126
+ * any combination of the above either as separate arguments or as
127
+ elements of an array,
128
+
112
129
  another_rio = rio('dir1/dir2')
113
130
  auri = URI('dir4/dir5)
114
131
  rio(another_rio,'dir3',auri,'dir6/dir7')
115
132
 
116
133
  ===== Creating a Rio that refers to a web page
117
134
 
118
- To create a Rio that refers to a web page the arguments to +rio+ may be:
135
+ To create a Rio that refers to a web page the arguments to +rio+ may
136
+ be:
119
137
 
120
138
  * a string representing a fully qualified +http+ URI
139
+
121
140
  rio('http://ruby-doc.org/index.html')
141
+
122
142
  * a +URI+ object representing a +http+ +URI+
143
+
123
144
  rio(URI('http://ruby-doc.org/index.html'))
145
+
124
146
  * either of the above with additional path elements
147
+
125
148
  rio('http://www.ruby-doc.org/','core','classes/Object.html')
126
149
 
150
+
127
151
  ===== Creating a Rio that refers to a file or directory on a FTP server
128
152
 
129
- To create a Rio that refers to a file on a FTP server the arguments to +rio+ may be:
153
+ To create a Rio that refers to a file on a FTP server the arguments to
154
+ +rio+ may be:
130
155
 
131
156
  * a string representing a fully qualified +ftp+ URI
157
+
132
158
  rio('ftp://user:password@ftp.example.com/afile.tar.gz')
159
+
133
160
  * a +URI+ object representing a +ftp+ +URI+
161
+
134
162
  rio(URI('ftp://ftp.example.com/afile.tar.gz'))
163
+
135
164
  * either of the above with additional path elements
165
+
136
166
  rio('ftp://ftp.gnu.org/pub/gnu','emacs','windows','README')
137
167
 
138
168
  ==== Creating Rios that do not have a path
139
169
 
140
- To create a Rio without a path, the first argument to +rio+ is usually a single
141
- character.
170
+ To create a Rio without a path, the first argument to +rio+ is usually
171
+ a single character.
142
172
 
143
173
  ===== Creating a Rio that refers to a clone of your programs stdin or stdout.
144
174
 
145
- <tt>rio(?-)</tt> (mnemonic: '-' is used by some Unix programs to specify stdin or stdout in place of a file)
175
+ <tt>rio(?-)</tt> (mnemonic: '-' is used by some Unix programs to
176
+ specify stdin or stdout in place of a file)
146
177
 
147
- Just as a Rio that refers to a file, does not know whether that file will be opened for reading or
148
- writing until an io operation is specified, a <tt>stdio:</tt> Rio does not know whether it will connect
149
- to stdin or stdout until an I/O operation is specified.
178
+ Just as a Rio that refers to a file, does not know whether that file
179
+ will be opened for reading or writing until an io operation is
180
+ specified, a <tt>stdio:</tt> Rio does not know whether it will connect
181
+ to stdin or stdout until an I/O operation is specified.
150
182
 
151
183
  ===== Creating a Rio that refers to a clone of your programs stderr.
152
184
 
153
- <tt>rio(?=)</tt> (mnemonic: '-' refers to fileno 1, so '=' refers to fileno 2)
185
+ <tt>rio(?=)</tt> (mnemonic: '-' refers to fileno 1, so '=' refers to
186
+ fileno 2)
154
187
 
155
188
  ===== Creating a Rio that refers to an arbitrary IO object.
156
189
 
@@ -195,14 +228,15 @@ or
195
228
  or
196
229
  rio('tcp://hostname:port')
197
230
 
198
- ===== Creating a Rio that runs an external program and connects to its
199
- stdin and stdout
231
+ ===== Creating a Rio that runs an external program and connects to its stdin and stdout
200
232
 
201
- <tt>rio(?-,cmd)</tt> (mnemonic: '-' is used by some Unix programs to specify stdin or stdout in place of a file)
233
+ <tt>rio(?-,cmd)</tt> (mnemonic: '-' is used by some Unix programs to
234
+ specify stdin or stdout in place of a file)
202
235
 
203
236
  or
204
237
 
205
- <tt>rio(?`,cmd)</tt> (mnemonic: '`' (backtick) runs an external program in ruby)
238
+ <tt>rio(?`,cmd)</tt> (mnemonic: '`' (backtick) runs an external
239
+ program in ruby)
206
240
 
207
241
  This is Rio's interface to IO#popen
208
242
 
@@ -258,7 +292,7 @@ that this behavior differs from File#split.)
258
292
 
259
293
  rio('a/b/c').split #=> [rio('a'),rio('b'),rio('c')]
260
294
 
261
- The array returned is extended wwith a +to_rio+ method, which will put
295
+ The array returned is extended with a +to_rio+ method, which will put
262
296
  the parts back together again.
263
297
 
264
298
  ary = rio('a/b/c').split #=> [rio('a'),rio('b'),rio('c')]
@@ -447,7 +481,7 @@ accessed, no socket has been opened, not so much as a test for a files
447
481
  existance has been done. When an I/O method is called on a Rio, the
448
482
  sequence of events required to complete that operation on the
449
483
  underlying object takes place. Rio takes care of creating the
450
- apropriate object (eg IO,Dir), opening the object with the apropriate
484
+ appropriate object (eg IO,Dir), opening the object with the appropriate
451
485
  mode, performing the operation, closing the object if required, and
452
486
  returning the results of the operation.
453
487
 
@@ -458,7 +492,7 @@ Rio's I/O operations can be divide into two catagories:
458
492
  ==== Proxy operations
459
493
 
460
494
  These are calls which are forwarded to the underlying object (eg
461
- IO,Dir,Net::FTP), after apropriately creating and configuring that
495
+ IO,Dir,Net::FTP), after appropriately creating and configuring that
462
496
  object. The result produced by the method is returned, and the object
463
497
  is closed.
464
498
 
data/lib/rio/doc/MISC.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -0,0 +1,134 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 2006 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. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+
38
+ module RIO
39
+ module Doc #:doc:
40
+ =begin rdoc
41
+
42
+ = Rio - Ruby I/O Comfort Class
43
+
44
+ Rio is a convenience class wrapping much of the functionality of IO,
45
+ File, Dir, Pathname, FileUtils, Tempfile, StringIO, and OpenURI and
46
+ uses Zlib, and CSV to extend that functionality using a simple
47
+ consistent interface. Most of the instance methods of IO, File and
48
+ Dir are simply forwarded to the appropriate handle to provide
49
+ identical functionality. Rio also provides a "grande" interface that
50
+ allows many application level IO tasks to be expressed succinctly.
51
+
52
+
53
+ Please read the following first:
54
+ * RIO::Doc::INTRO
55
+ * RIO::Doc::SYNOPSIS
56
+ * RIO::Doc::HOWTO
57
+ * RIO::Rio
58
+
59
+ = Rio Optional Componants
60
+
61
+ This document describes various optional Rio components, that must be
62
+ explicitly 'required' to be available. These are not included in
63
+ rio.rb either because they change classes that should not be changed
64
+ without the developers explicit permission, or because they are not of
65
+ general enough interest.
66
+
67
+ == to_rio
68
+
69
+ This option comprises 4 options
70
+ * Object#to_rio
71
+
72
+ require 'rio/to_rio/object'
73
+ ario = any_object.to_rio
74
+
75
+ This option adds a to_rio method to the Object class which calls the
76
+ object's #to_s method and passes it to the Rio constructor. Like:
77
+
78
+ ario = rio(any_object.to_s)
79
+
80
+ * String#to_rio and String#/
81
+
82
+ require 'rio/to_rio/string'
83
+ ario = "a/file/represented/as/a/string".to_rio
84
+ ario = 'strings'/'used'/'with'/'subdirectory'/'operator'
85
+
86
+ This option adds a to_rio method and the subdirectory operator '/'
87
+ to the String class. Note that due to operator precedance one must
88
+ use parenthesis when calling a method directly on a Rio created
89
+ using the subdirectory operator with Strings
90
+
91
+ array_of_first_ten_lines = ('adir'/'asubdir'/'afile').lines[0...10]
92
+
93
+ * Array#to_rio
94
+
95
+ require 'rio/to_rio/array'
96
+ ario = %w[an array of path components].to_rio #=> rio('an/array/of/path/components')
97
+
98
+ This option adds a to_rio method to the Array class. This behaves as
99
+ if
100
+ rio(%w[an array of path components]) had been called.
101
+
102
+ * require 'rio/to_rio/all' will make all of the above available.
103
+
104
+ == RIO.ARGV
105
+
106
+ require 'rio/argv'
107
+ arguments_as_rios = RIO.ARGV
108
+
109
+ This option provides a function which converts each element of ruby's
110
+ ARGV into a Rio. Useful when writing programs that take a list of
111
+ files as its arguments
112
+
113
+ == RIO.popen3
114
+
115
+ require 'rio/open3'
116
+ input,output,errput = RIO.popen3
117
+ RIO.popen3 { |input,output,errput| ... }
118
+
119
+ This options provides a wrapper around the Open3#popen3 call with the
120
+ IO objects converted to Rios
121
+
122
+ == RIO.prompt
123
+
124
+ require 'rio/prompt'
125
+ the_anwser = RIO.prompt('What is the answer? ')
126
+
127
+ This option provides a module function to prompt for input.
128
+
129
+
130
+ =end
131
+ module OPTIONAL
132
+ end
133
+ end
134
+ end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -52,10 +52,17 @@ module Doc #:doc:
52
52
 
53
53
  = Rio - Ruby I/O Comfort Class
54
54
 
55
- Rio is a convenience class wrapping much of the functionality of
56
- IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI, Zlib, and CSV.
55
+ Rio is a convenience class wrapping much of the functionality of IO,
56
+ File, Dir, Pathname, FileUtils, Tempfile, StringIO, and OpenURI and
57
+ uses Zlib, and CSV to extend that functionality using a simple
58
+ consistent interface. Most of the instance methods of IO, File and
59
+ Dir are simply forwarded to the appropriate handle to provide
60
+ identical functionality. Rio also provides a "grande" interface that
61
+ allows many application level IO tasks to be expressed succinctly.
62
+
57
63
 
58
64
  == SYNOPSIS
65
+
59
66
  For the following assume:
60
67
  astring = ""
61
68
  anarray = []
data/lib/rio/doc.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
data/lib/rio/entrysel.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -56,6 +56,11 @@ module RIO
56
56
  abstract_method :=~
57
57
 
58
58
  end
59
+ class Depth < Base
60
+ def =~(entry)
61
+ @match_to === entry.rl.pathdepth
62
+ end
63
+ end
59
64
  class Any < Base
60
65
  def =~(entry) true end
61
66
  end
@@ -63,10 +68,24 @@ module RIO
63
68
  def =~(entry) false end
64
69
  end
65
70
  class Glob < Base
66
- def =~(entry) Impl::U.fnmatch?(entry.filename.to_s,@match_to) end
71
+ def =~(entry)
72
+ ::File.fnmatch?(@match_to,entry.filename.to_s)
73
+ end
67
74
  end
68
75
  class Regexp < Base
69
- def =~(entry) @match_to =~ entry.filename.to_s end
76
+ def =~(entry)
77
+ @match_to =~ entry.filename.to_s
78
+ end
79
+ end
80
+ class PathGlob < Base
81
+ def =~(entry)
82
+ ::File.fnmatch?(@match_to,entry.to_s)
83
+ end
84
+ end
85
+ class PathRegexp < Base
86
+ def =~(entry)
87
+ @match_to =~ entry.to_s
88
+ end
70
89
  end
71
90
  class Proc < Base
72
91
  def =~(entry) @match_to[entry] end
@@ -84,6 +103,8 @@ module RIO
84
103
  end
85
104
  def create(arg)
86
105
  case arg
106
+ when ::Fixnum then Depth.new(arg)
107
+ when ::Range then Depth.new(arg)
87
108
  when ::String then Glob.new(arg)
88
109
  when ::Regexp then Regexp.new(arg)
89
110
  when ::Proc then Proc.new(arg)
@@ -128,8 +149,6 @@ module RIO
128
149
  end
129
150
  class Sels < Array
130
151
  def <<(entry_list)
131
- #p callstr('<<',entry_list)
132
-
133
152
  same_sym = self.grep(entry_list)
134
153
  if same_sym.empty?
135
154
  super
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -0,0 +1,47 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005, 2006 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. Then point your browser at the 'doc/rdoc' directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Rio
33
+ #
34
+ # <b>Rio is pre-alpha software.
35
+ # The documented interface and behavior is subject to change without notice.</b>
36
+
37
+
38
+ require 'rio/exception'
39
+ module RIO
40
+ module Exception
41
+ class NotSupported < Base #:nodoc: all
42
+ def self.emsg(fname,obj)
43
+ "#{fname}() is not supported for #{obj.class} objects"
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading
data/lib/rio/exception.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, Christopher Kleckner
3
+ # Copyright (c) 2005, 2006 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
- # rake rdoc
25
+ # ruby build_doc.rb
26
26
  # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
27
27
  #
28
28
  # Suggested Reading