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
data/README CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2005, 2006 Christopher Kleckner
1
+ Copyright (c) 2005,2006,2007 Christopher Kleckner
2
2
  All rights reserved
3
3
 
4
4
  This file is part of the Rio library for ruby.
@@ -18,30 +18,35 @@ along with Rio; if not, write to the Free Software
18
18
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
19
 
20
20
 
21
- <b>Rio is pre-alpha software.
22
- The documented interface and behavior is subject to change without notice.</b>
23
-
24
21
  === Rio - Ruby I/O Comfort Class
25
22
 
26
- Rio is a convenience class wrapping much of the functionality of
27
- IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI, Zlib, and CSV.
23
+ Rio wraps much of the functionality of IO, File, Dir, Pathname, FileUtils,
24
+ Tempfile, StringIO, OpenURI, Zlib, and CSV.
25
+
26
+ ==== Building the documentation
28
27
 
29
28
  To create the documentation for Rio run the command
30
29
  ruby build_doc.rb
31
- from the distribution directory.
30
+ from the distribution directory.
32
31
 
33
32
  Then point your browser at the 'doc/rdoc' directory.
34
33
 
35
- Suggested Reading
34
+ The RDoc template file included with the distribution contains some RDoc hacks
35
+ that overcomes some of RDoc's weaknesses and makes the documentation *much* more
36
+ usable. It is unadvisable to build the RDoc documentation without these.
37
+
38
+
39
+ ===== Suggested Reading
36
40
  * RIO::Doc::SYNOPSIS
37
41
  * RIO::Doc::INTRO
38
42
  * RIO::Doc::HOWTO
43
+ * RIO::Doc::EXAMPLES
39
44
  * RIO::Rio
40
45
 
41
- To install Rio untar the distribution and type
42
- ruby setup.rb config
43
- ruby setup.rb setup
44
- ruby setup.rb install
46
+ ==== Installation
47
+
48
+ To install Rio from the distribution directory type
49
+ ruby setup.rb
45
50
 
46
51
  Rio is also available as a gem. If you have rubygems installed use:
47
52
  gem install rio
@@ -56,6 +61,7 @@ To read the documentation without running rdoc, read the files:
56
61
  * lib/rio/doc/HOWTO.rb
57
62
  * lib/rio/if/*.rb
58
63
 
64
+
59
65
  Project:: http://rubyforge.org/projects/rio/
60
66
  Documentation:: http://rio.rubyforge.org/
61
67
  Bugs:: http://rubyforge.org/tracker/?group_id=821
data/Rakefile CHANGED
@@ -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.
@@ -41,32 +41,12 @@ require 'rake/testtask'
41
41
  $:.push 'lib'
42
42
  require 'rio/version'
43
43
  require 'rio/doc'
44
+ require 'rio'
44
45
 
45
- SVN_REPOSITORY_URL = ''
46
+ SVN_REPOSITORY_URL = 'svn+ssh://rio4ruby@rubyforge.org//var/svn/trunk/rio'
46
47
 
47
- SRC_FILES = FileList['lib/**/*.rb']
48
- DOC_FILES = FileList['README','lib/rio.rb','lib/rio/doc/*.rb',
49
- 'lib/rio/if/*.rb','lib/rio/kernel.rb','lib/rio/constructor.rb']
50
- XMP_FILES = FileList['ex/*']
51
-
52
- module PKG
53
- NAME = "rio"
54
- TITLE = RIO::TITLE
55
- VERSION = RIO::VERSION
56
- FULLNAME = PKG::NAME + "-" + PKG::VERSION
57
- SUMMARY = RIO::SUMMARY
58
- DESCRIPTION = RIO::DESCRIPTION
59
- FILES = FileList.new(['setup.rb', 'build_doc.rb', 'COPYING', 'Rakefile', 'ChangeLog', 'VERSION',
60
- 'test/**/*.rb','doc/**/*'] + SRC_FILES.to_a + DOC_FILES.to_a + XMP_FILES.to_a
61
- ) do |fl|
62
- fl.exclude( /\bsvn\b/ )
63
- fl.exclude( 'test/qp' )
64
- fl.exclude( 'test/coverage' )
65
- fl.exclude( 'doc/rdoc' )
66
- end
67
- OUT_DIR = 'pkg'
68
- OUT_FILES = %w[.gem .tar.gz .zip].map { |ex| OUT_DIR + '/' + FULLNAME + ex }
69
- end
48
+ require 'doc/pkg_def'
49
+
70
50
  ZIP_DIR = "/zip/ruby/rio"
71
51
 
72
52
 
@@ -84,47 +64,44 @@ task :prepare do
84
64
  ruby "setup.rb setup"
85
65
  end
86
66
 
87
-
88
67
  desc "Installs the package #{PKG::NAME}"
89
68
  task :install => [:prepare] do
90
69
  ruby "setup.rb install"
91
70
  end
92
71
 
93
-
94
72
  task :clean do
95
73
  ruby "setup.rb clean"
96
74
  end
97
75
 
98
-
99
76
  CLOBBER << "doc/rdoc"
100
77
  desc "Builds the documentation"
101
- task :doc => [:rdoc] do
78
+ task :doc => [:rio_rdoc] do
102
79
  puts "\nGenerating online documentation..."
103
80
  # ruby %{-I../lib ../bin/webgen -V 2 }
104
81
  end
105
82
 
106
- RDOC_OPTIONS = ['--line-numbers']
107
83
  rd = Rake::RDocTask.new do |rdoc|
108
84
  rdoc.rdoc_dir = 'doc/rdoc'
109
85
  rdoc.title = PKG::TITLE
110
- rdoc.options = RDOC_OPTIONS
86
+ rdoc.options = PKG::RDOC_OPTIONS
111
87
  rdoc.main = 'RIO::Doc::SYNOPSIS'
112
- DOC_FILES.to_a.each do |glb|
113
- next if glb =~ /yaml.rb$/
88
+ PKG::FILES::DOC.to_a.each do |glb|
89
+ #next if glb =~ /yaml.rb$/
114
90
  rdoc.rdoc_files.include( glb )
115
91
  end
116
92
  rdoc.template = 'doc/generators/template/html/rio.rb'
117
93
  end
118
94
 
119
- CLOBBER << "test/rio.log"
95
+ desc "Build custom RDoc"
96
+ task :rio_rdoc do
97
+ require 'rio/doc/SYNOPSIS'
98
+ ruby "-Idoc/patched_rdoc -Ilib doc/bin/rdoc --show-hash --op doc/rdoc --title #{PKG::TITLE} --line-numbers --template doc/generators/template/html/rio.rb #{PKG::FILES::DOC} --main #{RIO::Doc::SYNOPSIS}"
99
+ end
100
+ CLOBBER << "test/log" << "test/qp"
120
101
  task :test do |t|
121
102
  sh "cd test;ruby -I../lib -I. runtests.rb"
122
103
  end
123
104
 
124
- #task :package => [:gen_files] do |var|
125
- # require 'rio/kernel'
126
- # rio(ZIP_DIR) << rio('pkg').files['*.tgz','*.tar.gz','*.zip','*.gem']
127
- #end
128
105
  task :ziparc do |var|
129
106
  require 'rio'
130
107
  #$trace_states = true
@@ -145,6 +122,7 @@ end
145
122
  #CLOBBER << "ChangeLog" << "VERSION" << "install.rb"
146
123
 
147
124
  task :gen_files => [:gen_changelog, :gen_version]
125
+ #task :gen_files => [:gen_version]
148
126
  CLOBBER << "ChangeLog" << "VERSION"
149
127
  task :no_old_pkg do
150
128
  # unless Dir["pkg/#{PKG::FULLNAME}*"].empty?
@@ -162,7 +140,36 @@ task :package => [:no_old_pkg, :gen_files]
162
140
  Rake::PackageTask.new( PKG::NAME, PKG::VERSION ) do |p|
163
141
  p.need_tar_gz = true
164
142
  p.need_zip = true
165
- p.package_files = PKG::FILES
143
+ p.package_files = PKG::FILES::DIST
144
+ end
145
+
146
+ Spec = Gem::Specification.new do |s|
147
+ s.name = PKG::NAME
148
+ s.version = PKG::VERSION
149
+ s.author = PKG::AUTHOR
150
+ s.email = PKG::EMAIL
151
+ s.homepage = "http://rio.rubyforge.org/"
152
+ s.rubyforge_project = "rio"
153
+
154
+ s.platform = Gem::Platform::RUBY
155
+ s.summary = PKG::SUMMARY
156
+ s.files = PKG::FILES::DIST.map { |rf| rf.to_s }
157
+
158
+ s.require_path = 'lib'
159
+ s.autorequire = 'rio'
160
+
161
+ s.has_rdoc = true
162
+
163
+ s.rdoc_options << PKG::RDOC_OPTIONS
164
+ end
165
+
166
+ Rake::GemPackageTask.new(Spec) do |p| end
167
+
168
+ desc "Build the Gem spec file for the rio package"
169
+ task :gemspec => "pkg/rio.gemspec"
170
+ file "pkg/rio.gemspec" => ["pkg", "Rakefile"] do |t|
171
+ puts PKG::FILES::DIST
172
+ open(t.name, "w") do |f| f.puts Spec.to_yaml end
166
173
  end
167
174
 
168
175
  desc "Make a new release (test,package,svn_version)"
@@ -194,55 +201,18 @@ task :svn_commit do
194
201
  sh cmd
195
202
  end
196
203
 
197
- if !defined? Gem
198
- puts "Package Target requires RubyGEMs"
199
- else
200
- spec = Gem::Specification.new do |s|
201
-
202
- #### Basic information
203
-
204
- s.name = PKG::NAME
205
- s.version = PKG::VERSION
206
- s.summary = PKG::SUMMARY
207
- s.description = PKG::DESCRIPTION
208
-
209
- #### Dependencies, requirements and files
210
-
211
- s.files = PKG::FILES.to_a
212
- # s.add_dependency( 'extensions', '>= 0.6.0' )
213
-
214
- s.require_path = 'lib'
215
- s.autorequire = 'rio'
216
-
217
- #### Documentation
218
-
219
- s.has_rdoc = true
220
- #s.extra_rdoc_files = ['doc/generators/template/html/rio.rb']
221
- s.rdoc_options << RDOC_OPTIONS
222
-
223
- #### Author and project details
224
-
225
- s.author = "Christopher Kleckner"
226
- s.email = "rio4ruby@rubyforge.org"
227
- s.homepage = "http://rio.rubyforge.org/"
228
- s.rubyforge_project = "rio"
229
- end
230
-
231
- Rake::GemPackageTask.new( spec ) do |pkg|
232
- pkg.need_zip = true
233
- pkg.need_tar_gz = true
234
- end
235
-
236
- end
204
+ #desc "Build the gem from the gemspec"
205
+ #task :buildgem => ['rio.gemspec'] do
206
+ # cmd = "gem build 'rio.gemspec'"
207
+ # sh cmd
208
+ #end
237
209
 
238
- =begin
239
- desc "Creates a tag in the repository"
240
- task :tag do
241
- repositoryPath = File.dirname( $1 ) if `svn info` =~ /^URL: (.*)$/
242
- fail "Tag already created in repository " if /#{PKG::NAME}/ =~ `svn ls #{repositoryPath}/versions`
243
- sh "svn cp -m 'Created version #{PKG::NAME}' #{repositoryPath}/trunk #{repositoryPath}/versions/#{PKG::NAME}"
210
+ GEM_FILENAME = "pkg/#{Spec.full_name}.gem"
211
+ desc "Install development gem"
212
+ task :installgem => [GEM_FILENAME] do
213
+ cmd = "gem install #{GEM_FILENAME}"
214
+ sh cmd
244
215
  end
245
- =end
246
216
 
247
217
  desc "Upload documentation to homepage"
248
218
  task :uploaddoc => [:rdoc] do
@@ -281,7 +251,7 @@ task :statistics do
281
251
  total_lines = 0
282
252
  total_code = 0
283
253
  show_line( "File Name", "Lines", "LOC" )
284
- SRC_FILES.each do |fn|
254
+ PKG::FILES::SRC.each do |fn|
285
255
  lines, codelines = count_lines fn
286
256
  show_line( fn, lines, codelines )
287
257
  total_lines += lines
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #--
3
3
  # ===============================================================================
4
- # Copyright (c) 2005, 2006 Christopher Kleckner
4
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
5
5
  # All rights reserved
6
6
  #
7
7
  # This file is part of the Rio library for ruby.
@@ -28,32 +28,32 @@
28
28
 
29
29
  $:.unshift 'lib'
30
30
  require 'rio'
31
+ require 'rio/prompt'
32
+ require 'doc/pkg_def'
31
33
 
32
34
  module DFLT
33
35
  RDOC_DIR = rio('doc/rdoc')
34
36
  end
35
37
 
36
- puts "Rio interactive RDoc installer."
38
+ #puts "Rio interactive RDoc installer."
37
39
 
38
- rdoc_dir = rio(?-).print!("Where shall I build the rdoc documentation[#{DFLT::RDOC_DIR}]: ").chomp.gets.strip
40
+ rdoc_dir = RIO.promptd('Where shall I build the rdoc documentation',DFLT::RDOC_DIR)
39
41
  rdoc_dir = DFLT::RDOC_DIR if rdoc_dir.empty?
40
42
  rdoc_dir = rio(rdoc_dir)
41
43
 
42
- puts "Building the Rio RDoc documentation in '#{rdoc_dir}'"
44
+ argv = []
45
+ argv << '--op' << rdoc_dir.to_s
46
+ argv += PKG::RDOC_OPTIONS
47
+ argv += PKG::FILES::DOC
43
48
 
44
- RDOC_OPTIONS = ['--line-numbers', '-m RIO::Doc::SYNOPSIS',"--op #{rdoc_dir}", "-T doc/generators/template/html/rio"]
45
-
46
- rdoc_files = [
47
- rio('README'),
48
- rio('lib/rio.rb'),
49
- rio('lib/rio/')['kernel.rb','constructor.rb'],
50
- rio('lib/rio/doc')['*.rb'],
51
- rio('lib/rio/if').skipfiles('yaml.rb').files['*.rb'],
52
- ]
53
-
54
- cmd = sprintf("rdoc %s %s",RDOC_OPTIONS.join(' '),rdoc_files.join(' '))
55
-
56
- rio(?-,cmd) > ?-
49
+ require 'rdoc/rdoc'
50
+ begin
51
+ r = RDoc::RDoc.new
52
+ r.document(argv)
53
+ rescue RDoc::RDocError => e
54
+ $stderr.puts e.message
55
+ exit(1)
56
+ end
57
57
 
58
58
  docindex = (rdoc_dir/'index.html').abs.to_url
59
59
  msg = "Please point your browser at '#{docindex}'"
@@ -63,5 +63,7 @@ puts
63
63
  puts lin
64
64
  puts "> " + msg + " >"
65
65
  puts lin
66
+ __END__
67
+
66
68
 
67
69
 
@@ -1,4 +1,4 @@
1
- Rio 0.3.8
1
+ Rio 0.3.9
2
2
 
3
3
  == Overview
4
4
 
@@ -10,36 +10,7 @@ interfaces provided by IO, File, and Dir to an appropriate object, Rio
10
10
  provides a "grande" interface that allows many common application
11
11
  level I/O and file-system tasks to be expressed succinctly.
12
12
 
13
- == New
14
-
15
- Enhanced support for FTP file-systems. All of Rio's most powerful
16
- idioms are now supported seamlessly on FTP servers.
17
-
18
- # copy a file from or to an FTP server
19
- rio('ftp://ahost/adir/afile') > rio('localfile') # server -> local file
20
- rio('ftp://ahost/adir/afile') < rio('localfile') # local file -> server
21
-
22
- # copy an entire directory structure from or to an FTP server
23
- rio('ftp://ahost/adir') > rio('localdir') # server -> local directory
24
- rio('ftp://ahost/adir') < rio('localdir') # local directory -> server
25
-
26
- All of Rio's grande selection and filtering options are available for
27
- files and directories on FTP servers.
28
-
29
- # create a gzipped copy of a web page on an ftp server
30
- rio('ftp://ftphost/f.html.gz').gzip < rio('http://httphost/f.html')
31
-
32
- # dump the first 10 lines of a gzipped log file on an FTP server to stdout
33
- rio('ftp://ftphost/logfile.txt').lines(0...10) > ?-
34
-
35
- # iterate through the entries of a directory on an FTP server
36
- rio('ftp://ftphost/adir').entries { |entrio| ... }
37
-
38
- # get an array of all .rb files on an ftp server
39
- rb_files = rio('ftp://ftphost/').all.files['*.rb']
40
-
41
-
42
- == SYNOPSIS
13
+ = SYNOPSIS
43
14
 
44
15
  For the following assume:
45
16
  astring = ""
@@ -156,7 +127,7 @@ Bugs:: http://rubyforge.org/tracker/?group_id=821
156
127
  Email:: rio4ruby@rubyforge.org
157
128
 
158
129
  == Copyright
159
- Copyright (c) 2005, 2006 Christopher Kleckner. All rights reserved
130
+ Copyright (c) 2005,2006,2007 Christopher Kleckner. All rights reserved
160
131
 
161
132
  == License
162
133
  Rio is released under the GNU General Public License
@@ -1,8 +1,3 @@
1
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2
- Rio is pre-alpha software.
3
- The documented interface and behaviour is subject to change without notice.
4
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5
-
6
1
  === Rio - Ruby I/O Comfort Class
7
2
 
8
3
  Rio is a convenience class wrapping much of the functionality of
@@ -20,6 +15,10 @@ Suggested Reading
20
15
  * RIO::Doc::HOWTO
21
16
  * RIO::Rio
22
17
 
18
+ == New for version 0.3.9
19
+ * Bug fixes, code cleanup,
20
+
21
+
23
22
  == New for version 0.3.8
24
23
  * Enhanced support for FTP file-systems. All of Rio's most powerful
25
24
  idioms are now supported seamlessly on FTP servers.
@@ -0,0 +1,215 @@
1
+ Rio IS
2
+
3
+ === EASY
4
+
5
+ Anything that does I/O is a Rio:
6
+
7
+ File:
8
+ rio('aflile')
9
+ Directory:
10
+ rio('adir')
11
+ Web Page:
12
+ rio('http://ahost/adir/afile')
13
+ Any IO:
14
+ rio(any_io)
15
+
16
+ ... much more
17
+
18
+ Makes common tasks easy
19
+
20
+ rio('afile') > rio('copy of afile')
21
+ rio('adir') > rio('copy of adir')
22
+ rio('gzipped_file.gz').gzip > rio('ungzipped_file')
23
+ chomped_lines = rio('afile').chomp[]
24
+
25
+ ... much more
26
+
27
+ === Powerful
28
+
29
+ rb_files= rio('adir').files['*.rb']
30
+ rb_files_including_those_in_subdirectories = rio('adir').all.files['*.rb']
31
+ first_ten_lines_chomped = rio('afile').chomp[0..9]
32
+ first_ten_lines_chomped_from_gzipped_file = rio('afile.gz').gzip.chomp[0..9]
33
+ first_ten_lines_chomped_from_gzipped_file_on_ftp_server = rio('ftp://ahost/afile.gz').gzip.chomp[0..9]
34
+
35
+ ... much more
36
+
37
+ === Consistent
38
+
39
+ To iterate, add a block:
40
+ rio('afile').lines(/regular_expression/) { |line| ... }
41
+ rio('adir').files('
42
+ To return an array, use a subscript:
43
+ rio('afile').lines[/regular_expression/]
44
+ To copy use the copy-operator:
45
+ rio('afile').lines(/regular_expression/) > rio('destination_file')
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+ == Overview
54
+
55
+ Rio is a Ruby I/O convenience class wrapping much of the functionality
56
+ of IO, File and Dir. Rio also uses FileUtils, Tempfile, StringIO,
57
+ OpenURI, Net::FTP, Zlib, and CSV to provide similar functionality
58
+ using a simple consistent interface. In addition to forwarding the
59
+ interfaces provided by IO, File, and Dir to an appropriate object, Rio
60
+ provides a "grande" interface that allows many common application
61
+ level I/O and file-system tasks to be expressed succinctly.
62
+
63
+ == New
64
+
65
+ Enhanced support for FTP file-systems. All of Rio's most powerful
66
+ idioms are now supported seamlessly on FTP servers.
67
+
68
+ # copy a file from or to an FTP server
69
+ rio('ftp://ahost/adir/afile') > rio('localfile') # server -> local file
70
+ rio('ftp://ahost/adir/afile') < rio('localfile') # local file -> server
71
+
72
+ # copy an entire directory structure from or to an FTP server
73
+ rio('ftp://ahost/adir') > rio('localdir') # server -> local directory
74
+ rio('ftp://ahost/adir') < rio('localdir') # local directory -> server
75
+
76
+ All of Rio's grande selection and filtering options are available for
77
+ files and directories on FTP servers.
78
+
79
+ # create a gzipped copy of a web page on an ftp server
80
+ rio('ftp://ftphost/f.html.gz').gzip < rio('http://httphost/f.html')
81
+
82
+ # dump the first 10 lines of a gzipped log file on an FTP server to stdout
83
+ rio('ftp://ftphost/logfile.txt').lines(0...10) > ?-
84
+
85
+ # iterate through the entries of a directory on an FTP server
86
+ rio('ftp://ftphost/adir').entries { |entrio| ... }
87
+
88
+ # get an array of all .rb files on an ftp server
89
+ rb_files = rio('ftp://ftphost/').all.files['*.rb']
90
+
91
+
92
+ == SYNOPSIS
93
+
94
+ For the following assume:
95
+ astring = ""
96
+ anarray = []
97
+
98
+ Copy or append a file to a string
99
+ rio('afile') > astring # copy
100
+ rio('afile') >> astring # append
101
+
102
+ Copy or append a string to a file
103
+ rio('afile') < astring # copy
104
+ rio('afile') << astring # append
105
+
106
+ Copy or append the lines of a file to an array
107
+ rio('afile') > anarray
108
+ rio('afile') >> anarray
109
+
110
+ Copy or append a file to another file
111
+ rio('afile') > rio('another_file')
112
+ rio('afile') >> rio('another_file')
113
+
114
+ Copy a file to a directory
115
+ rio('adir') << rio('afile')
116
+
117
+ Copy a directory structure to another directory
118
+ rio('adir') >> rio('another_directory')
119
+
120
+ Copy a web-page to a file
121
+ rio('http://rubydoc.org/') > rio('afile')
122
+
123
+ Ways to get the chomped lines of a file into an array
124
+ anarray = rio('afile').chomp[] # subscript operator
125
+ rio('afile').chomp > anarray # copy-to operator
126
+ anarray = rio('afile').chomp.to_a # to_a
127
+ anarray = rio('afile').chomp.readlines # IO#readlines
128
+
129
+ Copy a gzipped file un-gzipping it
130
+ rio('afile.gz').gzip > rio('afile')
131
+
132
+ Copy a plain file, gzipping it
133
+ rio('afile.gz').gzip < rio('afile')
134
+
135
+ Copy a file from a ftp server into a local file un-gzipping it
136
+ rio('ftp://host/afile.gz').gzip > rio('afile')
137
+
138
+ Iterate over the entries in a directory
139
+ rio('adir').entries { |entrio| ... }
140
+
141
+ Iterate over only the files in a directory
142
+ rio('adir').files { |entrio| ... }
143
+
144
+ Iterate over only the .rb files in a directory
145
+ rio('adir').files('*.rb') { |entrio| ... }
146
+
147
+ Iterate over .rb files but not symlinks to .rb files
148
+ rio('adir').files('*.rb').skip(:symlink?) { |entrio| ... }
149
+
150
+ Iterate over only the _dot_ files in a directory
151
+ rio('adir').files(/^\./) { |entrio| ... }
152
+
153
+ Iterate over the files in a directory and its subdirectories, skipping
154
+ '.svn' and 'CVS' directories
155
+
156
+ rio('adir').norecurse(/^\.svn$/,'CVS').files { |entrio| ... }
157
+
158
+ Create an array of the .rb entries in a directory
159
+ anarray = rio('adir')['*.rb']
160
+
161
+ Create an array of the .rb entries in a directory and its
162
+ subdirectories.
163
+ anarray = rio('adir').all['*.rb']
164
+
165
+ Iterate over the .rb files in a directory and its subdirectories
166
+ rio('adir').all.files('*.rb') { |entrio| ... }
167
+
168
+ Iterate over the non-empty, non-comment chomped lines of a file
169
+ rio('afile').chomp.skip.lines(:empty?,/^\s*#/) { |line| ... }
170
+
171
+ Copy the output of th ps command into an array, skipping the header
172
+ line and the ps command entry
173
+ rio(?-,'ps -a').skip.lines(0,/ps$/) > anarray
174
+
175
+ Prompt for input and return what was typed
176
+ ans = rio(?-).print("Type Something: ").chomp.gets
177
+
178
+ Change the extension of all .htm files in a directory and its
179
+ subdirectories to .html
180
+ rio('adir').rename.all.files('*.htm') do |htmfile|
181
+ htmfile.extname = '.html'
182
+ end
183
+
184
+ Create a symbolic link 'asymlink' in 'adir' which refers to
185
+ 'adir/afile'
186
+ rio('adir/afile').symlink('adir/asymlink')
187
+
188
+ Copy a CSV file, changing the separator to a semicolon
189
+ rio('comma.csv').csv > rio('semicolon.csv').csv(';')
190
+
191
+ Iterate through a CSVfile with each line parsed into an array
192
+ rio('afile.csv').csv { |array_of_fields| ...}
193
+
194
+ Create a tab separated file of accounts in a UNIX passwd file,
195
+ listing only the username, uid, and realname fields
196
+ rio('/etc/passwd').csv(':').columns(0,2,4) > rio('rpt').csv("\t")
197
+
198
+ Pipe multiple commands
199
+ rio('afile') | rio(?-,'acmd') | 'another_cmd' | ?-
200
+
201
+ == Contact
202
+
203
+ Project:: http://rubyforge.org/projects/rio/
204
+ Documentation:: http://rio.rubyforge.org/
205
+ Bugs:: http://rubyforge.org/tracker/?group_id=821
206
+ Email:: rio4ruby@rubyforge.org
207
+
208
+ == Copyright
209
+ Copyright (c) 2005,2006,2007 Christopher Kleckner. All rights reserved
210
+
211
+ == License
212
+ Rio is released under the GNU General Public License
213
+ (http://www.gnu.org/licenses/gpl.html)
214
+
215
+ -Christopher Kleckner