wishdev-rio 0.4.3.1

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 (296) hide show
  1. data/COPYING +341 -0
  2. data/README +81 -0
  3. data/Rakefile +281 -0
  4. data/build_doc.rb +94 -0
  5. data/doc/ANNOUNCE +159 -0
  6. data/doc/RELEASE_NOTES +308 -0
  7. data/doc/RIOIS +215 -0
  8. data/doc/generators/template/html/rio.css +428 -0
  9. data/doc/generators/template/html/rio.rb +523 -0
  10. data/doc/generators/template/html/ugly.rb +132 -0
  11. data/doc/pkg_def.rb +60 -0
  12. data/doc/rfc1738.txt +1403 -0
  13. data/doc/rfc959.txt +3933 -0
  14. data/ex/catcsv.rb +64 -0
  15. data/ex/colx.rb +8 -0
  16. data/ex/findinruby +15 -0
  17. data/ex/findruby +14 -0
  18. data/ex/passwd_report.rb +8 -0
  19. data/ex/prompt.rb +25 -0
  20. data/ex/rgb.txt.gz +0 -0
  21. data/ex/riocat +42 -0
  22. data/ex/riogunzip +31 -0
  23. data/ex/riogzip +24 -0
  24. data/ex/rioprompt.rb +10 -0
  25. data/ex/targz2zip +17 -0
  26. data/ex/tonl +10 -0
  27. data/lib/rio/abstract_method.rb +56 -0
  28. data/lib/rio/argv.rb +56 -0
  29. data/lib/rio/arycopy.rb +43 -0
  30. data/lib/rio/assert.rb +114 -0
  31. data/lib/rio/base.rb +56 -0
  32. data/lib/rio/callstr.rb +46 -0
  33. data/lib/rio/const.rb +51 -0
  34. data/lib/rio/construct.rb +50 -0
  35. data/lib/rio/constructor.rb +258 -0
  36. data/lib/rio/context/autoclose.rb +72 -0
  37. data/lib/rio/context/copying.rb +55 -0
  38. data/lib/rio/context/cxx.rb +66 -0
  39. data/lib/rio/context/dir.rb +120 -0
  40. data/lib/rio/context/gzip.rb +50 -0
  41. data/lib/rio/context/methods.rb +182 -0
  42. data/lib/rio/context/skip.rb +66 -0
  43. data/lib/rio/context/stream.rb +229 -0
  44. data/lib/rio/context.rb +117 -0
  45. data/lib/rio/cp.rb +370 -0
  46. data/lib/rio/def.rb +53 -0
  47. data/lib/rio/dir.rb +144 -0
  48. data/lib/rio/doc/EXAMPLES.rb +299 -0
  49. data/lib/rio/doc/HOWTO.rb +737 -0
  50. data/lib/rio/doc/INDEX.rb +311 -0
  51. data/lib/rio/doc/INTRO.rb +1068 -0
  52. data/lib/rio/doc/OPTIONAL.rb +130 -0
  53. data/lib/rio/doc/SYNOPSIS.rb +183 -0
  54. data/lib/rio/doc.rb +45 -0
  55. data/lib/rio/entrysel.rb +246 -0
  56. data/lib/rio/exception/copy.rb +97 -0
  57. data/lib/rio/exception/notimplemented.rb +57 -0
  58. data/lib/rio/exception/notsupported.rb +46 -0
  59. data/lib/rio/exception/open.rb +61 -0
  60. data/lib/rio/exception/state.rb +73 -0
  61. data/lib/rio/exception.rb +41 -0
  62. data/lib/rio/ext/csv.rb +351 -0
  63. data/lib/rio/ext/if.rb +45 -0
  64. data/lib/rio/ext/mp3info.rb +80 -0
  65. data/lib/rio/ext/splitlines.rb +253 -0
  66. data/lib/rio/ext/yaml/doc.rb +133 -0
  67. data/lib/rio/ext/yaml/tie.rb +149 -0
  68. data/lib/rio/ext/yaml.rb +164 -0
  69. data/lib/rio/ext/zipfile/fs.rb +116 -0
  70. data/lib/rio/ext/zipfile/rl.rb +251 -0
  71. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  72. data/lib/rio/ext/zipfile/state.rb +161 -0
  73. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  74. data/lib/rio/ext/zipfile.rb +110 -0
  75. data/lib/rio/ext.rb +138 -0
  76. data/lib/rio/factory.rb +436 -0
  77. data/lib/rio/file.rb +118 -0
  78. data/lib/rio/filter/closeoneof.rb +103 -0
  79. data/lib/rio/filter/gzip.rb +70 -0
  80. data/lib/rio/filter.rb +94 -0
  81. data/lib/rio/fs/base.rb +41 -0
  82. data/lib/rio/fs/impl.rb +122 -0
  83. data/lib/rio/fs/native.rb +75 -0
  84. data/lib/rio/fs/stream.rb +61 -0
  85. data/lib/rio/fs/url.rb +63 -0
  86. data/lib/rio/ftp/conncache.rb +101 -0
  87. data/lib/rio/ftp/dir.rb +94 -0
  88. data/lib/rio/ftp/fs.rb +180 -0
  89. data/lib/rio/ftp/ftpfile.rb +20 -0
  90. data/lib/rio/grande.rb +97 -0
  91. data/lib/rio/handle.rb +100 -0
  92. data/lib/rio/if/basic.rb +64 -0
  93. data/lib/rio/if/csv.rb +76 -0
  94. data/lib/rio/if/dir.rb +157 -0
  95. data/lib/rio/if/file.rb +89 -0
  96. data/lib/rio/if/fileordir.rb +268 -0
  97. data/lib/rio/if/grande.rb +729 -0
  98. data/lib/rio/if/grande_entry.rb +379 -0
  99. data/lib/rio/if/grande_stream.rb +693 -0
  100. data/lib/rio/if/internal.rb +125 -0
  101. data/lib/rio/if/path.rb +462 -0
  102. data/lib/rio/if/rubyio.rb +681 -0
  103. data/lib/rio/if/string.rb +83 -0
  104. data/lib/rio/if/temp.rb +45 -0
  105. data/lib/rio/if/test.rb +282 -0
  106. data/lib/rio/if/yaml.rb +206 -0
  107. data/lib/rio/if.rb +64 -0
  108. data/lib/rio/ioh.rb +162 -0
  109. data/lib/rio/iomode.rb +109 -0
  110. data/lib/rio/ios/fail.rb +106 -0
  111. data/lib/rio/ios/generic.rb +119 -0
  112. data/lib/rio/ios/mode.rb +60 -0
  113. data/lib/rio/ios/null.rb +119 -0
  114. data/lib/rio/iowrap.rb +128 -0
  115. data/lib/rio/kernel.rb +54 -0
  116. data/lib/rio/local.rb +62 -0
  117. data/lib/rio/match.rb +53 -0
  118. data/lib/rio/matchrecord.rb +283 -0
  119. data/lib/rio/no_warn.rb +49 -0
  120. data/lib/rio/nullio.rb +159 -0
  121. data/lib/rio/open3.rb +68 -0
  122. data/lib/rio/ops/construct.rb +61 -0
  123. data/lib/rio/ops/create.rb +77 -0
  124. data/lib/rio/ops/dir.rb +346 -0
  125. data/lib/rio/ops/either.rb +134 -0
  126. data/lib/rio/ops/file.rb +102 -0
  127. data/lib/rio/ops/path.rb +296 -0
  128. data/lib/rio/ops/stream/input.rb +267 -0
  129. data/lib/rio/ops/stream/output.rb +100 -0
  130. data/lib/rio/ops/stream/read.rb +86 -0
  131. data/lib/rio/ops/stream/write.rb +57 -0
  132. data/lib/rio/ops/stream.rb +87 -0
  133. data/lib/rio/ops/symlink.rb +80 -0
  134. data/lib/rio/path/reset.rb +69 -0
  135. data/lib/rio/path.rb +129 -0
  136. data/lib/rio/piper/cp.rb +80 -0
  137. data/lib/rio/piper.rb +122 -0
  138. data/lib/rio/prompt.rb +66 -0
  139. data/lib/rio/rectype.rb +88 -0
  140. data/lib/rio/rl/base.rb +118 -0
  141. data/lib/rio/rl/builder.rb +117 -0
  142. data/lib/rio/rl/chmap.rb +66 -0
  143. data/lib/rio/rl/fs2url.rb +82 -0
  144. data/lib/rio/rl/ioi.rb +78 -0
  145. data/lib/rio/rl/path.rb +110 -0
  146. data/lib/rio/rl/pathmethods.rb +116 -0
  147. data/lib/rio/rl/uri.rb +200 -0
  148. data/lib/rio/rl/withpath.rb +296 -0
  149. data/lib/rio/scheme/aryio.rb +88 -0
  150. data/lib/rio/scheme/cmdio.rb +80 -0
  151. data/lib/rio/scheme/cmdpipe.rb +118 -0
  152. data/lib/rio/scheme/fd.rb +65 -0
  153. data/lib/rio/scheme/ftp.rb +141 -0
  154. data/lib/rio/scheme/http.rb +78 -0
  155. data/lib/rio/scheme/null.rb +55 -0
  156. data/lib/rio/scheme/path.rb +98 -0
  157. data/lib/rio/scheme/stderr.rb +55 -0
  158. data/lib/rio/scheme/stdio.rb +71 -0
  159. data/lib/rio/scheme/strio.rb +87 -0
  160. data/lib/rio/scheme/sysio.rb +63 -0
  161. data/lib/rio/scheme/tcp.rb +75 -0
  162. data/lib/rio/scheme/temp.rb +200 -0
  163. data/lib/rio/state/error.rb +72 -0
  164. data/lib/rio/state.rb +242 -0
  165. data/lib/rio/stream/base.rb +54 -0
  166. data/lib/rio/stream/duplex.rb +79 -0
  167. data/lib/rio/stream/open.rb +202 -0
  168. data/lib/rio/stream.rb +181 -0
  169. data/lib/rio/symantics.rb +45 -0
  170. data/lib/rio/tempdir.rb +132 -0
  171. data/lib/rio/to_rio/all.rb +39 -0
  172. data/lib/rio/to_rio/array.rb +39 -0
  173. data/lib/rio/to_rio/io.rb +40 -0
  174. data/lib/rio/to_rio/object.rb +42 -0
  175. data/lib/rio/to_rio/string.rb +40 -0
  176. data/lib/rio/to_rio.rb +67 -0
  177. data/lib/rio/uri/file.rb +198 -0
  178. data/lib/rio/util.rb +48 -0
  179. data/lib/rio/version.rb +51 -0
  180. data/lib/rio.rb +162 -0
  181. data/setup.rb +1360 -0
  182. data/test/bin/count_lines.rb +11 -0
  183. data/test/bin/find_lines.rb +13 -0
  184. data/test/bin/list_dir.rb +14 -0
  185. data/test/ftp/all.rb +9 -0
  186. data/test/ftp/anon_copy_data.rb +36 -0
  187. data/test/ftp/anon_misc.rb +124 -0
  188. data/test/ftp/anon_read.rb +105 -0
  189. data/test/ftp/anon_special.rb +68 -0
  190. data/test/ftp/anon_write.rb +70 -0
  191. data/test/ftp/ftp2ftp.rb +51 -0
  192. data/test/ftp/initftpfiles.rb +14 -0
  193. data/test/ftp/testdef.rb +55 -0
  194. data/test/gem_runtests.rb +15 -0
  195. data/test/http/all.rb +4 -0
  196. data/test/http/copy-from-http.rb +141 -0
  197. data/test/http/uri-meta.rb +72 -0
  198. data/test/lib/temp_server.rb +46 -0
  199. data/test/runalltests.rb +17 -0
  200. data/test/runftptests.rb +14 -0
  201. data/test/runhttp.rb +11 -0
  202. data/test/runhttptests.rb +14 -0
  203. data/test/runtests.rb +52 -0
  204. data/test/tc/abs.rb +355 -0
  205. data/test/tc/all.rb +80 -0
  206. data/test/tc/base.rb +31 -0
  207. data/test/tc/base2.rb +87 -0
  208. data/test/tc/cd1.rb +113 -0
  209. data/test/tc/clearsel.rb +68 -0
  210. data/test/tc/clone.rb +208 -0
  211. data/test/tc/closeoncopy.rb +102 -0
  212. data/test/tc/closeoneof.rb +194 -0
  213. data/test/tc/cmdpipe.rb +149 -0
  214. data/test/tc/copy-dir-samevar.rb +91 -0
  215. data/test/tc/copy-from.rb +129 -0
  216. data/test/tc/copy-to.rb +91 -0
  217. data/test/tc/copy.rb +74 -0
  218. data/test/tc/copyarray.rb +188 -0
  219. data/test/tc/copydest.rb +50 -0
  220. data/test/tc/copydir.rb +166 -0
  221. data/test/tc/copydirlines.rb +121 -0
  222. data/test/tc/copylines.rb +46 -0
  223. data/test/tc/copynonex.rb +118 -0
  224. data/test/tc/copysymlink.rb +39 -0
  225. data/test/tc/create.rb +114 -0
  226. data/test/tc/csv.rb +226 -0
  227. data/test/tc/csv2.rb +138 -0
  228. data/test/tc/csv_columns.rb +37 -0
  229. data/test/tc/csvutil.rb +56 -0
  230. data/test/tc/dir.rb +76 -0
  231. data/test/tc/dir_iter.rb +383 -0
  232. data/test/tc/dirautoclose.rb +67 -0
  233. data/test/tc/dirent.rb +178 -0
  234. data/test/tc/dirss.rb +81 -0
  235. data/test/tc/each.rb +111 -0
  236. data/test/tc/each_break.rb +243 -0
  237. data/test/tc/edf.rb +81 -0
  238. data/test/tc/empty.rb +51 -0
  239. data/test/tc/emptyriodir.rb +129 -0
  240. data/test/tc/entary.rb +227 -0
  241. data/test/tc/entsel.rb +110 -0
  242. data/test/tc/eq.rb +101 -0
  243. data/test/tc/expand_path.rb +69 -0
  244. data/test/tc/ext.rb +136 -0
  245. data/test/tc/fileno.rb +94 -0
  246. data/test/tc/files_select.rb +92 -0
  247. data/test/tc/get.rb +152 -0
  248. data/test/tc/getrec.rb +137 -0
  249. data/test/tc/gzip.rb +109 -0
  250. data/test/tc/io_each_byte.rb +60 -0
  251. data/test/tc/io_read.rb +80 -0
  252. data/test/tc/iometh.rb +149 -0
  253. data/test/tc/likeio.rb +116 -0
  254. data/test/tc/line_record_row.rb +51 -0
  255. data/test/tc/lineno.rb +196 -0
  256. data/test/tc/lines.rb +66 -0
  257. data/test/tc/misc.rb +432 -0
  258. data/test/tc/nolines.rb +204 -0
  259. data/test/tc/noqae.rb +879 -0
  260. data/test/tc/null.rb +45 -0
  261. data/test/tc/once.rb +6 -0
  262. data/test/tc/overload.rb +140 -0
  263. data/test/tc/pa.rb +158 -0
  264. data/test/tc/path_parts.rb +175 -0
  265. data/test/tc/pathop.rb +60 -0
  266. data/test/tc/paths.rb +145 -0
  267. data/test/tc/pid.rb +31 -0
  268. data/test/tc/piper.rb +143 -0
  269. data/test/tc/programs_util.rb +24 -0
  270. data/test/tc/qae.rb +493 -0
  271. data/test/tc/qae_riovar.rb +499 -0
  272. data/test/tc/readline.rb +30 -0
  273. data/test/tc/records.rb +68 -0
  274. data/test/tc/rename.rb +233 -0
  275. data/test/tc/rename_assign.rb +45 -0
  276. data/test/tc/riorl.rb +181 -0
  277. data/test/tc/route.rb +51 -0
  278. data/test/tc/selnosel.rb +33 -0
  279. data/test/tc/skip.rb +89 -0
  280. data/test/tc/skiplines.rb +71 -0
  281. data/test/tc/split.rb +28 -0
  282. data/test/tc/splitlines.rb +65 -0
  283. data/test/tc/splitpath.rb +83 -0
  284. data/test/tc/sub.rb +46 -0
  285. data/test/tc/symlink.rb +176 -0
  286. data/test/tc/symlink0.rb +348 -0
  287. data/test/tc/symlink1.rb +114 -0
  288. data/test/tc/synopsis.rb +75 -0
  289. data/test/tc/temp.rb +152 -0
  290. data/test/tc/tempdir.rb +60 -0
  291. data/test/tc/tempfile.rb +66 -0
  292. data/test/tc/testcase.rb +170 -0
  293. data/test/tc/tonl.rb +37 -0
  294. data/test/tc/truncate.rb +39 -0
  295. data/test/tc/yaml.rb +275 -0
  296. metadata +387 -0
@@ -0,0 +1,134 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
+ # All rights reserved
5
+ #
6
+ # This file is part of the Rio library for ruby.
7
+ #
8
+ # Rio is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Rio is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Rio; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # ===============================================================================
22
+ #++
23
+ #
24
+ # To create the documentation for Rio run the command
25
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ require 'rio/exception'
38
+ require 'fileutils'
39
+ module RIO
40
+ module Impl
41
+ module U
42
+ def self.mv(s,d)
43
+ ::FileUtils.mv(s.to_s,d.to_s)
44
+ end
45
+ def self.chmod(mod,s)
46
+ ::File.chmod(mod,s.to_s)
47
+ end
48
+ def self.chown(owner_int,group_int,s)
49
+ ::File.chown(owner_int,group_int,s.to_s)
50
+ end
51
+ end
52
+ end
53
+ module Ops
54
+ module FileOrDir
55
+ module ExistOrNot
56
+ end
57
+ module NonExisting
58
+ include ExistOrNot
59
+ def empty?() false end
60
+ end
61
+
62
+ module Existing
63
+ include ExistOrNot
64
+
65
+ def chmod(mod) rtn_self { fs.chmod(mod,fspath) } end
66
+ def chown(owner,group) rtn_self { fs.chown(owner,group,fspath) } end
67
+ def must_exist() self end
68
+
69
+ def rename(*args,&block)
70
+ if args.empty?
71
+ softreset.rename(*args,&block)
72
+ else
73
+ rtn_reset {
74
+ dst = ensure_rio(args.shift)
75
+ #p "rename: #{self} => #{dst}"
76
+ fs.mv(self,dst,*args)
77
+ dst.reset
78
+ }
79
+ end
80
+ end
81
+ def rename!(*args,&block)
82
+ if args.empty?
83
+ softreset.rename(*args,&block)
84
+ else
85
+ rtn_reset {
86
+ dst = ensure_rio(args.shift)
87
+ #p "rename!: #{self} => #{dst}"
88
+ fs.mv(self,dst,*args) unless self == dst
89
+ dst.reset
90
+ self.rl = dst.rl.clone
91
+ }
92
+ end
93
+ end
94
+ alias :mv :rename
95
+ def basename=(arg)
96
+ rename!(_path_with_basename(arg))
97
+ end
98
+ def filename=(arg)
99
+ rename!(_path_with_filename(arg))
100
+ end
101
+ def extname=(ex)
102
+ rename!(_path_with_ext(ex))
103
+ cx['ext'] = ex
104
+ end
105
+ def dirname=(arg)
106
+ rename!(_path_with_dirname(arg))
107
+ end
108
+
109
+ def ss_type?
110
+ case cx['ss_type']
111
+ when nil
112
+ 'entries'
113
+ when 'files', 'dirs', 'entries', 'skipfiles', 'skipdirs', 'skipentries'
114
+ cx['ss_type']
115
+ else
116
+ nil
117
+ end
118
+ end
119
+
120
+ require 'pathname'
121
+ def realpath
122
+ new_rio(fs.realpath(fspath))
123
+ end
124
+ def mountpoint?
125
+ fs.mountpoint?(fspath)
126
+ end
127
+ def empty?() self.to_a.empty? end
128
+
129
+ end
130
+
131
+ end
132
+ end
133
+ end
134
+
@@ -0,0 +1,102 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
+ # All rights reserved
5
+ #
6
+ # This file is part of the Rio library for ruby.
7
+ #
8
+ # Rio is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Rio is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Rio; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # ===============================================================================
22
+ #++
23
+ #
24
+ # To create the documentation for Rio run the command
25
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ require 'rio/cp'
38
+ require 'rio/piper/cp'
39
+ require 'rio/ops/either'
40
+
41
+ # module RIO
42
+ # module Impl
43
+ # module U
44
+ # def self.copy(s,d)
45
+ # require 'fileutils'
46
+ # ::FileUtils.cp(s.to_s,d.to_s)
47
+ # end
48
+ # def self.rm(s)
49
+ # require 'fileutils'
50
+ # ::FileUtils.rm(s.to_s)
51
+ # end
52
+ # def self.touch(s)
53
+ # require 'fileutils'
54
+ # ::FileUtils.touch(s.to_s)
55
+ # end
56
+ # end
57
+ # end
58
+ # end
59
+ module RIO
60
+ module Ops
61
+ module File
62
+ module ExistOrNot
63
+ include FileOrDir::ExistOrNot
64
+ end
65
+ module Existing
66
+ include ExistOrNot
67
+ include FileOrDir::Existing
68
+ include Cp::File::Output
69
+ include Cp::File::Input
70
+ include Piper::Cp::Input
71
+
72
+ def selective?
73
+ %w[stream_sel stream_nosel].any? { |k| cx.has_key?(k) }
74
+ end
75
+ def empty?()
76
+ self.selective? ? self.to_a.empty? : self.size == 0
77
+ end
78
+ def rm(*args)
79
+ rtn_reset {
80
+ fs.rm(self,*args)
81
+ }
82
+ end
83
+ alias :delete :rm
84
+ alias :unlink :delete
85
+ alias :delete! :rm
86
+ def touch(*args) rtn_self { fs.touch(self.to_s,*args) } end
87
+ def truncate(sz=0) rtn_reset { fs.truncate(self.to_s,sz) } end
88
+ def clear() truncate(0) end
89
+ end
90
+ module NonExisting
91
+ include ExistOrNot
92
+ include FileOrDir::NonExisting
93
+
94
+ def rm(*args) rtn_self { ; } end
95
+ alias delete rm
96
+ alias :unlink :delete
97
+ alias delete! rm
98
+ def touch(*args) rtn_reset { fs.touch(self,*args) } end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,296 @@
1
+ #--
2
+ # ===============================================================================
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
+ # All rights reserved
5
+ #
6
+ # This file is part of the Rio library for ruby.
7
+ #
8
+ # Rio is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Rio is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Rio; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # ===============================================================================
22
+ #++
23
+ #
24
+ # To create the documentation for Rio run the command
25
+ # ruby build_doc.rb
26
+ # from the distribution directory.
27
+ #
28
+ # Suggested Reading
29
+ # * RIO::Doc::SYNOPSIS
30
+ # * RIO::Doc::INTRO
31
+ # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
33
+ # * RIO::Rio
34
+ #
35
+
36
+
37
+ #require 'rio/impl/path'
38
+ module RIO
39
+ module Ops #:nodoc: all
40
+ module Path
41
+ module Test
42
+ def blockdev?(*args) fs.blockdev?(self.to_s,*args) end
43
+ def chardev?(*args) fs.chardev?(self.to_s,*args) end
44
+ def directory?(*args) fs.directory?(self.to_s,*args) end
45
+ def exist?(*args) fs.exist?(self.to_s,*args) end
46
+ def file?(*args)
47
+ fs.file?(self.to_s,*args)
48
+ end
49
+ def pipe?(*args) fs.pipe?(self.to_s,*args) end
50
+ def socket?(*args) fs.socket?(self.to_s,*args) end
51
+ def symlink?(*args) fs.symlink?(self.to_s,*args) end
52
+ alias :dir? :directory?
53
+ def open?() not self.closed? end
54
+ def closed?() self.ioh.nil? end
55
+ end
56
+ module Status
57
+ include Test
58
+ def fnmatch(*args) fs.fnmatch(self.to_s,*args) end
59
+ def fnmatch?(*args) fs.fnmatch?(self.to_s,*args) end
60
+ def ftype(*args) fs.ftype(self.to_s,*args) end
61
+ def stat(*args) fs.stat(self.to_s,*args) end
62
+ def atime(*args) fs.atime(self.to_s,*args) end
63
+ def ctime(*args) fs.ctime(self.to_s,*args) end
64
+ def mtime(*args) fs.mtime(self.to_s,*args) end
65
+ def executable?(*args) fs.executable?(self.to_s,*args) end
66
+ def executable_real?(*args) fs.executable_real?(self.to_s,*args) end
67
+ def readable?(*args) fs.readable?(self.to_s,*args) end
68
+ def readable_real?(*args) fs.readable_real?(self.to_s,*args) end
69
+ def writable?(*args) fs.writable?(self.to_s,*args) end
70
+ def writable_real?(*args) fs.writable_real?(self.to_s,*args) end
71
+ def sticky?(*args) fs.sticky?(self.to_s,*args) end
72
+ def owned?(*args) fs.owned?(self.to_s,*args) end
73
+ def grpowned?(*args) fs.grpowned?(self.to_s,*args) end
74
+ def setgid?(*args) fs.setgid?(self.to_s,*args) end
75
+ def setuid?(*args) fs.setuid?(self.to_s,*args) end
76
+ def size(*args) fs.size(self.to_s,*args) end
77
+ def size?(*args) fs.size?(self.to_s,*args) end
78
+ def zero?(*args) fs.zero?(self.to_s,*args) end
79
+ def root?(*args) fs.root?(self.to_s) end
80
+
81
+ end
82
+ module URI
83
+ def abs(base=nil)
84
+ if base.nil?
85
+ nrio = new_rio(rl.abs)
86
+ nrio
87
+ else
88
+ #new_rio(rl,{:base => ensure_rio(base).abs.to_uri}).abs
89
+ brio = ensure_rio(base)
90
+ new_rio(rl.abs(ensure_rio(base).to_s))
91
+ end
92
+ end
93
+ def abs?
94
+ rl.abs?
95
+ end
96
+ alias :absolute? :abs?
97
+ def route_from(other)
98
+ new_rio(rl.abs.route_from(ensure_rio(other).rl.abs))
99
+ end
100
+ def rel(other=nil)
101
+ if other.nil?
102
+ base = self.abs.dirname
103
+ else
104
+ new_rio(self.rl.abs.route_from(ensure_rio(other).rl.abs))
105
+ end
106
+ base = other.nil? ? self.abs : ensure_rio(other).dup
107
+ base += '/' if base.directory? and base.to_s[-1] != '/'
108
+ route_from(base)
109
+ end
110
+ def route_to(other)
111
+ new_rio(rl.abs.route_to(ensure_rio(other).rl.abs))
112
+ end
113
+ def merge(other)
114
+ new_rio(rl.merge(ensure_rio(other).rl))
115
+ end
116
+ def base()
117
+ new_rio(rl.base())
118
+ end
119
+ def setbase(b)
120
+ rl.base(b)
121
+ self
122
+ end
123
+ extend Forwardable
124
+ def_instance_delegators(:rl,:scheme,:host,:opaque)
125
+
126
+ end
127
+ module Query
128
+ def expand_path(*args)
129
+ args[0] = args[0].to_s unless args.empty?
130
+ new_rio(RL.fs2url(fs.expand_path(self.to_s,*args)))
131
+ end
132
+ def extname(*args)
133
+ en = fs.extname(rl.path_no_slash,*args)
134
+ (en.empty? ? nil : en)
135
+ end
136
+ def splitpath()
137
+ require 'rio/to_rio'
138
+ parts = self.rl.split
139
+ # map to rios and extend the array with to_array
140
+ parts.map { |arl| new_rio(arl) }.extend(ToRio::Array)
141
+ end
142
+ def basename(*args)
143
+ unless args.empty?
144
+ ex = args[0] || self.extname
145
+ self.ext(ex)
146
+ end
147
+ new_rio(rl.basename(self.ext?))
148
+ end
149
+ def filename()
150
+ new_rio(rl.filename)
151
+ end
152
+ def dirname(*args)
153
+ new_rio(rl.dirname)
154
+ end
155
+
156
+ def sub(re,arg)
157
+ new_rio(softreset.to_s.sub(re,arg.to_s))
158
+ end
159
+ def gsub(re,arg)
160
+ new_rio(softreset.to_s.gsub(re,arg.to_s))
161
+ end
162
+
163
+ def +(arg)
164
+ new_rio(softreset.to_str + ensure_rio(arg).to_str)
165
+ end
166
+
167
+ private
168
+
169
+ def _path_with_basename(arg)
170
+ old = rl.path_no_slash
171
+ old[0,old.length-basename.length-ext?.length]+arg.to_s+ext?
172
+ end
173
+ def _path_with_filename(arg)
174
+ old = rl.path_no_slash
175
+ old[0,old.length-filename.length]+arg.to_s
176
+ end
177
+ def _path_with_ext(ex)
178
+ old = rl.path_no_slash
179
+ old[0,old.length-ext?.length]+ex
180
+ end
181
+ def _path_with_dirname(arg)
182
+ old = rl.path_no_slash
183
+ arg.to_s + old[-(old.length-dirname.length),old.length]
184
+ end
185
+ end
186
+ module Change
187
+ def sub!(*args)
188
+ rl.path = rl.path.sub(*args)
189
+ softreset
190
+ end
191
+
192
+ def rename(*args,&block)
193
+ if args.empty?
194
+ cxx('rename',true,&block)
195
+ else
196
+ rtn = must_exist.rename(*args)
197
+ return rtn.each(&block) if block_given?
198
+ rtn
199
+ end
200
+ end
201
+ def rename?() cxx?('rename') end
202
+ def norename(arg=false,&block) nocxx('rename',&block) end
203
+
204
+ def filename=(arg)
205
+ if cx['rename']
206
+ must_exist.filename = arg
207
+ else
208
+ rl.urlpath = _path_with_filename(arg)
209
+ softreset
210
+ end
211
+ end
212
+
213
+ def basename=(arg)
214
+ if cx['rename']
215
+ must_exist.basename = arg
216
+ else
217
+ rl.urlpath = _path_with_basename(arg)
218
+ softreset
219
+ end
220
+ end
221
+
222
+ def extname=(arg)
223
+ #p callstr('extname=',arg)
224
+
225
+ if cx['rename']
226
+ must_exist.extname = arg
227
+ else
228
+ rl.urlpath = _path_with_ext(arg)
229
+ softreset
230
+ end
231
+ end
232
+
233
+ def dirname=(arg)
234
+ if cx['rename']
235
+ must_exist.dirname = arg
236
+ else
237
+ rl.path = _path_with_dirname(arg)
238
+ softreset
239
+ end
240
+ end
241
+
242
+ end
243
+ end
244
+ end
245
+ end
246
+ require 'rio/ops/create'
247
+ require 'rio/ops/construct'
248
+ module RIO
249
+ module Ops
250
+ module Path
251
+ module Empty
252
+ include Ops::Path::Create
253
+ include Ops::Path::URI
254
+ include Ops::Construct
255
+ end
256
+ module ExistOrNot
257
+ def symlink(d)
258
+ rtn_self {
259
+ dst = self.ensure_rio(d)
260
+ dst /= self.filename if dst.directory?
261
+ if self.abs?
262
+ fs.symlink(self,dst)
263
+ else
264
+ #p "symlink(#{dst.route_to(self)},#{dst})"
265
+ fs.symlink(dst.route_to(self),dst.to_s)
266
+ end
267
+ dst.reset
268
+ }
269
+ end
270
+ end
271
+ module NonExisting
272
+ include Test
273
+ include Create
274
+ include ExistOrNot
275
+ # Rio does not consider an attempt to remove something that does not exist an error.
276
+ # Rio says "You called this method because you didn't want the thing to exist on the
277
+ # file system. After the call it doesn't exist. You're welcome"
278
+ #
279
+ def delete!() softreset end
280
+ def delete() softreset end
281
+ def rmdir() softreset end
282
+ def rmtree() softreset end
283
+ def rm() softreset end
284
+
285
+ end
286
+ module Str
287
+ include Status
288
+ include Query
289
+ include Create
290
+ include URI
291
+ include ExistOrNot
292
+ end
293
+ end
294
+
295
+ end
296
+ end