rio 0.3.1 → 0.3.2

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 (240) hide show
  1. data/ChangeLog +140 -0
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/ANNOUNCE +87 -0
  5. data/doc/RELEASE_NOTES +7 -0
  6. data/doc/rdoc/classes/Kernel.html +9 -9
  7. data/doc/rdoc/classes/Kernel.src/{M000183.html → M000182.html} +0 -0
  8. data/doc/rdoc/classes/RIO.html +35 -0
  9. data/doc/rdoc/classes/RIO.src/M000001.html +4 -4
  10. data/doc/rdoc/classes/RIO.src/M000002.html +4 -4
  11. data/doc/rdoc/classes/RIO.src/M000003.html +4 -4
  12. data/doc/rdoc/classes/RIO/Doc/HOWTO.html +11 -7
  13. data/doc/rdoc/classes/RIO/Doc/INTRO.html +255 -36
  14. data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +47 -17
  15. data/doc/rdoc/classes/RIO/Rio.html +1032 -1007
  16. data/doc/rdoc/classes/RIO/Rio.src/M000011.html +3 -3
  17. data/doc/rdoc/classes/RIO/Rio.src/M000012.html +3 -3
  18. data/doc/rdoc/classes/RIO/Rio.src/M000013.html +3 -3
  19. data/doc/rdoc/classes/RIO/Rio.src/M000014.html +3 -3
  20. data/doc/rdoc/classes/RIO/Rio.src/M000015.html +3 -3
  21. data/doc/rdoc/classes/RIO/Rio.src/M000016.html +3 -3
  22. data/doc/rdoc/classes/RIO/Rio.src/M000017.html +3 -3
  23. data/doc/rdoc/classes/RIO/Rio.src/M000018.html +3 -3
  24. data/doc/rdoc/classes/RIO/Rio.src/M000019.html +3 -3
  25. data/doc/rdoc/classes/RIO/Rio.src/M000020.html +3 -3
  26. data/doc/rdoc/classes/RIO/Rio.src/M000021.html +3 -3
  27. data/doc/rdoc/classes/RIO/Rio.src/M000022.html +3 -3
  28. data/doc/rdoc/classes/RIO/Rio.src/M000023.html +3 -3
  29. data/doc/rdoc/classes/RIO/Rio.src/M000024.html +3 -3
  30. data/doc/rdoc/classes/RIO/Rio.src/M000025.html +3 -3
  31. data/doc/rdoc/classes/RIO/Rio.src/M000026.html +3 -3
  32. data/doc/rdoc/classes/RIO/Rio.src/M000027.html +3 -3
  33. data/doc/rdoc/classes/RIO/Rio.src/M000028.html +3 -3
  34. data/doc/rdoc/classes/RIO/Rio.src/M000029.html +3 -3
  35. data/doc/rdoc/classes/RIO/Rio.src/M000030.html +3 -3
  36. data/doc/rdoc/classes/RIO/Rio.src/M000031.html +3 -3
  37. data/doc/rdoc/classes/RIO/Rio.src/M000032.html +3 -3
  38. data/doc/rdoc/classes/RIO/Rio.src/M000033.html +3 -3
  39. data/doc/rdoc/classes/RIO/Rio.src/M000034.html +3 -3
  40. data/doc/rdoc/classes/RIO/Rio.src/M000035.html +3 -3
  41. data/doc/rdoc/classes/RIO/Rio.src/M000036.html +3 -3
  42. data/doc/rdoc/classes/RIO/Rio.src/M000037.html +3 -3
  43. data/doc/rdoc/classes/RIO/Rio.src/M000038.html +3 -3
  44. data/doc/rdoc/classes/RIO/Rio.src/M000039.html +3 -3
  45. data/doc/rdoc/classes/RIO/Rio.src/M000040.html +3 -3
  46. data/doc/rdoc/classes/RIO/Rio.src/M000041.html +3 -3
  47. data/doc/rdoc/classes/RIO/Rio.src/M000042.html +3 -3
  48. data/doc/rdoc/classes/RIO/Rio.src/M000043.html +3 -3
  49. data/doc/rdoc/classes/RIO/Rio.src/M000044.html +3 -3
  50. data/doc/rdoc/classes/RIO/Rio.src/M000045.html +3 -3
  51. data/doc/rdoc/classes/RIO/Rio.src/M000046.html +3 -3
  52. data/doc/rdoc/classes/RIO/Rio.src/M000047.html +3 -3
  53. data/doc/rdoc/classes/RIO/Rio.src/M000048.html +3 -3
  54. data/doc/rdoc/classes/RIO/Rio.src/M000049.html +3 -3
  55. data/doc/rdoc/classes/RIO/Rio.src/M000050.html +3 -3
  56. data/doc/rdoc/classes/RIO/Rio.src/M000051.html +3 -3
  57. data/doc/rdoc/classes/RIO/Rio.src/M000052.html +3 -3
  58. data/doc/rdoc/classes/RIO/Rio.src/M000053.html +3 -3
  59. data/doc/rdoc/classes/RIO/Rio.src/M000054.html +3 -3
  60. data/doc/rdoc/classes/RIO/Rio.src/M000055.html +3 -3
  61. data/doc/rdoc/classes/RIO/Rio.src/M000056.html +3 -3
  62. data/doc/rdoc/classes/RIO/Rio.src/M000057.html +3 -3
  63. data/doc/rdoc/classes/RIO/Rio.src/M000058.html +3 -3
  64. data/doc/rdoc/classes/RIO/Rio.src/M000059.html +3 -3
  65. data/doc/rdoc/classes/RIO/Rio.src/M000060.html +3 -3
  66. data/doc/rdoc/classes/RIO/Rio.src/M000061.html +3 -3
  67. data/doc/rdoc/classes/RIO/Rio.src/M000062.html +3 -3
  68. data/doc/rdoc/classes/RIO/Rio.src/M000063.html +3 -3
  69. data/doc/rdoc/classes/RIO/Rio.src/M000064.html +3 -3
  70. data/doc/rdoc/classes/RIO/Rio.src/M000065.html +3 -3
  71. data/doc/rdoc/classes/RIO/Rio.src/M000066.html +3 -3
  72. data/doc/rdoc/classes/RIO/Rio.src/M000067.html +3 -3
  73. data/doc/rdoc/classes/RIO/Rio.src/M000068.html +3 -3
  74. data/doc/rdoc/classes/RIO/Rio.src/M000069.html +3 -3
  75. data/doc/rdoc/classes/RIO/Rio.src/M000070.html +3 -3
  76. data/doc/rdoc/classes/RIO/Rio.src/M000071.html +3 -3
  77. data/doc/rdoc/classes/RIO/Rio.src/M000072.html +3 -3
  78. data/doc/rdoc/classes/RIO/Rio.src/M000073.html +3 -3
  79. data/doc/rdoc/classes/RIO/Rio.src/M000074.html +3 -3
  80. data/doc/rdoc/classes/RIO/Rio.src/M000075.html +3 -3
  81. data/doc/rdoc/classes/RIO/Rio.src/M000076.html +3 -3
  82. data/doc/rdoc/classes/RIO/Rio.src/M000077.html +3 -3
  83. data/doc/rdoc/classes/RIO/Rio.src/M000078.html +3 -3
  84. data/doc/rdoc/classes/RIO/Rio.src/M000079.html +3 -3
  85. data/doc/rdoc/classes/RIO/Rio.src/M000080.html +3 -3
  86. data/doc/rdoc/classes/RIO/Rio.src/M000081.html +3 -3
  87. data/doc/rdoc/classes/RIO/Rio.src/M000082.html +3 -3
  88. data/doc/rdoc/classes/RIO/Rio.src/M000083.html +3 -3
  89. data/doc/rdoc/classes/RIO/Rio.src/M000084.html +3 -3
  90. data/doc/rdoc/classes/RIO/Rio.src/M000085.html +3 -3
  91. data/doc/rdoc/classes/RIO/Rio.src/M000086.html +3 -3
  92. data/doc/rdoc/classes/RIO/Rio.src/M000087.html +3 -3
  93. data/doc/rdoc/classes/RIO/Rio.src/M000088.html +3 -3
  94. data/doc/rdoc/classes/RIO/Rio.src/M000089.html +2 -2
  95. data/doc/rdoc/classes/RIO/Rio.src/M000090.html +2 -2
  96. data/doc/rdoc/classes/RIO/Rio.src/M000091.html +2 -2
  97. data/doc/rdoc/classes/RIO/Rio.src/M000092.html +2 -2
  98. data/doc/rdoc/classes/RIO/Rio.src/M000093.html +2 -2
  99. data/doc/rdoc/classes/RIO/Rio.src/M000094.html +2 -2
  100. data/doc/rdoc/classes/RIO/Rio.src/M000095.html +2 -2
  101. data/doc/rdoc/classes/RIO/Rio.src/M000096.html +2 -2
  102. data/doc/rdoc/classes/RIO/Rio.src/M000097.html +2 -2
  103. data/doc/rdoc/classes/RIO/Rio.src/M000098.html +2 -2
  104. data/doc/rdoc/classes/RIO/Rio.src/M000099.html +2 -2
  105. data/doc/rdoc/classes/RIO/Rio.src/M000100.html +2 -2
  106. data/doc/rdoc/classes/RIO/Rio.src/M000101.html +2 -2
  107. data/doc/rdoc/classes/RIO/Rio.src/M000102.html +2 -2
  108. data/doc/rdoc/classes/RIO/Rio.src/M000103.html +2 -2
  109. data/doc/rdoc/classes/RIO/Rio.src/M000104.html +2 -2
  110. data/doc/rdoc/classes/RIO/Rio.src/M000105.html +2 -2
  111. data/doc/rdoc/classes/RIO/Rio.src/M000106.html +2 -2
  112. data/doc/rdoc/classes/RIO/Rio.src/M000107.html +2 -2
  113. data/doc/rdoc/classes/RIO/Rio.src/M000108.html +3 -3
  114. data/doc/rdoc/classes/RIO/Rio.src/M000109.html +3 -3
  115. data/doc/rdoc/classes/RIO/Rio.src/M000110.html +3 -3
  116. data/doc/rdoc/classes/RIO/Rio.src/M000111.html +3 -3
  117. data/doc/rdoc/classes/RIO/Rio.src/M000112.html +3 -3
  118. data/doc/rdoc/classes/RIO/Rio.src/M000113.html +3 -3
  119. data/doc/rdoc/classes/RIO/Rio.src/M000114.html +3 -3
  120. data/doc/rdoc/classes/RIO/Rio.src/M000115.html +3 -3
  121. data/doc/rdoc/classes/RIO/Rio.src/M000116.html +3 -3
  122. data/doc/rdoc/classes/RIO/Rio.src/M000117.html +3 -3
  123. data/doc/rdoc/classes/RIO/Rio.src/M000118.html +3 -3
  124. data/doc/rdoc/classes/RIO/Rio.src/M000119.html +3 -3
  125. data/doc/rdoc/classes/RIO/Rio.src/M000120.html +3 -3
  126. data/doc/rdoc/classes/RIO/Rio.src/M000121.html +3 -3
  127. data/doc/rdoc/classes/RIO/Rio.src/M000122.html +3 -3
  128. data/doc/rdoc/classes/RIO/Rio.src/M000123.html +3 -3
  129. data/doc/rdoc/classes/RIO/Rio.src/M000124.html +3 -3
  130. data/doc/rdoc/classes/RIO/Rio.src/M000125.html +3 -3
  131. data/doc/rdoc/classes/RIO/Rio.src/M000126.html +3 -3
  132. data/doc/rdoc/classes/RIO/Rio.src/M000127.html +3 -3
  133. data/doc/rdoc/classes/RIO/Rio.src/M000128.html +3 -3
  134. data/doc/rdoc/classes/RIO/Rio.src/M000129.html +3 -3
  135. data/doc/rdoc/classes/RIO/Rio.src/M000130.html +3 -3
  136. data/doc/rdoc/classes/RIO/Rio.src/M000131.html +3 -3
  137. data/doc/rdoc/classes/RIO/Rio.src/M000132.html +3 -3
  138. data/doc/rdoc/classes/RIO/Rio.src/M000133.html +3 -3
  139. data/doc/rdoc/classes/RIO/Rio.src/M000134.html +3 -3
  140. data/doc/rdoc/classes/RIO/Rio.src/M000135.html +3 -3
  141. data/doc/rdoc/classes/RIO/Rio.src/M000136.html +3 -3
  142. data/doc/rdoc/classes/RIO/Rio.src/M000137.html +3 -3
  143. data/doc/rdoc/classes/RIO/Rio.src/M000138.html +3 -3
  144. data/doc/rdoc/classes/RIO/Rio.src/M000139.html +3 -3
  145. data/doc/rdoc/classes/RIO/Rio.src/M000140.html +3 -3
  146. data/doc/rdoc/classes/RIO/Rio.src/M000141.html +3 -3
  147. data/doc/rdoc/classes/RIO/Rio.src/M000142.html +3 -3
  148. data/doc/rdoc/classes/RIO/Rio.src/M000143.html +3 -3
  149. data/doc/rdoc/classes/RIO/Rio.src/M000144.html +3 -3
  150. data/doc/rdoc/classes/RIO/Rio.src/M000145.html +3 -3
  151. data/doc/rdoc/classes/RIO/Rio.src/M000146.html +3 -3
  152. data/doc/rdoc/classes/RIO/Rio.src/M000147.html +3 -3
  153. data/doc/rdoc/classes/RIO/Rio.src/M000148.html +3 -3
  154. data/doc/rdoc/classes/RIO/Rio.src/M000149.html +3 -3
  155. data/doc/rdoc/classes/RIO/Rio.src/M000150.html +3 -3
  156. data/doc/rdoc/classes/RIO/Rio.src/M000151.html +3 -3
  157. data/doc/rdoc/classes/RIO/Rio.src/M000152.html +3 -3
  158. data/doc/rdoc/classes/RIO/Rio.src/M000153.html +3 -3
  159. data/doc/rdoc/classes/RIO/Rio.src/M000154.html +3 -3
  160. data/doc/rdoc/classes/RIO/Rio.src/M000155.html +3 -3
  161. data/doc/rdoc/classes/RIO/Rio.src/M000156.html +3 -3
  162. data/doc/rdoc/classes/RIO/Rio.src/M000157.html +3 -3
  163. data/doc/rdoc/classes/RIO/Rio.src/M000158.html +3 -3
  164. data/doc/rdoc/classes/RIO/Rio.src/M000159.html +3 -3
  165. data/doc/rdoc/classes/RIO/Rio.src/M000160.html +3 -3
  166. data/doc/rdoc/classes/RIO/Rio.src/M000161.html +3 -3
  167. data/doc/rdoc/classes/RIO/Rio.src/M000162.html +3 -3
  168. data/doc/rdoc/classes/RIO/Rio.src/M000163.html +3 -3
  169. data/doc/rdoc/classes/RIO/Rio.src/M000164.html +3 -3
  170. data/doc/rdoc/classes/RIO/Rio.src/M000165.html +3 -3
  171. data/doc/rdoc/classes/RIO/Rio.src/M000166.html +3 -3
  172. data/doc/rdoc/classes/RIO/Rio.src/M000167.html +3 -3
  173. data/doc/rdoc/classes/RIO/Rio.src/M000168.html +3 -3
  174. data/doc/rdoc/classes/RIO/Rio.src/M000169.html +3 -3
  175. data/doc/rdoc/classes/RIO/Rio.src/M000170.html +3 -3
  176. data/doc/rdoc/classes/RIO/Rio.src/M000171.html +3 -3
  177. data/doc/rdoc/classes/RIO/Rio.src/M000172.html +3 -3
  178. data/doc/rdoc/classes/RIO/Rio.src/M000173.html +3 -3
  179. data/doc/rdoc/classes/RIO/Rio.src/M000174.html +3 -3
  180. data/doc/rdoc/classes/RIO/Rio.src/M000175.html +3 -3
  181. data/doc/rdoc/classes/RIO/Rio.src/M000176.html +3 -3
  182. data/doc/rdoc/classes/RIO/Rio.src/M000177.html +3 -3
  183. data/doc/rdoc/classes/RIO/Rio.src/M000178.html +3 -3
  184. data/doc/rdoc/classes/RIO/Rio.src/M000179.html +3 -3
  185. data/doc/rdoc/classes/RIO/Rio.src/M000180.html +3 -3
  186. data/doc/rdoc/classes/RIO/Rio.src/M000181.html +3 -3
  187. data/doc/rdoc/created.rid +1 -1
  188. data/doc/rdoc/files/lib/rio/constructor_rb.html +1 -1
  189. data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +1 -1
  190. data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +1 -1
  191. data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +1 -1
  192. data/doc/rdoc/files/lib/rio/if/basic_rb.html +1 -1
  193. data/doc/rdoc/files/lib/rio/if/path_rb.html +1 -1
  194. data/doc/rdoc/files/lib/rio_rb.html +1 -1
  195. data/doc/rdoc/fr_method_index.html +154 -155
  196. data/ex/findinruby +7 -3
  197. data/ex/findruby +6 -2
  198. data/lib/rio.rb +1 -1
  199. data/lib/rio/argv.rb +4 -0
  200. data/lib/rio/constructor.rb +17 -0
  201. data/lib/rio/context.rb +1 -1
  202. data/lib/rio/context/dir.rb +1 -0
  203. data/lib/rio/context/methods.rb +3 -3
  204. data/lib/rio/dir.rb +2 -2
  205. data/lib/rio/doc/HOWTO.rb +11 -6
  206. data/lib/rio/doc/INTRO.rb +149 -12
  207. data/lib/rio/doc/SYNOPSIS.rb +26 -13
  208. data/lib/rio/factory.rb +13 -2
  209. data/lib/rio/grande.rb +25 -0
  210. data/lib/rio/if/basic.rb +1 -1
  211. data/lib/rio/if/path.rb +61 -35
  212. data/lib/rio/matchrecord.rb +20 -1
  213. data/lib/rio/ops/dir.rb +2 -3
  214. data/lib/rio/ops/path.rb +25 -11
  215. data/lib/rio/ops/stream/input.rb +6 -3
  216. data/lib/rio/rl/base.rb +3 -2
  217. data/lib/rio/rl/ioi.rb +2 -1
  218. data/lib/rio/rl/path.rb +18 -3
  219. data/lib/rio/rl/uri.rb +8 -4
  220. data/lib/rio/scheme/cmdio.rb +1 -1
  221. data/lib/rio/scheme/path.rb +1 -0
  222. data/lib/rio/scheme/stdio.rb +1 -1
  223. data/lib/rio/scheme/strio.rb +1 -1
  224. data/lib/rio/scheme/sysio.rb +1 -1
  225. data/lib/rio/scheme/tcp.rb +1 -0
  226. data/lib/rio/scheme/temp.rb +184 -0
  227. data/lib/rio/state.rb +17 -6
  228. data/lib/rio/stream.rb +1 -1
  229. data/lib/rio/stream/open.rb +1 -1
  230. data/lib/rio/tempdir.rb +132 -0
  231. data/lib/rio/version.rb +1 -1
  232. data/test/tc/all.rb +4 -0
  233. data/test/tc/copylines.rb +38 -32
  234. data/test/tc/riorl.rb +104 -0
  235. data/test/tc/temp.rb +155 -0
  236. data/test/tc/tempdir.rb +63 -0
  237. data/test/tc/tempfile.rb +38 -0
  238. metadata +10 -5
  239. data/doc/rdoc/classes/RIO/Rio.src/M000182.html +0 -16
  240. data/lib/rio/scheme/tempfile.rb +0 -104
data/lib/rio/factory.rb CHANGED
@@ -71,8 +71,14 @@ module RIO
71
71
  require 'rio/scheme/stderr'
72
72
  StdErr
73
73
  when 'tempfile'
74
- require 'rio/scheme/tempfile'
75
- Tempfile
74
+ require 'rio/scheme/temp'
75
+ Temp::File
76
+ when 'temp'
77
+ require 'rio/scheme/temp'
78
+ Temp
79
+ when 'tempdir'
80
+ require 'rio/scheme/temp'
81
+ Temp::Dir
76
82
  when 'strio'
77
83
  require 'rio/scheme/strio'
78
84
  StrIO
@@ -165,6 +171,11 @@ module RIO
165
171
  'HTTP::Stream::Input' => 'rio/scheme/http',
166
172
  'HTTP::Stream::Open' => 'rio/scheme/http',
167
173
 
174
+ 'Temp::Reset' => 'rio/scheme/temp',
175
+ 'Temp::Stream::Open' => 'rio/scheme/temp',
176
+ 'Temp::Stream::Close' => 'rio/scheme/temp',
177
+ 'Temp::Stream::InOut' => 'rio/scheme/temp',
178
+
168
179
  'FTP::State::Dir' => 'rio/ftp',
169
180
  'FTP::State::File' => 'rio/ftp',
170
181
  'FTP::State::Reset' => 'rio/ftp',
data/lib/rio/grande.rb CHANGED
@@ -48,6 +48,31 @@ module RIO
48
48
  return to_a()
49
49
  end
50
50
  end
51
+
52
+ def fixnumss(*args)
53
+ #p "#{callstr('[]',*args)} ss_type=#{cx['ss_type']} stream_iter=#{stream_iter?}"
54
+ #p args[0].class,ss_type?(_ss_keys())
55
+ ss_args = cx['ss_args'] = args
56
+ if ss_args.length == 1 and ss_args[0].kind_of?(Fixnum) and !cx.has_key?('dirlines')
57
+ ans = nil
58
+ ss_type = ss_type?(_ss_keys())
59
+
60
+ if ss_args and ss_type
61
+ ans = self.__send__(ss_type,*(ss_args)).to_a
62
+ else
63
+ ans = to_a()
64
+ end
65
+
66
+ return (ans.empty? ? nil : ans[0])
67
+ else
68
+ if ss_args and (ss_type = ss_type?(_ss_keys()))
69
+ return self.__send__(ss_type,*(ss_args)).to_a
70
+ else
71
+ return to_a()
72
+ end
73
+ end
74
+ end
75
+
51
76
  end
52
77
  end
53
78
  module RIO
data/lib/rio/if/basic.rb CHANGED
@@ -38,7 +38,7 @@
38
38
  module RIO
39
39
  class Rio
40
40
 
41
- def to_rl() target.to_rl end
41
+ #def to_rl() target.to_rl end
42
42
 
43
43
  # Returns the length of the Rio's String representation
44
44
  #
data/lib/rio/if/path.rb CHANGED
@@ -40,28 +40,32 @@ module RIO
40
40
 
41
41
  # Returns the path for the Rio, which is defined differently for different types of Rios.
42
42
  #
43
- # For Rios representing paths on the underlying file system this proxies URI::FILE#path or URI::Generic#path
44
- # depending on whether the Rio is absolute or not. Note that this is *not* the same as Rio#fspath, but rather
45
- # a URL path as defined in RFC 1738.
43
+ # For Rios representing paths on the underlying file system this returns
44
+ # URI::FILE#path or URI::Generic#path depending on whether the Rio is absolute or not.
45
+ # Note that this is not necessarily the same as Rio#fspath, but rather
46
+ # a URL path as defined in RFC1738.
46
47
  #
47
- # For HTTP Rios this proxies this proxies URI::HTTP#path
48
+ # For Rios that have a URI representation this returns URI#path
48
49
  #
49
- # For special Rios such as stdin: and stderr: this returns the special symbol used to create the Rio
50
- #
51
- # Specifically:
52
- # '-' => stdio:
53
- # '=' => stderr:
54
- # '?' => tempfile:
55
- # '$' => stringio:
56
- # '_' => sysio:
57
- #
58
- # This list of possible paths may not be comprehensive as new types of Rios are added, however,
59
- # A Rio should always return a path when the underlying object has a concept of a path and something
60
- # else that is reasonable for Rios that have no such concept
50
+ # Otherwise this returns nil.
61
51
  #
62
52
  def path(*args) target.path(*args) end
63
53
 
54
+ # For resources that have a absolute URL (RFC1738) representation,
55
+ # this returns a string containing that representation.
56
+ # For objects that do not this returns a RIORL (a descriptive pseudo-URL).
57
+ #
58
+ # rio('/var/www/') #=> "file:///var/www/"
59
+ # rio('http://rio.rubyforge.org/') #=> "http://rio.rubyforge.org"
60
+ #
64
61
  def to_url() target.to_url end
62
+
63
+ # For resources that have a URL (RFC1738) representation, this returns a
64
+ # URI object referencing it. Otherwise this raises NoMethodError.
65
+ #
66
+ # rio('http://rubyforge.org/').to_uri #=> <URI::HTTP:0x818bd84 URL:http://rubyforge.org/>
67
+ # rio('adir/afile').to_uri #=> <URI::Generic:0x817d288 URL:adir/afile>
68
+ #
65
69
  def to_uri() target.to_uri end
66
70
 
67
71
  # Returns the path for the Rio on the underlying file system
@@ -97,6 +101,17 @@ module RIO
97
101
  def rel(other) target.rel(other) end
98
102
 
99
103
 
104
+ # Returns a new Rio whose path is the base path that is used by
105
+ # Rio#abs to create an absolute Rio from a relative one.
106
+ #
107
+ # rio('/tmp').chdir
108
+ # rio('afile').base # => rio('/tmp/')
109
+ #
110
+ # See Rio#abs.
111
+ #
112
+ def base() target.base() end
113
+
114
+
100
115
  # Sets the string that the Rio considers an extension. The value will be used by
101
116
  # subsequent calls to Rio#basename. If called with no arguments resets its value
102
117
  # to the value returned by File#extname. Returns the Rio
@@ -308,14 +323,26 @@ module RIO
308
323
 
309
324
  # Create a Rio referencing Rio#to_s + arg.to_s
310
325
  #
326
+ # rio('afile') + '-0.1' #=> rio('afile-0.1')
327
+ #
311
328
  def +(arg) target + arg end
312
329
 
313
330
  # Create a new Rio referencing the result of applying String#sub to the value returned by
314
- # Rio#to_s
331
+ # Rio#to_s. So:
332
+ #
333
+ # ario.sub(re,string)
334
+ # is equivelent to
335
+ # rio(ario.to_s.sub(re,string))
336
+ #
315
337
  def sub(re,string) target.sub(re,string) end
316
338
 
317
339
  # Create a new Rio referencing the result of applying String#gsub to the value returned by
318
- # Rio#to_s
340
+ # Rio#to_s. So:
341
+ #
342
+ # ario.gsub(re,string)
343
+ # is equivelent to
344
+ # rio(ario.to_s.gsub(re,string))
345
+ #
319
346
  def gsub(re,string) target.gsub(re,string) end
320
347
 
321
348
 
@@ -359,49 +386,48 @@ module RIO
359
386
  ##def getwd(*args,&block) target.getwd(*args,&block) end
360
387
 
361
388
 
362
- # Rio#base
363
- #
364
- #
365
- def base() target.base() end
366
-
367
-
368
- # Returns the scheme for Rio's URI like URI#scheme where the Rio is represented
389
+ # Returns the scheme for the Rio's URI like URI#scheme where the Rio is represented
369
390
  # by a standard URI. For Rios that are not represented by standard URIs one of
370
- # Rio's non-standard schemes's is returned.
391
+ # Rio's non-standard schemes is returned.
371
392
  #
372
- # rio('http://ruby-doc.org/') #=> 'http'
393
+ # rio('http://ruby-doc.org/').scheme #=> 'http'
373
394
  #
374
395
  def scheme(*args) target.scheme(*args) end
375
396
 
376
- # Proxy for URI#host
397
+ # Calls URI#host for Rios which have a URI. Otherwise raises NoMethodError.
377
398
  #
378
- # rio('http://ruby-doc.org/') #=> 'ruby-doc'
399
+ # rio('http://ruby-doc.org/').host #=> 'ruby-doc'
379
400
  #
380
401
  def host(*args) target.host(*args) end
381
402
 
382
- # Proxy for URI#opaque
403
+ # Calls URI#opaque for Rios which have URI representations. The opaque portion
404
+ # of a URI is the portion after the colon and before the question-mark beginning
405
+ # the query.
406
+ #
407
+ # rio('http://example.org/do.cgi?n=1').opaque #=> '//example.org/do.cgi'
383
408
  #
409
+ # For Rios that do not have URL representations, returns the same part of
410
+ # Rio's internal psuedo-URL
384
411
  def opaque(*args) target.opaque(*args) end
385
412
 
386
413
 
387
414
 
388
- # Proxy for URI#merge
415
+ # Calls URI#merge
389
416
  #
390
- # Merges to Rios. URI#merge does not document exactly what merging to URIs means. This appears to
417
+ # Merges two Rios. URI#merge does not document exactly what merging to URIs means. This appears to
391
418
  # join the the paths with like <tt>other + path</tt>. See URI#merge for less information.
392
419
  #
393
- #
394
420
  def merge(other) target.merge(other) end
395
421
 
396
422
 
397
- # Proxy for URI#route_from
423
+ # Calls URI#route_from
398
424
  #
399
425
  # Returns a new rio representing the path to this Rio from the perspective of _other_.
400
426
  # URI#route_from requires that absolute URIs be used. Rio#route_from does not.
401
427
  #
402
428
  def route_from(other) target.route_from(other) end
403
429
 
404
- # Proxy for URI#route_to
430
+ # Calls URI#route_to
405
431
  #
406
432
  # Returns a new rio representing the path to _other_ from the perspective of this Rio.
407
433
  # URI#route_to requires that absolute URIs be used. Rio#route_to does not.
@@ -80,6 +80,16 @@ module RIO
80
80
  @select_arg === record.recno
81
81
  end
82
82
  end
83
+ class Fixnum < Base
84
+ def match?(val,recno)
85
+ #p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
86
+ @select_arg === recno
87
+ end
88
+ def =~(record)
89
+ #p "=~(#{record},#{record.recno}) select_arg=#{@select_arg}"
90
+ @select_arg === record.recno
91
+ end
92
+ end
83
93
  class Proc < Base
84
94
  def initialize(arg,therio)
85
95
  super(arg)
@@ -127,6 +137,10 @@ module RIO
127
137
  def inspect
128
138
  @list.inspect
129
139
  end
140
+ def size() @list.size unless @list.nil? end
141
+ def only_one_fixnum?()
142
+ @list && @list.size == 1 && @list[0].kind_of?(Match::Record::Fixnum)
143
+ end
130
144
  def delete_at(index)
131
145
  @list.delete_at(index)
132
146
  @list = nil if @list.empty?
@@ -157,8 +171,10 @@ module RIO
157
171
  Match::Record::Proc.new(arg,therio)
158
172
  when ::Symbol
159
173
  Match::Record::Symbol.new(arg)
174
+ when ::Fixnum
175
+ Match::Record::Fixnum.new(arg)
160
176
  else
161
- Match::Record::Range.new(::Range.new(arg,arg))
177
+ raise ArgumentError,"Argument must be a Regexp,Range,Fixnum,Proc, or Symbol"
162
178
  end
163
179
  end
164
180
  def match?(val,recno)
@@ -188,6 +204,9 @@ module RIO
188
204
  @rej = SelList.create(therio,rej_args)
189
205
  @always = init_always()
190
206
  end
207
+ def only_one_fixnum?()
208
+ @rej.nil? && @sel && @sel.only_one_fixnum?
209
+ end
191
210
  def init_always(reset=false)
192
211
  if @sel.nil? and @rej.nil?
193
212
  !reset
data/lib/rio/ops/dir.rb CHANGED
@@ -137,14 +137,13 @@ module RIO
137
137
  alias :unlink :rmdir
138
138
 
139
139
  def chdir(*args,&block)
140
- ndir = new_rio('.')
141
140
  if block_given?
142
141
  Impl::U.chdir(self,*args) { |dir|
143
- yield ndir
142
+ yield new_rio('.')
144
143
  }
145
144
  else
146
145
  Impl::U.chdir(self,*args)
147
- return ndir
146
+ return new_rio('.')
148
147
  end
149
148
  self
150
149
  end
data/lib/rio/ops/path.rb CHANGED
@@ -109,7 +109,11 @@ module RIO
109
109
  new_rio(rl.merge(ensure_rio(other).rl))
110
110
  end
111
111
  def base(b=nil)
112
- new_rio(rl.base)
112
+ new_rio(rl.base(b))
113
+ end
114
+ def setbase(b)
115
+ rl.base(b)
116
+ self
113
117
  end
114
118
  extend Forwardable
115
119
  def_instance_delegators(:rl,:scheme,:host,:opaque)
@@ -124,14 +128,6 @@ module RIO
124
128
  en = Impl::U.extname(rl.path_no_slash,*args)
125
129
  (en.empty? ? nil : en)
126
130
  end
127
- def basename(*args)
128
- unless args.empty?
129
- ex = args[0] || self.extname
130
- self.ext(ex)
131
- end
132
- #p self.ext?.inspect
133
- new_rio(Impl::U.basename(rl.path_no_slash,self.ext?))
134
- end
135
131
  def split()
136
132
  require 'rio/to_rio'
137
133
  pth = rl.path_no_slash
@@ -142,10 +138,28 @@ module RIO
142
138
  parts[0] = rooturi
143
139
  end
144
140
  # give each rio the correct base
145
- parts.inject([rio(parts.shift)]) { |ary,d| ary << rio(d,ary[-1].abs.to_url+'/') }.extend(ToRio::Array)
141
+ parts.inject([rio(parts.shift)]) { |ary,d| ary << rio(d,{ 'base' => ary[-1].abs.to_url+'/'} ) }.extend(ToRio::Array)
142
+ end
143
+ def basename(*args)
144
+ unless args.empty?
145
+ ex = args[0] || self.extname
146
+ self.ext(ex)
147
+ end
148
+ #p self.ext?.inspect
149
+ fn = Impl::U.basename(rl.path_no_slash,self.ext?)
150
+ new_rio(fn,{'base' => _calc_base()})
146
151
  end
147
152
  def filename()
148
- new_rio(Impl::U.basename(rl.path_no_slash))
153
+ fn = Impl::U.basename(rl.path_no_slash)
154
+ new_rio(fn,{'base' => _calc_base()})
155
+ end
156
+ def _calc_base()
157
+ dn = Impl::U.dirname(rl.path_no_slash)
158
+ if dn[0] == ?/
159
+ dn
160
+ else
161
+ self.base.to_url + dn + '/'
162
+ end
149
163
  end
150
164
  def dirname(*args)
151
165
  new_rio(Impl::U.dirname(rl.path_no_slash,*args))
@@ -90,6 +90,11 @@ module RIO
90
90
  return to_rec_(raw_rec) if @get_selrej.match?(raw_rec,@recno)
91
91
  end
92
92
  end
93
+ private
94
+
95
+ def _ss_like_array(selrej)
96
+ selrej.only_one_fixnum? and !dir_iter?
97
+ end
93
98
 
94
99
  protected
95
100
 
@@ -103,9 +108,7 @@ module RIO
103
108
  each_rec_ do |raw_rec|
104
109
  _got_rec(raw_rec)
105
110
  rangetops = check_passed_ranges(selrej,@recno) if rangetops and @recno > rangetops[0]
106
- as = selrej.match?(raw_rec,@recno)
107
- #p "as: #{as.inspect}" unless as == true || as == false
108
- if as
111
+ if as = selrej.match?(raw_rec,@recno)
109
112
  if want_ma
110
113
  yield(to_rec_(raw_rec),as)
111
114
  else
data/lib/rio/rl/base.rb CHANGED
@@ -47,7 +47,7 @@ module RIO
47
47
  '-' => 'stdio',
48
48
  '=' => 'stderr',
49
49
  '"' => 'strio',
50
- '?' => 'tempfile',
50
+ '?' => 'temp',
51
51
  '[' => 'aryio',
52
52
  '`' => 'cmdio',
53
53
  '#' => 'fd',
@@ -56,7 +56,7 @@ module RIO
56
56
  ?- => 'stdio',
57
57
  ?= => 'stderr',
58
58
  ?" => 'strio',
59
- ?? => 'tempfile',
59
+ ?? => 'temp',
60
60
  ?[ => 'aryio',
61
61
  ?` => 'cmdio',
62
62
  ?# => 'fd',
@@ -133,6 +133,7 @@ module RIO
133
133
  def =~(other) other =~ self.to_s end
134
134
  def length() self.to_s.length end
135
135
  def fspath() nil end
136
+ def path() nil end
136
137
 
137
138
  def to_rl() self.rl end
138
139
 
data/lib/rio/rl/ioi.rb CHANGED
@@ -44,7 +44,8 @@ module RIO
44
44
  def scheme() self.class.const_get(:RIOSCHEME) end
45
45
  def opaque() '' end
46
46
  def self.splitrl(s) nil end
47
- def path() self.class.const_get(:RIOPATH) end
47
+ #def path() self.class.const_get(:RIOPATH) end
48
+ def path() nil end
48
49
  def fspath() nil end
49
50
  def to_s() url() end
50
51
  end
data/lib/rio/rl/path.rb CHANGED
@@ -57,8 +57,19 @@ module RIO
57
57
  @pth = pth
58
58
  @uri= nil
59
59
  end
60
+ @pth.sub!(%r|/\.$|,'/')
61
+ @wd = nil
62
+ if !args.empty? and args[-1].kind_of?(::Hash) and (b = args.pop['base'])
63
+ @wd = case b
64
+ when %r%^file://(localhost)?(/.*)?$% then $2 || '/'
65
+ when %r%^/% then b
66
+ else RL.fs2url(::Dir.getwd)+'/'+b
67
+ end
68
+ @wd.squeeze('/')
69
+ end
60
70
  self.join(*args) unless args.empty?
61
- @wd = RL.fs2url(::Dir.getwd)+'/'
71
+ @wd = @pth if @pth[0] == ?/
72
+ @wd = RL.fs2url(::Dir.getwd)+'/' unless @wd
62
73
  end
63
74
 
64
75
  def parse_url(str)
@@ -98,7 +109,6 @@ module RIO
98
109
  def to_s() RL.url2fs(@pth) end
99
110
 
100
111
  def self.splitrl(s)
101
-
102
112
  sch,opq,whole = split_riorl(s)
103
113
  case sch
104
114
  when 'file' then [whole]
@@ -124,7 +134,12 @@ module RIO
124
134
  def merge(other)
125
135
  self.class.new(uri.merge(other.uri))
126
136
  end
127
- def base() (absolute? ? @pth : @wd) end
137
+ def base(arg=nil)
138
+ unless arg.nil?
139
+ self.wd = arg
140
+ end
141
+ (absolute? ? @pth : @wd)
142
+ end
128
143
 
129
144
  def abs()
130
145
  return self if absolute?