rio 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. data/README +18 -12
  2. data/Rakefile +57 -87
  3. data/build_doc.rb +19 -17
  4. data/doc/ANNOUNCE +3 -32
  5. data/doc/RELEASE_NOTES +4 -5
  6. data/doc/RIOIS +215 -0
  7. data/doc/generators/template/html/rio.css +428 -0
  8. data/doc/generators/template/html/rio.rb +18 -389
  9. data/doc/generators/template/html/ugly.rb +130 -0
  10. data/doc/pkg_def.rb +66 -0
  11. data/ex/catcsv.rb +64 -0
  12. data/ex/colx.rb +8 -0
  13. data/ex/findinruby +15 -0
  14. data/ex/findruby +14 -0
  15. data/ex/passwd_report.rb +8 -0
  16. data/ex/prompt.rb +25 -0
  17. data/ex/rgb.txt.gz +0 -0
  18. data/ex/riocat +42 -0
  19. data/ex/riogunzip +31 -0
  20. data/ex/riogzip +24 -0
  21. data/ex/rioprompt.rb +10 -0
  22. data/ex/targz2zip +17 -0
  23. data/ex/tonl +10 -0
  24. data/lib/rio.rb +16 -10
  25. data/lib/rio/abstract_method.rb +3 -4
  26. data/lib/rio/argv.rb +3 -4
  27. data/lib/rio/arycopy.rb +3 -4
  28. data/lib/rio/assert.rb +3 -4
  29. data/lib/rio/base.rb +3 -4
  30. data/lib/rio/callstr.rb +3 -4
  31. data/lib/rio/const.rb +3 -4
  32. data/lib/rio/construct.rb +3 -4
  33. data/lib/rio/constructor.rb +12 -8
  34. data/lib/rio/context.rb +15 -30
  35. data/lib/rio/context/autoclose.rb +3 -4
  36. data/lib/rio/context/copying.rb +3 -4
  37. data/lib/rio/context/cxx.rb +3 -4
  38. data/lib/rio/context/dir.rb +3 -4
  39. data/lib/rio/context/gzip.rb +3 -4
  40. data/lib/rio/context/methods.rb +16 -5
  41. data/lib/rio/context/skip.rb +3 -4
  42. data/lib/rio/context/stream.rb +42 -5
  43. data/lib/rio/cp.rb +7 -7
  44. data/lib/rio/def.rb +3 -4
  45. data/lib/rio/dir.rb +3 -4
  46. data/lib/rio/doc.rb +4 -5
  47. data/lib/rio/doc/EXAMPLES.rb +299 -0
  48. data/lib/rio/doc/HOWTO.rb +3 -4
  49. data/lib/rio/doc/INTRO.rb +86 -105
  50. data/lib/rio/doc/OPTIONAL.rb +4 -5
  51. data/lib/rio/doc/SYNOPSIS.rb +7 -6
  52. data/lib/rio/entrysel.rb +21 -23
  53. data/lib/rio/exception.rb +3 -4
  54. data/lib/rio/exception/copy.rb +3 -4
  55. data/lib/rio/exception/notimplemented.rb +57 -0
  56. data/lib/rio/exception/notsupported.rb +3 -4
  57. data/lib/rio/exception/open.rb +3 -4
  58. data/lib/rio/exception/state.rb +3 -4
  59. data/lib/rio/ext.rb +47 -13
  60. data/lib/rio/ext/csv.rb +4 -5
  61. data/lib/rio/ext/if.rb +45 -0
  62. data/lib/rio/ext/mp3info.rb +80 -0
  63. data/lib/rio/ext/splitlines.rb +253 -0
  64. data/lib/rio/ext/yaml.rb +9 -5
  65. data/lib/rio/ext/yaml/doc.rb +133 -0
  66. data/lib/rio/ext/yaml/tie.rb +149 -0
  67. data/lib/rio/ext/zipfile.rb +23 -4
  68. data/lib/rio/ext/zipfile/fs.rb +116 -0
  69. data/lib/rio/ext/zipfile/rl.rb +251 -0
  70. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  71. data/lib/rio/ext/zipfile/state.rb +161 -0
  72. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  73. data/lib/rio/factory.rb +235 -27
  74. data/lib/rio/file.rb +4 -4
  75. data/lib/rio/filter.rb +3 -4
  76. data/lib/rio/filter/closeoneof.rb +3 -4
  77. data/lib/rio/filter/gzip.rb +9 -4
  78. data/lib/rio/fs/base.rb +3 -4
  79. data/lib/rio/fs/impl.rb +4 -5
  80. data/lib/rio/fs/native.rb +3 -4
  81. data/lib/rio/fs/stream.rb +3 -4
  82. data/lib/rio/fs/url.rb +3 -4
  83. data/lib/rio/ftp/conncache.rb +19 -5
  84. data/lib/rio/ftp/dir.rb +3 -4
  85. data/lib/rio/ftp/fs.rb +30 -24
  86. data/lib/rio/grande.rb +27 -7
  87. data/lib/rio/handle.rb +3 -4
  88. data/lib/rio/if.rb +19 -15
  89. data/lib/rio/if/basic.rb +7 -7
  90. data/lib/rio/if/csv.rb +5 -6
  91. data/lib/rio/if/dir.rb +120 -114
  92. data/lib/rio/if/file.rb +52 -44
  93. data/lib/rio/if/fileordir.rb +217 -211
  94. data/lib/rio/if/grande.rb +674 -644
  95. data/lib/rio/if/grande_entry.rb +321 -313
  96. data/lib/rio/if/grande_stream.rb +653 -553
  97. data/lib/rio/if/internal.rb +3 -4
  98. data/lib/rio/if/path.rb +425 -426
  99. data/lib/rio/if/rubyio.rb +681 -0
  100. data/lib/rio/if/string.rb +42 -5
  101. data/lib/rio/if/temp.rb +3 -4
  102. data/lib/rio/if/test.rb +245 -238
  103. data/lib/rio/if/yaml.rb +15 -41
  104. data/lib/rio/ioh.rb +7 -5
  105. data/lib/rio/iomode.rb +19 -7
  106. data/lib/rio/ios/fail.rb +4 -5
  107. data/lib/rio/ios/generic.rb +4 -5
  108. data/lib/rio/ios/mode.rb +4 -5
  109. data/lib/rio/ios/null.rb +6 -7
  110. data/lib/rio/iowrap.rb +3 -4
  111. data/lib/rio/kernel.rb +3 -5
  112. data/lib/rio/local.rb +3 -4
  113. data/lib/rio/match.rb +3 -4
  114. data/lib/rio/matchrecord.rb +3 -4
  115. data/lib/rio/no_warn.rb +3 -4
  116. data/lib/rio/nullio.rb +3 -4
  117. data/lib/rio/open3.rb +4 -5
  118. data/lib/rio/ops/construct.rb +3 -4
  119. data/lib/rio/ops/create.rb +11 -6
  120. data/lib/rio/ops/dir.rb +19 -8
  121. data/lib/rio/ops/either.rb +6 -5
  122. data/lib/rio/ops/file.rb +3 -4
  123. data/lib/rio/ops/path.rb +14 -35
  124. data/lib/rio/ops/stream.rb +3 -4
  125. data/lib/rio/ops/stream/input.rb +4 -7
  126. data/lib/rio/ops/stream/output.rb +3 -4
  127. data/lib/rio/ops/stream/read.rb +6 -5
  128. data/lib/rio/ops/stream/write.rb +3 -4
  129. data/lib/rio/ops/symlink.rb +3 -4
  130. data/lib/rio/path.rb +22 -18
  131. data/lib/rio/path/reset.rb +4 -5
  132. data/lib/rio/piper.rb +3 -4
  133. data/lib/rio/piper/cp.rb +3 -4
  134. data/lib/rio/prompt.rb +10 -5
  135. data/lib/rio/rectype.rb +5 -5
  136. data/lib/rio/rl/base.rb +17 -71
  137. data/lib/rio/rl/builder.rb +14 -38
  138. data/lib/rio/rl/chmap.rb +66 -0
  139. data/lib/rio/rl/fs2url.rb +82 -0
  140. data/lib/rio/rl/ioi.rb +4 -4
  141. data/lib/rio/rl/path.rb +44 -122
  142. data/lib/rio/rl/pathmethods.rb +19 -8
  143. data/lib/rio/rl/uri.rb +137 -60
  144. data/lib/rio/rl/withpath.rb +295 -0
  145. data/lib/rio/scheme/aryio.rb +3 -4
  146. data/lib/rio/scheme/cmdio.rb +3 -4
  147. data/lib/rio/scheme/cmdpipe.rb +4 -4
  148. data/lib/rio/scheme/fd.rb +3 -4
  149. data/lib/rio/scheme/ftp.rb +7 -7
  150. data/lib/rio/scheme/http.rb +4 -5
  151. data/lib/rio/scheme/null.rb +3 -4
  152. data/lib/rio/scheme/path.rb +3 -4
  153. data/lib/rio/scheme/stderr.rb +3 -4
  154. data/lib/rio/scheme/stdio.rb +3 -4
  155. data/lib/rio/scheme/strio.rb +3 -4
  156. data/lib/rio/scheme/sysio.rb +3 -4
  157. data/lib/rio/scheme/tcp.rb +3 -4
  158. data/lib/rio/scheme/temp.rb +6 -6
  159. data/lib/rio/state.rb +18 -46
  160. data/lib/rio/state/error.rb +3 -4
  161. data/lib/rio/stream.rb +4 -4
  162. data/lib/rio/stream/base.rb +3 -4
  163. data/lib/rio/stream/duplex.rb +3 -4
  164. data/lib/rio/stream/open.rb +3 -8
  165. data/lib/rio/symantics.rb +3 -4
  166. data/lib/rio/tempdir.rb +2 -2
  167. data/lib/rio/to_rio.rb +3 -4
  168. data/lib/rio/to_rio/all.rb +3 -4
  169. data/lib/rio/to_rio/array.rb +4 -5
  170. data/lib/rio/to_rio/io.rb +4 -5
  171. data/lib/rio/to_rio/object.rb +4 -5
  172. data/lib/rio/to_rio/string.rb +4 -5
  173. data/lib/rio/uri/file.rb +41 -5
  174. data/lib/rio/util.rb +3 -4
  175. data/lib/rio/version.rb +4 -5
  176. data/setup.rb +368 -339
  177. data/test/bin/list_dir.rb +1 -1
  178. data/test/ftp/anon_misc.rb +13 -1
  179. data/test/ftp/anon_special.rb +6 -6
  180. data/test/ftp/anon_write.rb +10 -3
  181. data/test/ftp/ftp2ftp.rb +2 -2
  182. data/test/ftp/testdef.rb +9 -6
  183. data/test/http/all.rb +3 -0
  184. data/test/http/copy-from-http.rb +140 -0
  185. data/test/lib/temp_server.rb +44 -0
  186. data/test/runalltests.rb +3 -1
  187. data/test/runhttp.rb +12 -0
  188. data/test/runhttptests.rb +1 -1
  189. data/test/runtests.rb +41 -3
  190. data/test/tc/abs.rb +9 -5
  191. data/test/tc/all.rb +9 -4
  192. data/test/tc/base.rb +1 -1
  193. data/test/tc/base2.rb +87 -0
  194. data/test/tc/{methods.rb → clone.rb} +72 -50
  195. data/test/tc/closeoncopy.rb +13 -2
  196. data/test/tc/copy-dir-samevar.rb +91 -0
  197. data/test/tc/dir_iter.rb +0 -1
  198. data/test/tc/empty.rb +6 -2
  199. data/test/tc/expand_path.rb +36 -54
  200. data/test/tc/ext.rb +42 -18
  201. data/test/tc/gzip.rb +30 -3
  202. data/test/tc/likeio.rb +5 -1
  203. data/test/tc/line_record_row.rb +51 -0
  204. data/test/tc/noqae.rb +71 -70
  205. data/test/tc/path_parts.rb +175 -0
  206. data/test/tc/programs_util.rb +3 -3
  207. data/test/tc/rename.rb +4 -5
  208. data/test/tc/riorl.rb +9 -7
  209. data/test/tc/skip.rb +35 -6
  210. data/test/tc/skiplines.rb +34 -5
  211. data/test/tc/split.rb +8 -50
  212. data/test/tc/splitlines.rb +65 -0
  213. data/test/tc/splitpath.rb +83 -0
  214. data/test/tc/testcase.rb +1 -1
  215. data/test/tc/truncate.rb +39 -0
  216. data/test/tc/yaml.rb +9 -8
  217. metadata +261 -207
  218. data/ChangeLog +0 -1418
  219. data/VERSION +0 -1
  220. data/lib/rio/doc/MISC.rb +0 -259
  221. data/lib/rio/if/stream.rb +0 -680
  222. data/lib/rio/impl/path.rb +0 -87
  223. data/test/tc/copy-from-http.rb +0 -89
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  require 'rio/base'
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
@@ -46,15 +45,20 @@ end
46
45
 
47
46
  require 'rio/if/internal'
48
47
  require 'rio/if/basic'
49
- require 'rio/if/grande'
50
- require 'rio/if/grande_entry'
51
- require 'rio/if/grande_stream'
52
48
 
53
- require 'rio/if/test'
54
- require 'rio/if/path'
55
- require 'rio/if/fileordir'
56
- require 'rio/if/file'
57
- require 'rio/if/dir'
58
- require 'rio/if/stream'
59
- require 'rio/if/temp'
60
- require 'rio/if/string'
49
+ module RIO
50
+ class Rio
51
+ require 'rio/if/grande'
52
+ require 'rio/if/grande_entry'
53
+ require 'rio/if/grande_stream'
54
+
55
+ require 'rio/if/test'
56
+ require 'rio/if/path'
57
+ require 'rio/if/fileordir'
58
+ require 'rio/if/file'
59
+ require 'rio/if/dir'
60
+ require 'rio/if/rubyio'
61
+ require 'rio/if/temp'
62
+ require 'rio/if/string'
63
+ end
64
+ end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
@@ -42,10 +41,11 @@ module RIO
42
41
 
43
42
  # Returns the length of the Rio's String representation
44
43
  #
45
- # To get the size of the underlying file system object use Rio#size
44
+ # To get the size of the underlying file system object use RIO::IF::Test#size
46
45
  def length() target.length end
47
46
 
48
- # Equality - calls to_s on the other object and compares it with the value returned by Rio#to_s
47
+ # Equality - calls to_s on _other_ and compares its return value
48
+ # with the value returned by Rio#to_s
49
49
  def ==(other) target == other end
50
50
 
51
51
  # Equality (for case statements) same as Rio#==
@@ -57,7 +57,7 @@ module RIO
57
57
  # Returns true if their String representations are eql?
58
58
  def eql?(other) target.eql?(other) end
59
59
 
60
- # Match - invokes other.=~, passing the value returned by Rio#to_str
60
+ # Match - invokes _other_.=~, passing the value returned by Rio#to_str
61
61
  def =~(other) target =~ other end
62
62
 
63
63
  end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
@@ -42,9 +41,9 @@ module RIO
42
41
  #def dir() target.dir end
43
42
 
44
43
  # Puts a Rio in CSV mode and sets the field and record separators.
45
- # In csv mode selecting with Rio#records will cause each line
44
+ # In csv mode selecting with IF::GrandeStream#records will cause each line
46
45
  # read to be parsed into a line with the CSV standard library.
47
- # Specifying using Rio#lines to select will return unparsed strings
46
+ # Specifying using IF::GrandeStream#lines to select will return unparsed strings
48
47
  # as normal.
49
48
  #
50
49
  # # copy a csv file, changing the field separator
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,129 +23,135 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
39
- class Rio
40
- # Calls Dir#chdir.
41
- #
42
- # Changes the current working directory of the process to the directory specified by the Rio.
43
- # Raises a SystemCallError (probably Errno::ENOENT) if the target directory does not exist or
44
- # if the Rio does not reference a directory.
45
- #
46
- # If a block is given changes to the directory specified by the rio for the length of the block
47
- # and changes back outside the block
48
- #
49
- # Returns the Rio
50
- #
51
- # rio('/home').chdir # change the current working directory to /home
52
- # # the working directory here is /home
53
- # rio('/tmp/data/mydata').delete!.mkpath.chdir {
54
- # # the working directory here is /tmp/data/mydata
55
- # }
56
- # # the working directory here is /home
57
- #
58
- def chdir(&block) target.chdir(&block);self end
59
-
60
-
61
-
62
- # Calls Find#find
63
- #
64
- # Uses Find#find to find all entries recursively for a Rio that
65
- # specifies a directory. Note that there are other ways to recurse through
66
- # a directory structure using a Rio. See Rio#each and Rio#all.
67
- #
68
- # Calls the block passing a Rio for each entry found. The Rio inherits
69
- # file attrubutes from the directory Rio.
70
- #
71
- # Returns itself
72
- #
73
- # rio('adir').find { |entrio| puts "#{entrio}: #{entrio.file?}" }
74
- #
75
- # rio('adir').chomp.find do |entrio|
76
- # next unless entrio.file?
77
- # lines = entrio[0..10] # lines are chomped because 'chomp' was inherited
78
- # end
79
- #
80
- def find(*args,&block) target.find_entries(*args,&block); self end
81
-
82
-
83
- # Calls Dir#glob
84
- #
85
- # Returns the filenames found by expanding the pattern given in string,
86
- # either as an array or as parameters to the block. In both cases the filenames
87
- # are expressed as a Rio.
88
- # Note that this pattern is not a regexp (it�s closer to a shell glob).
89
- # See File::fnmatch for details of file name matching and the meaning of the flags parameter.
90
- #
91
- #
92
- def glob(string,*args,&block) target.glob(string,*args,&block) end
93
-
94
-
95
- # Calls Dir#rmdir
96
- #
97
- # Deletes the directory referenced by the Rio.
98
- # Raises a subclass of SystemCallError if the directory isn�t empty.
99
- # Returns the Rio. If the directory does not exist, just returns the Rio.
100
- #
101
- # See also Rio#rmtree, Rio#delete, Rio#delete!
102
- #
103
- # rio('adir').rmdir # remove the empty directory 'adir'
104
- #
105
- def rmdir() target.rmdir(); self end
106
-
107
-
108
- # Calls FileUtils#rmtree
109
- #
110
- # Removes a directory Rio recursively. Returns the Rio.
111
- # If the directory does not exist, simply returns the Rio
112
- #
113
- # If called with a block, behaves as if <tt>rmtree.each(&block)</tt> had been called
114
- #
115
- # See also Rio#delete!
116
- #
117
- # rio('adir').rmtree # removes the directory 'adir' recursively
118
- #
119
- # # delete the directory 'adir', recreate it and then change to the new directory
120
- # rio('adir/asubdir').rmtree.mkpath.chdir {
121
- # ...
122
- # }
123
- #
124
- #
125
- def rmtree() target.rmtree(); self end
126
-
127
- # Calls FileUtils#mkpath
128
- #
129
- # Makes a new directory named by the Rio and any directories in its path that do not exist.
130
- #
131
- # Returns the Rio. If the directory already exists, just returns the Rio.
132
- #
133
- # rio('adir/a/b').mkpath
134
- def mkpath(&block) target.mkpath(&block); self end
135
-
136
-
137
- # Calls FileUtils#mkdir
138
- #
139
- # Makes a new directory named by the Rio with permissions specified by the optional parameter.
140
- # The permissions may be modified by the value of File::umask
141
- #
142
- # Returns the Rio. If the directory already exists, just returns the Rio.
143
- #
144
- # rio('adir').mkdir
145
- def mkdir(*args,&block) target.mkdir(*args,&block); self end
146
-
147
-
148
-
38
+ module IF
39
+ module Dir
40
+ # Calls ::Dir#chdir.
41
+ #
42
+ # Changes the current working directory of the process to the directory specified by the Rio.
43
+ # Raises a SystemCallError (probably Errno::ENOENT) if the target directory does not exist or
44
+ # if the Rio does not reference a directory.
45
+ #
46
+ # If a block is given changes to the directory specified by the rio for the length of the block
47
+ # and changes back outside the block
48
+ #
49
+ # Returns the Rio
50
+ #
51
+ # rio('/home').chdir # change the current working directory to /home
52
+ # # the working directory here is /home
53
+ # rio('/tmp/data/mydata').delete!.mkpath.chdir {
54
+ # # the working directory here is /tmp/data/mydata
55
+ # }
56
+ # # the working directory here is /home
57
+ #
58
+ def chdir(&block) target.chdir(&block);self end
59
+
60
+
61
+
62
+ # Calls Find#find
63
+ #
64
+ # Uses ::Find#find to find all entries recursively for a Rio that
65
+ # specifies a directory. Note that there are other ways to recurse through
66
+ # a directory structure using a Rio. See IF::Grande#each and IF::GrandeEntry#all.
67
+ #
68
+ # Calls the block passing a Rio for each entry found. The Rio inherits
69
+ # file attrubutes from the directory Rio.
70
+ #
71
+ # Returns itself
72
+ #
73
+ # rio('adir').find { |entrio| puts "#{entrio}: #{entrio.file?}" }
74
+ #
75
+ # rio('adir').chomp.find do |entrio|
76
+ # next unless entrio.file?
77
+ # lines = entrio[0..10] # lines are chomped because 'chomp' was inherited
78
+ # end
79
+ #
80
+ def find(*args,&block) target.find_entries(*args,&block); self end
81
+
82
+
83
+ # Calls ::Dir#glob
84
+ #
85
+ # Returns the filenames found by expanding the pattern given in string,
86
+ # either as an array or as parameters to the block. In both cases the filenames
87
+ # are expressed as a Rio.
88
+ # Note that this pattern is not a regexp (it�s closer to a shell glob).
89
+ # See File::fnmatch for details of file name matching and the meaning of the flags parameter.
90
+ #
91
+ #
92
+ def glob(string,*args,&block) target.glob(string,*args,&block) end
93
+
94
+
95
+ # Calls ::Dir#rmdir
96
+ #
97
+ # Deletes the directory referenced by the Rio.
98
+ # Raises a subclass of SystemCallError if the directory isn�t empty.
99
+ # Returns the Rio. If the directory does not exist, just returns the Rio.
100
+ #
101
+ # See also #rmtree, IF::Grande#delete, IF::Grande#delete!
102
+ #
103
+ # rio('adir').rmdir # remove the empty directory 'adir'
104
+ #
105
+ def rmdir() target.rmdir(); self end
106
+
107
+
108
+ # Calls FileUtils#rmtree
109
+ #
110
+ # Removes a directory Rio recursively. Returns the Rio.
111
+ # If the directory does not exist, simply returns the Rio
112
+ #
113
+ # If called with a block, behaves as if <tt>rmtree.each(&block)</tt> had been called
114
+ #
115
+ # See also IF::Grande#delete!
116
+ #
117
+ # rio('adir').rmtree # removes the directory 'adir' recursively
118
+ #
119
+ # # delete the directory 'adir', recreate it and then change to the new directory
120
+ # rio('adir/asubdir').rmtree.mkpath.chdir {
121
+ # ...
122
+ # }
123
+ #
124
+ #
125
+ def rmtree() target.rmtree(); self end
126
+
127
+ # Calls FileUtils#mkpath
128
+ #
129
+ # Makes a new directory named by the Rio and any directories in its path that do not exist.
130
+ #
131
+ # Returns the Rio. If the directory already exists, just returns the Rio.
132
+ #
133
+ # rio('adir/a/b').mkpath
134
+ def mkpath(&block) target.mkpath(&block); self end
135
+
136
+
137
+ # Calls FileUtils#mkdir
138
+ #
139
+ # Makes a new directory named by the Rio with permissions specified by the optional parameter.
140
+ # The permissions may be modified by the value of File::umask
141
+ #
142
+ # Returns the Rio. If the directory already exists, just returns the Rio.
143
+ #
144
+ # rio('adir').mkdir
145
+ def mkdir(*args,&block) target.mkdir(*args,&block); self end
146
+
147
+
148
+
149
+ end
149
150
  end
150
151
  end
151
152
 
153
+ module RIO
154
+ class Rio
155
+ include RIO::IF::Dir
156
+ end
157
+ end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,59 +23,67 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
39
- class Rio
40
- # Calls FileUtils#rm
41
- #
42
- # Deletes the referenced file, returning the Rio. Raises an exception on any error.
43
- #
44
- # See also Rio#delete, Rio#delete!, Rio#rmdir.
45
- def rm() target.rm(); self end
46
-
47
-
48
- # Calls FileUtils#touch
49
- #
50
- # Updates modification time (mtime) and access time (atime) of a Rio.
51
- # A file is created if it doesn't exist.
52
- #
53
- def touch() target.touch(); self end
54
-
55
- # Calls File#truncate
56
- #
57
- # Truncates a file referenced by a Rio to be at most +sz+ bytes long.
58
- # Not available on all platforms.
59
- #
60
- # f = rio("out")
61
- # f.print!("1234567890")
62
- # f.size #=> 10
63
- # f.truncate(5)
64
- # f.size() #=> 5
65
- #
66
- # If called with no arguments, truncates the Rio at the
67
- # value returned by Rio#pos().
68
- # f.read(2)
69
- # f.truncate.size #=> 2
70
- # f.contents #=> "12"
71
- #
72
- # Returns the Rio
73
- #
74
- def truncate(sz=pos()) target.truncate(sz); self end
75
-
76
- # Calls Rio#truncate(0)
77
- #
78
- def clear() target.clear(); self end
38
+ module IF
39
+ module File
40
+
41
+ # Calls FileUtils#rm
42
+ #
43
+ # Deletes the referenced file, returning the Rio. Raises an exception on any error.
44
+ #
45
+ # See also IF::Grande#delete, IF::Grande#delete!, IF::Dir#rmdir.
46
+ def rm() target.rm(); self end
47
+
48
+
49
+ # Calls FileUtils#touch
50
+ #
51
+ # Updates modification time (mtime) and access time (atime) of a Rio.
52
+ # A file is created if it doesn't exist.
53
+ #
54
+ def touch() target.touch(); self end
55
+
56
+ # Calls File#truncate
57
+ #
58
+ # Truncates a file referenced by a Rio to be at most +sz+ bytes long.
59
+ # Not available on all platforms.
60
+ #
61
+ # f = rio("out")
62
+ # f.print!("1234567890")
63
+ # f.size #=> 10
64
+ # f.truncate(5)
65
+ # f.size() #=> 5
66
+ #
67
+ # If called with no arguments, truncates the Rio at the
68
+ # value returned by IF::FileOrDir#pos().
69
+ # f.read(2)
70
+ # f.truncate.size #=> 2
71
+ # f.contents #=> "12"
72
+ #
73
+ # Returns the Rio
74
+ #
75
+ def truncate(sz=pos()) target.truncate(sz); self end
76
+
77
+ # Calls IF::File#truncate(0)
78
+ #
79
+ def clear() target.clear(); self end
80
+
81
+ end
82
+ end
83
+ end
79
84
 
85
+ module RIO
86
+ class Rio
87
+ include RIO::IF::File
80
88
  end
81
89
  end