rio 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
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 'uri'
@@ -43,7 +42,9 @@ require 'stringio'
43
42
  module RIO
44
43
  module RL
45
44
  class Builder
46
-
45
+ def self.build_path_rl(rl)
46
+ return rl
47
+ end
47
48
  def self.build(*a)
48
49
  #puts "build: #{a.inspect}"
49
50
  a.flatten!
@@ -64,13 +65,15 @@ module RIO
64
65
  return Factory.instance.riorl_class('path').new(*a)
65
66
  end
66
67
  when RIO::Rio
67
- a[0] = a[0].to_rl
68
+ a[0] = a[0].rl
69
+ return build(*a)
68
70
  when RL::Base
71
+ #p "HERE a=#{a.inspect}"
69
72
  a0 = a.shift.clone
70
- return (a.empty? ? a0 : a0.join(*a))
71
- #p 'THERE',a0,a0.clone
72
- #return a0.clone.join(*a)
73
- #return a0.class.new(a0.clone,*a)
73
+ cl = Factory.instance.riorl_class(a0.scheme)
74
+ o = cl.new(a0,*a) unless cl.nil?
75
+ return o
76
+ # return (a.empty? ? a0 : a0.join(*a))
74
77
  when ::URI
75
78
  a0 = a.shift
76
79
  cl = Factory.instance.riorl_class(a0.scheme)
@@ -88,7 +91,7 @@ module RIO
88
91
  end
89
92
  when ::NilClass
90
93
  a[0] = 'rio:null:'
91
- when ?? , ?= , ?_ , ?", ?[, ?#, ?`, ?|
94
+ when ?? , ?= , ?_ , ?", ?[, ?#, ?`, ?|, ?z
92
95
  a[0] = 'rio:'+CHMAP[a[0]]+':'
93
96
  when ?-
94
97
  a[0] = ( a.size == 1 ? 'rio:'+CHMAP[a[0]]+':' : 'rio:cmdio:' )
@@ -109,33 +112,6 @@ module RIO
109
112
 
110
113
  end
111
114
 
112
-
113
- def self.build0(*args)
114
- #p "build(#{args.inspect})"
115
-
116
- # aryio is a special case -- must not flatten
117
- if args[0] == 'rio:aryio'
118
- args.shift
119
- ary = args[0] unless args.empty?
120
- require 'rio/scheme/aryio'
121
- return RIO::AryIO::RL.new(ary)
122
- end
123
-
124
- args = canon(args.flatten)
125
- a0 = args.shift
126
- case a0
127
- when RL::Base
128
- a0.class.new(a0.uri.dup,*args)
129
- when ::URI
130
- cl = Factory.instance.riorl_class(a0.scheme)
131
- cl.new(a0,*args) unless cl.nil?
132
- else
133
- sch = Base.subscheme(a0)
134
- cl = Factory.instance.riorl_class(sch)
135
- cl.parse(a0,*args) unless cl.nil?
136
- end
137
- end
138
-
139
115
  end
140
116
  end
141
117
  end
@@ -0,0 +1,66 @@
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 'uri'
38
+ require 'rio/local'
39
+ require 'rio/uri/file'
40
+
41
+ module RIO
42
+ module RL
43
+ CHMAP = {
44
+ '_' => 'sysio',
45
+ '-' => 'stdio',
46
+ '=' => 'stderr',
47
+ '"' => 'strio',
48
+ '?' => 'temp',
49
+ '[' => 'aryio',
50
+ '`' => 'cmdio',
51
+ '|' => 'cmdpipe',
52
+ '#' => 'fd',
53
+
54
+ ?_ => 'sysio',
55
+ ?- => 'stdio',
56
+ ?= => 'stderr',
57
+ ?" => 'strio',
58
+ ?? => 'temp',
59
+ ?[ => 'aryio',
60
+ ?` => 'cmdio',
61
+ ?| => 'cmdpipe',
62
+ ?# => 'fd',
63
+ ?z => 'zipfile',
64
+ }.freeze
65
+ end
66
+ end
@@ -0,0 +1,82 @@
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 'uri'
38
+ require 'rio/local'
39
+ require 'rio/uri/file'
40
+ require 'rio/rl/chmap'
41
+
42
+ module RIO
43
+ module RL #:nodoc: all
44
+ PESCAPE = Regexp.new("[^-_.!~*'()a-zA-Z0-9;?:@&=+$,]",false, 'N').freeze
45
+ ESCAPE = Regexp.new("[^-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]",false, 'N').freeze
46
+ def escape(pth,esc=ESCAPE)
47
+ ::URI.escape(pth,esc)
48
+ end
49
+ def unescape(pth)
50
+ ::URI.unescape(pth)
51
+ end
52
+ def fs2urls(*args)
53
+ args.map{ |pth| fs2url(pth) }
54
+ end
55
+ def fs2url(pth)
56
+ #pth.sub!(/^[a-zA-Z]:/,'')
57
+ pth = URI.escape(pth,ESCAPE)
58
+ pth = '/' + pth if pth =~ /^[a-zA-Z]:/
59
+ pth
60
+ # (Local::SEPARATOR == '/' ? pth : pth.gsub(Local::SEPARATOR,%r|/|))
61
+ end
62
+
63
+ def url2fs(pth)
64
+ # pth = pth.chop if pth.length > 1 and pth[-1] == ?/ cwd = RIO::RL.fs2url(::Dir.getwd)
65
+
66
+ #pth = pth.chop if pth != '/' and pth[-1] == ?/
67
+ pth = ::URI.unescape(pth)
68
+ if pth =~ %r#^/[a-zA-Z]:#
69
+ pth = pth[1..-1]
70
+ end
71
+ pth
72
+ # (Local::SEPARATOR == '/' ? pth : pth.gsub(%r|/|,Local::SEPARATOR))
73
+ end
74
+
75
+ def getwd()
76
+ #::URI::FILE.build({:path => fs2url(::Dir.getwd)+'/'})
77
+ ::URI::FILE.build({:path => fs2url(::Dir.getwd)})
78
+ end
79
+
80
+ module_function :url2fs,:fs2url,:fs2urls,:getwd,:escape,:unescape
81
+ end
82
+ 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
  require 'rio/rl/base'
@@ -66,6 +65,7 @@ module RIO
66
65
  super
67
66
  end
68
67
  def initialize_copy(cp)
68
+ super
69
69
  @ios = cp.ios.clone unless cp.ios.nil?
70
70
  end
71
71
  def open(ios=nil)
@@ -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,165 +23,87 @@
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/rl/uri'
38
+ require 'rio/rl/withpath'
39
39
  require 'rio/rl/pathmethods'
40
40
 
41
41
  module RIO
42
42
  module RL
43
- class PathBase < Base
43
+ class PathBase < URIBase
44
44
  RESET_STATE = 'Path::Reset'
45
45
 
46
- RIOSCHEME = 'path'
47
- HOST = URI::REGEXP::PATTERN::HOST
48
- SCHEME = URI::REGEXP::PATTERN::SCHEME
49
-
50
- #attr :fs
51
- def initialize(pth,*args)
52
-
53
- @host = nil # host or nil
54
- @fspath = nil
55
- case pth
56
- when ::Hash
57
- @host = pth[:host]
58
- @fspath = RL.url2fs(pth[:path])
59
- @base = pth[:base]
60
- when RL::Base
61
- @host = pth.host
62
- @fspath = RL.url2fs(pth.path)
63
- @base = pth.base
64
- when ::URI
65
- u = pth.dup
66
- u.path = '/' if pth.absolute? and pth.path == ''
67
- @fspath = RL.url2fs(u.path)
68
- @host = u.host
69
- when %r|^file://(#{HOST})?(/.*)?$|
70
- @host = $1 || ''
71
- @fspath = $2 ? RL.url2fs($2) : '/'
46
+ def arg0_info_(arg0,*args)
47
+ #p "arg0_info_(#{arg0.inspect},#{args.inspect})"
48
+ #p callstr('init_from_args_',arg0.inspect,args)
49
+ vuri,vbase,vfs = nil,nil,nil
50
+ case arg0
51
+ when RIO::Rio, URIBase, ::URI
52
+ return super
53
+ when ::String
54
+ vuri = uri_from_string_(RL.fs2url(arg0)) || ::URI.parse(RL.fs2url(arg0))
72
55
  else
73
- self.fspath = pth
56
+ raise(ArgumentError,"'#{arg0}'[#{arg0.class}] can not be used to create a Rio")
74
57
  end
75
- args = _get_opts_from_args(args)
76
- self.join(*args) unless args.empty?
77
- unless self.absolute? or @base
78
- @base = RL.fs2url(::Dir.getwd)+'/'
79
- end
80
- @fspath.sub!(%r|/\.$|,'/')
81
- #@fs = openfs_
82
- super
58
+ [vuri,vbase,vfs]
83
59
  end
84
- def openfs_
85
- RIO::FS::Native.create()
60
+ def build_arg0_(path_str)
61
+ RL.url2fs(path_str)
86
62
  end
87
- def pathroot()
88
- return nil unless absolute?
89
- rrl = self.clone
90
- if self.urlpath =~ %r%^(/[a-zA-Z]):%
91
- $1+':/'
92
- else
93
- '/'
94
- end
63
+ def scheme()
64
+ uri.scheme || 'path'
95
65
  end
96
- include PathMethods
97
-
98
- def _get_opts_from_args(args)
99
- @base = nil
100
- if !args.empty? and args[-1].kind_of?(::Hash)
101
- opts = args.pop
102
- if b = opts[:base]
103
- @base = case b
104
- when %r%^file://(#{HOST})?(/.*)?$% then b
105
- when %r%^/% then b
106
- else RL.fs2url(::Dir.getwd)+'/'+b
107
- end
108
- @base.squeeze('/')
109
- end
110
- if fs = opts[:fs]
111
- @fs = fs
112
- end
113
- end
114
- args
66
+ def url
67
+ str = uri.to_s
68
+ str = scheme + ':' +str unless uri.scheme
69
+ str
115
70
  end
116
- def base(arg=nil)
117
- self.base = arg unless arg.nil?
118
- if absolute?
119
- #p self.dirname
120
- urlpath
121
- else
122
- @base
123
- end
124
- end
125
- def base=(arg) @base = arg end
126
-
127
- # def urlpath() @pth end
128
- # def urlpath=(arg) @pth = arg end
129
- def urlpath() RL.fs2url(@fspath) end
130
- def urlpath=(arg) @fspath = RL.url2fs(arg) end
131
-
132
- def path() self.fspath() end
133
- def path=(arg) self.fspath = arg end
134
- def path_no_slash() self.path.sub(/\/$/,'') end
135
71
  def use_host?
136
- !(@host.nil? || @host.empty? || @host == 'localhost')
72
+ hst = uri.host
73
+ !(hst.nil? || hst.empty? || hst == 'localhost')
137
74
  end
138
75
 
76
+ def join(*args)
77
+ return self if args.empty?
78
+ join_(args.map{ |arg| RL.fs2url(arg.to_s)})
79
+ end
139
80
  def fspath()
140
81
  if use_host?
141
- '//' + @host + @fspath
82
+ '//' + uri.host + RL.url2fs(self.urlpath)
142
83
  else
143
- @fspath
84
+ RL.url2fs(self.urlpath)
144
85
  end
145
86
  end
146
- def fspath=(pt)
147
- if pt =~ %r|^//(#{HOST})(/.*)?$|
148
- @host = $1
149
- @fspath = $2 || '/'
150
- else
151
- @fspath = pt
152
- end
153
- end
154
-
155
- def opaque() (absolute? ? "//#{@host}#{self.urlpath}" : self.urlpath) end
156
-
157
- def scheme() (absolute? ? 'file' : 'path') end
158
- def host() @host end
159
- def host=(arg) @host = arg end
160
-
161
- def absolute?()
162
- (@fspath =~ %r%^([a-zA-Z]:)?/% ? true : false)
87
+ # def fspath=(pt)
88
+ # if pt =~ %r|^//(#{HOST})(/.*)?$|
89
+ # @host = $1
90
+ # @fspath = $2 || '/'
91
+ # else
92
+ # @fspath = pt
93
+ # end
94
+ # end
95
+ def to_s()
96
+ self.fspath
163
97
  end
164
- alias abs? absolute?
165
-
166
- def abs()
167
- return self if absolute?
168
- self.class.new(@base, @fspath)
169
- end
170
-
171
- def uri()
172
- (absolute? ?
173
- ::URI::FILE.new('file',nil,@host,nil,nil,RL.fs2url(@fspath),nil,nil,nil) : ::URI.parse(RL.fs2url(@fspath)))
174
- end
175
-
176
98
  def self.splitrl(s)
177
99
  sch,opq,whole = split_riorl(s)
100
+ #p sch,opq,whole
178
101
  case sch
179
102
  when 'file' then [whole]
180
103
  else [opq]
181
104
  end
182
105
  end
183
-
184
-
185
106
  end
186
107
  end
187
108
  end
109
+ __END__