rio 0.3.7 → 0.3.8

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 (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/if/stream.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
@@ -49,7 +49,7 @@ module RIO
49
49
  #
50
50
  def gets(sep_string=$/) target.gets(sep_string) end
51
51
 
52
- # Slurps the contents of the rio into a string. See also Rio#contents
52
+ # Slurps the contents of the rio into a string.
53
53
  #
54
54
  # astring = rio('afile.txt').contents # slurp the entire contents of afile.txt into astring
55
55
  #
@@ -195,6 +195,68 @@ module RIO
195
195
  def readline(*args) target.readline(*args) end
196
196
 
197
197
 
198
+ # Calls IO#readpartial
199
+ #
200
+ # Reads at most maxlen bytes from the I/O stream but it blocks
201
+ # only if ios has no data immediately available. If the optional
202
+ # outbuf argument is present, it must reference a String, which
203
+ # will receive the data. It raises EOFError on end of file.
204
+ #
205
+ # readpartial is designed for streams such as pipe, socket, tty, etc. It
206
+ # blocks only when no data immediately available. This means that it
207
+ # blocks only when following all conditions hold.
208
+ #
209
+ # * the buffer in the IO object is empty.
210
+ # * the content of the stream is empty.
211
+ # * the stream is not reached to EOF.
212
+ #
213
+ # When readpartial blocks, it waits data or EOF on the stream. If some
214
+ # data is reached, readpartial returns with the data. If EOF is reached,
215
+ # readpartial raises EOFError.
216
+ #
217
+ # When readpartial doesn�t blocks, it returns or raises immediately. If
218
+ # the buffer is not empty, it returns the data in the buffer. Otherwise
219
+ # if the stream has some content, it returns the data in the
220
+ # stream. Otherwise if the stream is reached to EOF, it raises EOFError.
221
+ #
222
+ # r, w = IO.pipe # buffer pipe content
223
+ # w << "abc" # "" "abc".
224
+ # r.readpartial(4096) #=> "abc" "" ""
225
+ # r.readpartial(4096) # blocks because buffer and pipe is empty.
226
+ #
227
+ # r, w = IO.pipe # buffer pipe content
228
+ # w << "abc" # "" "abc"
229
+ # w.close # "" "abc" EOF
230
+ # r.readpartial(4096) #=> "abc" "" EOF
231
+ # r.readpartial(4096) # raises EOFError
232
+ #
233
+ # r, w = IO.pipe # buffer pipe content
234
+ # w << "abc\ndef\n" # "" "abc\ndef\n"
235
+ # r.gets #=> "abc\n" "def\n" ""
236
+ # w << "ghi\n" # "def\n" "ghi\n"
237
+ # r.readpartial(4096) #=> "def\n" "" "ghi\n"
238
+ # r.readpartial(4096) #=> "ghi\n" "" ""
239
+ #
240
+ # Note that readpartial is nonblocking-flag insensitive. It blocks even
241
+ # if the nonblocking-flag is set.
242
+ #
243
+ # Also note that readpartial behaves similar to sysread in blocking
244
+ # mode. The behavior is identical when the buffer is empty.
245
+ # ios.reopen(other_IO) => ios ios.reopen(path, mode_str) => ios
246
+ #
247
+ # Reassociates ios with the I/O stream given in other_IO or to a new
248
+ # stream opened on path. This may dynamically change the actual class of
249
+ # this stream.
250
+ #
251
+ # f1 = File.new("testfile")
252
+ # f2 = File.new("testfile")
253
+ # f2.readlines[0] #=> "This is line one\n"
254
+ # f2.reopen(f1) #=> #<File:testfile>
255
+ # f2.readlines[0] #=> "This is line one\n"
256
+ #
257
+ def readpartial(*args) target.readpartial(*args) end
258
+
259
+
198
260
  # Calls IO::print
199
261
  #
200
262
  # Writes the given object(s) to the Rio. If the output record separator ($\) is not nil,
@@ -283,7 +345,7 @@ module RIO
283
345
  # ario.write(*args)
284
346
  # ario.close
285
347
  #
286
- def write!(*argv) target.write!(*argv); self end
348
+ def write!(*argv) target.write!(*argv) end
287
349
 
288
350
 
289
351
  # Calls IO#write
@@ -292,7 +354,7 @@ module RIO
292
354
  # it will be converted to a
293
355
  # string using +to_s+. Returns the number of bytes written.
294
356
  #
295
- def write(*argv) target.write(*argv); self end
357
+ def write(*argv) target.write(*argv) end
296
358
 
297
359
 
298
360
  # Calls IO#eof?
@@ -404,8 +466,8 @@ module RIO
404
466
  # query file-oriented I/O streams. Arguments and results are platform
405
467
  # dependent. If _arg_ is a number, its value is passed directly. If
406
468
  # it is a string, it is interpreted as a binary sequence of bytes
407
- # (+Array#pack+ might be a useful way to build this string). On Unix
408
- # platforms, see +fcntl(2)+ for details. Not implemented on all
469
+ # (<tt>Array#pack</tt> might be a useful way to build this string). On Unix
470
+ # platforms, see <tt>fcntl(2)</tt> for details. Not implemented on all
409
471
  # platforms.
410
472
  #
411
473
  #
@@ -446,21 +508,22 @@ module RIO
446
508
  # Calls IO#pid
447
509
  # ario.pid => fixnum
448
510
  # Returns the process ID of a child process associated with _ario_.
449
- # This will be set by +IO::popen+.
511
+ # This will be set by <tt>IO::popen</tt>.
450
512
  #
451
- # pipe = IO.popen("-")
452
- # if pipe
453
- # $stderr.puts "In parent, child pid is #{pipe.pid}"
454
- # else
455
- # $stderr.puts "In child, pid is #{$$}"
456
- # end
513
+ # pipe = IO.popen("-")
514
+ # if pipe
515
+ # $stderr.puts "In parent, child pid is #{pipe.pid}"
516
+ # else
517
+ # $stderr.puts "In child, pid is #{$$}"
518
+ # end
457
519
  #
458
- # _produces:_
520
+ # produces:
459
521
  #
460
- # In child, pid is 26209
461
- # In parent, child pid is 26209
522
+ # In child, pid is 26209
523
+ # In parent, child pid is 26209
462
524
  #
463
525
  #
526
+ def pid() target.pid end
464
527
 
465
528
 
466
529
  # Calls IO#putc
@@ -489,6 +552,7 @@ module RIO
489
552
  # f.getc #=> 104
490
553
  #
491
554
  #
555
+ def getc() target.getc() end
492
556
 
493
557
  # Calls IO#readchar
494
558
  # ario.readchar => fixnum
@@ -511,6 +575,8 @@ module RIO
511
575
  # f2.readlines[0] #=> "This is line one\n"
512
576
  #
513
577
  #
578
+ #def reopen(m) target.reopen(m) end
579
+
514
580
 
515
581
  # Calls IO#stat
516
582
  # ario.stat => stat
@@ -525,29 +591,19 @@ module RIO
525
591
  #
526
592
  #
527
593
 
528
- # Calls IO#tell
529
- # ario.pos => integer
530
- # ario.tell => integer
531
- # Returns the current offset (in bytes) of _ario_.
532
- #
533
- # f = rio("testfile")
534
- # f.pos #=> 0
535
- # f.gets #=> "This is line one\n"
536
- # f.pos #=> 17
537
- #
538
- #
539
-
540
594
  # Calls IO#to_i
541
595
  # to_i()
542
596
  # Alias for #fileno
543
597
  #
544
598
  #
599
+ def to_i() target.to_i() end
545
600
 
546
601
  # Calls IO#to_io
547
602
  # ario.to_io -> ios
548
603
  # Returns _ario_.
549
604
  #
550
605
  #
606
+ def to_io() target.to_io() end
551
607
 
552
608
  # Calls IO#tty?
553
609
  # ario.tty? => true or false
data/lib/rio/if/string.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/if/temp.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/if/test.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
@@ -75,7 +75,7 @@ module RIO
75
75
  # Returns +true+ if the named file is a symbolic link.
76
76
  def symlink?() target.symlink? end
77
77
 
78
- # Returns +true+ if a Rio is not closed?
78
+ # Returns +true+ if a Rio is not #closed?
79
79
  def open?() target.open?() end
80
80
 
81
81
  # Calls IO#closed?
@@ -84,9 +84,42 @@ module RIO
84
84
  # both reader and writer), +false+ otherwise.
85
85
  def closed?() target.closed?() end
86
86
 
87
+ # call-seq:
88
+ # fnmatch?( pattern, [flags] ) => (true or false)
89
+ #
87
90
  # Calls File#fnmatch?
88
91
  #
89
- # Returns true if path matches against pattern
92
+ # Returns true if Rio#path matches <i>pattern</i>. The
93
+ # pattern is not a regular expression; instead it follows rules
94
+ # similar to shell filename globbing. It may contain the following
95
+ # metacharacters:
96
+ #
97
+ # <i>flags</i> is a bitwise OR of the <code>FNM_xxx</code> parameters.
98
+ # The same glob pattern and flags are used by <code>Dir::glob</code>.
99
+ #
100
+ # rio('cat').fnmatch?('cat') #=> true
101
+ # rio('category').fnmatch?('cat') #=> false
102
+ # rio('cats').fnmatch?('c{at,ub}s') #=> false
103
+ # rio('cubs').fnmatch?('c{at,ub}s') #=> false
104
+ # rio('cat').fnmatch?('c{at,ub}s') #=> false
105
+ #
106
+ # rio('cat').fnmatch?('c?t') #=> true
107
+ # rio('cat').fnmatch?('c\?t') #=> false
108
+ # rio('cat').fnmatch?('c??t') #=> false
109
+ # rio('cats').fnmatch?('c*') #=> true
110
+ #
111
+ # rio('cat').fnmatch?('c*t') #=> true
112
+ # rio('cat').fnmatch?('c\at') #=> true
113
+ # rio('cat').fnmatch?('c\at',File::FNM_NOESCAPE) #=> false
114
+ # rio('a/b').fnmatch?('a?b') #=> true
115
+ # rio('a/b').fnmatch?('a?b',File::FNM_PATHNAME) #=> false
116
+ #
117
+ # rio('.profile').fnmatch?('*') #=> false
118
+ # rio('.profile').fnmatch?('*',File::FNM_DOTMATCH) #=> true
119
+ # rio('dave/.profile').fnmatch?('*') #=> true
120
+ # rio('dave/.profile').fnmatch?('*',File::FNM_DOTMATCH) #=> true
121
+ # rio('dave/.profile').fnmatch?('*',File::FNM_PATHNAME) #=> false
122
+ #
90
123
  def fnmatch?(*args) target.fnmatch?(*args) end
91
124
 
92
125
  # Calls File#ftype
data/lib/rio/if/yaml.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/if.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/impl/path.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/ioh.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
@@ -58,9 +58,11 @@ module RIO
58
58
  end
59
59
  class Stream < Base
60
60
  attr_reader :iostack
61
+ attr_accessor :hindex
61
62
  def initialize(iosp,*args)
62
63
  super
63
64
  @iostack = [@ios]
65
+ @hindex = -1
64
66
  end
65
67
  def initialize_copy(*args)
66
68
  #p callstr('ioh_stream:initialize_copy',*args)
@@ -75,7 +77,7 @@ module RIO
75
77
  sz || 512
76
78
  end
77
79
 
78
- def handle() @iostack[-1] end
80
+ def handle() @iostack[@hindex] end
79
81
  def close() handle.close unless self.closed? end
80
82
  def closed?() handle.nil? or handle.closed? end
81
83
  def eof?() closed? or handle.eof? end
@@ -87,13 +89,22 @@ module RIO
87
89
  end
88
90
  self
89
91
  end
90
-
92
+ def puts(*args)
93
+ handle.puts(*args)
94
+ end
95
+ def each_bytes(nb,&block)
96
+ until handle.eof?
97
+ break unless s = handle.read(nb)
98
+ yield s
99
+ end
100
+ self
101
+ end
91
102
  extend Forwardable
92
103
  def_instance_delegators(:handle,:binmode,:stat,:rewind,
93
104
  :each,:each_byte,:each_line,:gets,:getc,
94
105
  :read,:readlines,:readline,:sysread,
95
- :<<,:print,:printf,:puts,:putc,:write,:syswrite,
96
- :pos,:pos=,:lineno,
106
+ :<<,:print,:printf,:putc,:write,:syswrite,
107
+ :pos,:pos=,:lineno,:lineno=,
97
108
  :fileno,
98
109
  :close_read,:close_write,
99
110
  :fsync,:sync,:sync=,:fcntl,:ioctl)
data/lib/rio/iomode.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
@@ -58,7 +58,7 @@ module RIO
58
58
 
59
59
  def to_s() @mode.to_s end
60
60
 
61
- abstract_method :primarily_read?, :primarily_write?, :allows_both?
61
+ abstract_method :primarily_read?, :primarily_write?, :allows_both?, :creates?
62
62
 
63
63
  def read_only?()
64
64
  allows_read? and !allows_write?
@@ -84,6 +84,7 @@ module RIO
84
84
  def allows_both?()
85
85
  @mode[1,1] == '+'
86
86
  end
87
+ def creates?() primarily_append? || primarily_write? end
87
88
  end
88
89
  class Str < Base
89
90
  include StrMethods
@@ -0,0 +1,107 @@
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/notsupported'
39
+
40
+ module RIO
41
+ module IOS
42
+ module Methods
43
+ end
44
+ end
45
+ end
46
+
47
+ module RIO
48
+ module IOS
49
+ module Fail #:nodoc: all
50
+ def notsupported(sym)
51
+ raise RIO::Exception::NotSupported,RIO::Exception::NotSupported.emsg(sym,self)
52
+ end
53
+
54
+ def <<(obj) notsupported(:<<) end
55
+ def binmode() notsupported(:binmode) end
56
+ def close() notsupported(:close) end
57
+ def close_read() notsupported(:close_read) end
58
+ def close_write() notsupported(:close_write) end
59
+ def closed?() notsupported(:closed?) end
60
+ def each(sep_string=$/,&block) notsupported(:each) end
61
+ def each_line(sep_string=$/,&block) notsupported(:each_line) end
62
+ def each_byte(sep_string=$/,&block) notsupported(:each_byte) end
63
+ def eof?() notsupported(:eof?) end
64
+ def fcntl(integer_cmd,arg) notsupported(:fcntl) end
65
+ def fileno() notsupported(:fileno) end
66
+ def to_i() notsupported(:to_i) end
67
+ def flush() notsupported(:flush) end
68
+ def fsync() notsupported(:fsync) end
69
+ def getc() notsupported(:getc) end
70
+ def gets(sep_string=$/) notsupported(:gets) end
71
+ def ioctl(integer_cmd,arg) notsupported(:ioctl) end
72
+ def isatty() notsupported(:isatty) end
73
+ def tty?() notsupported(:tty?) end
74
+ def lineno() notsupported(:lineno) end
75
+ def lineno=(a) notsupported(:lineno=) end
76
+ def pid() notsupported(:pid) end
77
+ def pos() notsupported(:pos) end
78
+ def tell() notsupported(:tell) end
79
+ def pos=(v) notsupported(:pos=) end
80
+ def print(*objs) notsupported(:print) end
81
+ def printf(format,*objs) notsupported(:printf) end
82
+ def putc(obj) notsupported(:putc) end
83
+ def puts(*objs) notsupported(:puts) end
84
+ def read(*args) notsupported(:read) end
85
+ def readchar() notsupported(:readchar) end
86
+ def readline(sep_string=$/) notsupported(:readline) end
87
+ def readlines(sep_string=$/) notsupported(:readlines) end
88
+ def readpartial(maxlen,*args) notsupported(:readpartial) end
89
+ def reopen(*args) notsupported(:reopen) end
90
+ def rewind() notsupported(:rewind) end
91
+ def seek() notsupported(:seek) end
92
+ def stat() notsupported(:stat) end
93
+ def sync() notsupported(:sync) end
94
+ def sync=(v) notsupported(:sync=) end
95
+ def sysread() notsupported(:sysread) end
96
+ def sysseek() notsupported(:sysseek) end
97
+ def syswrite() notsupported(:syswrite) end
98
+ def ungetc() notsupported(:ungetc) end
99
+ def write(str) notsupported(:write) end
100
+
101
+ def callstr(func,*args)
102
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
103
+ end
104
+
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,120 @@
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/notsupported'
39
+
40
+ module RIO
41
+ class GenericIOMode #:nodoc: all
42
+ def initialize(mode_string)
43
+ @str = mode_string
44
+ end
45
+ def to_s() @str end
46
+ def can_write?
47
+ @str =~ /^[aw]/ or @str =~ /\+/
48
+ end
49
+ def can_read?
50
+ @str =~ /^r/ or @str =~ /\+/
51
+ end
52
+ def appends?
53
+ @str =~ /^a/
54
+ end
55
+ def =~(re)
56
+ re =~ @str
57
+ end
58
+ end
59
+ end
60
+
61
+ module RIO
62
+ module IOS
63
+ class Generic #:nodoc: all
64
+ def initialize(el,m='r')
65
+ end
66
+
67
+ def <<(obj) self end
68
+ def binmode() self end
69
+ def close() nil end
70
+ def close_read() nil end
71
+ def close_write() nil end
72
+ def closed?() true end
73
+ def each(sep_string=$/,&block) self end
74
+ def each_line(sep_string=$/,&block) self end
75
+ def each_byte(sep_string=$/,&block) nil end
76
+ def eof?() true end
77
+ def fcntl(integer_cmd,arg) nil end
78
+ def fileno() nil end
79
+ def to_i() nil end
80
+ def flush() self end
81
+ def fsync() nil end
82
+ def getc() nil end
83
+ def gets(sep_string=$/) nil end
84
+ def ioctl(integer_cmd,arg) nil end
85
+ def isatty() false end
86
+ def tty?() false end
87
+ def lineno() 0 end
88
+ def lineno=(a) nil end
89
+ def pid() nil end
90
+ def pos() nil end
91
+ def tell() nil end
92
+ def pos=(v) self.pos end
93
+ def print(*objs) nil end
94
+ def printf(format,*objs) nil end
95
+ def putc(obj) nil end
96
+ def puts(*objs) nil end
97
+ def read(*args) nil end
98
+ def readchar() nil end
99
+ def readline(sep_string=$/) nil end
100
+ def readlines(sep_string=$/) [] end
101
+ def readpartial(maxlen,*args) end
102
+ def reopen(*args) self end
103
+ def rewind() 0 end
104
+ def seek() 0 end
105
+ def stat() nil end
106
+ def sync() nil end
107
+ def sync=(v) nil end
108
+ def sysread() 0 end
109
+ def sysseek() 0 end
110
+ def syswrite() 0 end
111
+ def ungetc() nil end
112
+ def write(str) 0 end
113
+
114
+ def callstr(func,*args)
115
+ self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
116
+ end
117
+
118
+ end
119
+ end
120
+ end