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