rio 0.3.3 → 0.3.4
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.
- data/ChangeLog +225 -0
- data/README +12 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/ANNOUNCE +160 -71
- data/doc/RELEASE_NOTES +71 -2
- data/ex/colx.rb +1 -1
- data/ex/passwd_report.rb +4 -8
- data/ex/riocat +5 -5
- data/ex/riogunzip +1 -1
- data/ex/riogzip +6 -6
- data/ex/rioprompt.rb +6 -0
- data/lib/rio.rb +3 -13
- data/lib/rio/arycopy.rb +1 -1
- data/lib/rio/base.rb +1 -5
- data/lib/rio/construct.rb +75 -0
- data/lib/rio/constructor.rb +42 -11
- data/lib/rio/context.rb +1 -1
- data/lib/rio/context/dir.rb +50 -23
- data/lib/rio/context/methods.rb +5 -3
- data/lib/rio/{cxdir.rb → context/skip.rb} +24 -36
- data/lib/rio/context/stream.rb +38 -16
- data/lib/rio/cp.rb +24 -5
- data/lib/rio/dir.rb +8 -7
- data/lib/rio/doc/HOWTO.rb +33 -33
- data/lib/rio/doc/INTRO.rb +416 -256
- data/lib/rio/doc/MISC.rb +3 -1
- data/lib/rio/doc/SYNOPSIS.rb +28 -33
- data/lib/rio/entrysel.rb +76 -9
- data/lib/rio/file.rb +2 -1
- data/lib/rio/filter.rb +95 -0
- data/lib/rio/filter/closeoneof.rb +1 -1
- data/lib/rio/grande.rb +0 -74
- data/lib/rio/if.rb +2 -1
- data/lib/rio/if/basic.rb +1 -1
- data/lib/rio/if/csv.rb +1 -1
- data/lib/rio/if/dir.rb +1 -220
- data/lib/rio/if/fileordir.rb +26 -12
- data/lib/rio/if/grande.rb +55 -6
- data/lib/rio/if/grande_entry.rb +355 -0
- data/lib/rio/if/{methods.rb → grande_stream.rb} +69 -88
- data/lib/rio/if/path.rb +25 -3
- data/lib/rio/if/stream.rb +62 -37
- data/lib/rio/if/temp.rb +2 -2
- data/lib/rio/if/test.rb +23 -0
- data/lib/rio/impl/path.rb +5 -0
- data/lib/rio/match.rb +6 -3
- data/lib/rio/matchrecord.rb +50 -46
- data/lib/rio/{filter/chomp.rb → ops/construct.rb} +12 -20
- data/lib/rio/ops/create.rb +3 -0
- data/lib/rio/ops/dir.rb +12 -6
- data/lib/rio/ops/either.rb +17 -3
- data/lib/rio/ops/path.rb +4 -1
- data/lib/rio/ops/stream/input.rb +6 -1
- data/lib/rio/ops/stream/read.rb +1 -3
- data/lib/rio/{context/chomp.rb → prompt.rb} +17 -13
- data/lib/rio/rl/base.rb +1 -1
- data/lib/rio/rl/builder.rb +3 -1
- data/lib/rio/state.rb +7 -13
- data/lib/rio/stream.rb +8 -5
- data/lib/rio/stream/open.rb +1 -1
- data/lib/rio/version.rb +1 -1
- data/test/mswin32.rb +1 -1
- data/test/runtests_gem.rb +1 -1
- data/test/tc/all.rb +3 -0
- data/test/tc/copy-from.rb +13 -13
- data/test/tc/copy-to.rb +1 -1
- data/test/tc/copy.rb +1 -1
- data/test/tc/copydir.rb +0 -24
- data/test/tc/copysymlink.rb +39 -0
- data/test/tc/csv.rb +2 -2
- data/test/tc/csv2.rb +4 -4
- data/test/tc/misc.rb +16 -16
- data/test/tc/nolines.rb +26 -26
- data/test/tc/noqae.rb +74 -74
- data/test/tc/overload.rb +28 -28
- data/test/tc/riorl.rb +36 -0
- data/test/tc/selnosel.rb +36 -0
- data/test/tc/skip.rb +58 -0
- data/test/tc/skiplines.rb +42 -0
- data/test/tc/symlink.rb +1 -1
- data/test/tc/symlink0.rb +1 -1
- data/test/tc/temp.rb +1 -1
- data/test/tc/tempdir.rb +1 -1
- data/test/tc/testcase.rb +7 -1
- metadata +14 -8
- data/lib/rio/matchcolumns.rb +0 -266
- data/lib/rio/rangemath.rb +0 -44
data/doc/RELEASE_NOTES
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2
2
|
Rio is pre-alpha software.
|
3
|
-
The documented interface and
|
3
|
+
The documented interface and behaviour is subject to change without notice.
|
4
4
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
5
5
|
|
6
6
|
=== Rio - Ruby I/O Comfort Class
|
@@ -24,6 +24,75 @@ Suggested Reading
|
|
24
24
|
* RIO::Doc::HOWTO
|
25
25
|
* RIO::Rio
|
26
26
|
|
27
|
+
== New for version 0.3.4
|
28
|
+
* New Grande Selection parameter.
|
29
|
+
|
30
|
+
A major weakness of Rio's selection methods (lines, files, etc.)
|
31
|
+
has always been that it only implemented a logical OR.
|
32
|
+
|
33
|
+
rio('afile').lines(0..10,/Rio/) {...}
|
34
|
+
iterates through lines that are in the range 0..10 OR
|
35
|
+
contain 'Rio'.
|
36
|
+
|
37
|
+
rio('adir').files(:executable?,'*.rb') {...}
|
38
|
+
iterates through files that are executable OR match '*.rb'
|
39
|
+
|
40
|
+
Selecting files that matched both required using a proc.
|
41
|
+
rio('adir').files(proc{ |f| f.executable? and f.fnmatch?('*.rb')}) {...}
|
42
|
+
|
43
|
+
Rio's grande selection methods will now accept an array of conditions
|
44
|
+
which must all be matched, in order to be selected. A logical AND.
|
45
|
+
|
46
|
+
rio('adir').files([:executable?,'*.rb']) {...}
|
47
|
+
|
48
|
+
The array, of course, need not be the only paramter.
|
49
|
+
|
50
|
+
rio('adir').files('*.exe',[:executable?,'*.rb']) {...}
|
51
|
+
|
52
|
+
selects .exe files and .rb files that are executable.
|
53
|
+
|
54
|
+
* Renamed some of grande rejection methods.
|
55
|
+
(based on a suggestion by Gavin Sinclair)
|
56
|
+
nolines => skiplines
|
57
|
+
nofiles => skipfiles
|
58
|
+
etc.
|
59
|
+
|
60
|
+
* New skip() grande method
|
61
|
+
rio('afile').skip.lines(/Rio/) # same as skiplines(/Rio/)
|
62
|
+
rio('afile').lines(/Rio/).skip(0..9) # lines with 'Rio', exclude
|
63
|
+
# the first ten lines
|
64
|
+
|
65
|
+
* Alternative syntaxes for creating Rios that have no path.
|
66
|
+
|
67
|
+
rio(?-) # create a Rio refering to stdio
|
68
|
+
rio(:stdio) # same thing.
|
69
|
+
rio.stdio # same thing
|
70
|
+
RIO.stdio # ditto
|
71
|
+
RIO::Rio.stdio # once again
|
72
|
+
|
73
|
+
* From Pathname added
|
74
|
+
* root?
|
75
|
+
* mountpoint?
|
76
|
+
* realpath
|
77
|
+
* cleanpath
|
78
|
+
|
79
|
+
* Removed Rio#slurp in favor of Rio#contents.
|
80
|
+
|
81
|
+
|
82
|
+
* Added aliases for the copy operators. (suggested by Dave Burt)
|
83
|
+
* copy_to >
|
84
|
+
* append_to >>
|
85
|
+
* copy_from <
|
86
|
+
* append_from <<
|
87
|
+
|
88
|
+
|
89
|
+
* Bug fixes and corrections
|
90
|
+
|
91
|
+
Project:: http://rubyforge.org/projects/rio/
|
92
|
+
Documentation:: http://rio.rubyforge.org/
|
93
|
+
Bugs:: http://rubyforge.org/tracker/?group_id=821
|
94
|
+
Email:: rio4ruby@rubyforge.org
|
95
|
+
|
27
96
|
== New for version 0.3.3
|
28
97
|
* Expanded support and documentation for CSV files
|
29
98
|
Examples:
|
@@ -137,7 +206,7 @@ Put the first 100 chomped lines of a gzipped file into an array
|
|
137
206
|
anarray = rio('afile.gz').gzip[0...100]
|
138
207
|
|
139
208
|
Copy the output of th ps command into an array, skipping the header line and the ps command entry
|
140
|
-
rio(?-,'ps -a').
|
209
|
+
rio(?-,'ps -a').skiplines(0,/ps$/) > anarray
|
141
210
|
|
142
211
|
Prompt for input and return what was typed
|
143
212
|
ans = rio(?-).print("Type Something: ").chomp.gets
|
data/ex/colx.rb
CHANGED
data/ex/passwd_report.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
-
#!/usr/bin/
|
1
|
+
#!/usr/local/bin/ruby
|
2
2
|
require 'rio'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
__END__
|
4
|
+
# Create a tab separated file of accounts in a UNIX passwd file,
|
5
|
+
# listing only the username, uid, and realname fields
|
7
6
|
|
8
|
-
|
9
|
-
Take I-90 east, take exit 143 Gorge Amphitheatre. Follow amphitheatre signs approximately 6 miles.
|
7
|
+
rio('/etc/passwd').csv(':').columns(0,2,4) > rio(?-).csv("\t")
|
10
8
|
|
11
|
-
206-242-8738
|
12
|
-
3:00
|
data/ex/riocat
CHANGED
@@ -6,11 +6,11 @@ require 'rio'
|
|
6
6
|
#
|
7
7
|
# explanation:
|
8
8
|
#
|
9
|
-
# rio(
|
10
|
-
# rio(
|
9
|
+
# rio(?-)
|
10
|
+
# rio(?-): a rio that will be connected to stdin or stdout depending how it is used
|
11
11
|
#
|
12
|
-
# rio(
|
13
|
-
# rio(
|
12
|
+
# rio(?-)
|
13
|
+
# rio(?-): a rio that will be connected to stdin or stdout depending how it is used
|
14
14
|
#
|
15
15
|
# <
|
16
16
|
# <: copy operator indicating rio on left is written to and the rio on the right is read from
|
@@ -22,7 +22,7 @@ rio(?-) < rio(?-)
|
|
22
22
|
# rio(?-) > rio(?-)
|
23
23
|
#
|
24
24
|
# this is similar but reads the entire file before writing
|
25
|
-
#rio(
|
25
|
+
#rio(?-).print!( rio(?-).slurp )
|
26
26
|
|
27
27
|
|
28
28
|
|
data/ex/riogunzip
CHANGED
@@ -24,7 +24,7 @@ rio(?-).gzip > rio(?-)
|
|
24
24
|
# rio(?-) < rio(?-).gzip
|
25
25
|
#
|
26
26
|
# this is similar, but reads the entire file in before writing it out
|
27
|
-
# rio(
|
27
|
+
# rio(?-).print!( rio(?-).gzip.contents )
|
28
28
|
#
|
29
29
|
#rio(?-).gzip.each_record do |rec|
|
30
30
|
# rio(?-).print(rec)
|
data/ex/riogzip
CHANGED
@@ -6,19 +6,19 @@ require 'rio'
|
|
6
6
|
#
|
7
7
|
# explanation:
|
8
8
|
#
|
9
|
-
# rio(
|
10
|
-
# rio(
|
9
|
+
# rio(?-).gzip
|
10
|
+
# rio(?-): a rio that will be connected to stdin or stdout depending how it is used
|
11
11
|
# .gzip: filter the input or output through Zlib:Gzip[Reader or Writer]
|
12
12
|
#
|
13
|
-
# rio(
|
14
|
-
# rio(
|
13
|
+
# rio(?-)
|
14
|
+
# rio(?-): a rio that will be connected to stdin or stdout depending how it is used
|
15
15
|
#
|
16
16
|
# <
|
17
17
|
# rio copy operator indicating the direction of data
|
18
18
|
|
19
|
-
rio(
|
19
|
+
rio(?-).gzip < rio(?-)
|
20
20
|
|
21
21
|
#
|
22
22
|
# could also be written:
|
23
|
-
# rio(
|
23
|
+
# rio(?-) > rio(?-).gzip
|
24
24
|
#
|
data/ex/rioprompt.rb
ADDED
data/lib/rio.rb
CHANGED
@@ -40,6 +40,7 @@
|
|
40
40
|
require 'rio/version'
|
41
41
|
require 'rio/base'
|
42
42
|
require 'rio/exception'
|
43
|
+
|
43
44
|
require 'extensions/symbol'
|
44
45
|
require 'extensions/enumerable'
|
45
46
|
require 'extensions/string'
|
@@ -53,6 +54,7 @@ end
|
|
53
54
|
|
54
55
|
require 'rio/kernel'
|
55
56
|
require 'rio/constructor'
|
57
|
+
require 'rio/construct'
|
56
58
|
|
57
59
|
module RIO
|
58
60
|
SEEK_SET = IO::SEEK_SET
|
@@ -97,19 +99,6 @@ module RIO
|
|
97
99
|
ario
|
98
100
|
end
|
99
101
|
|
100
|
-
def open(m,*args,&block)
|
101
|
-
target.open(m,*args)
|
102
|
-
if block_given?
|
103
|
-
old_closeoncopy,old_closeoneof = closeoncopy?,closeoneof?
|
104
|
-
begin
|
105
|
-
return yield(nocloseoncopy.nocloseoneof)
|
106
|
-
ensure
|
107
|
-
reset.closeoncopy(old_closeoncopy).closeoneof(old_closeoneof)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
self
|
111
|
-
end
|
112
|
-
|
113
102
|
# returns the Rio#fspath, which is the path for the Rio on the underlying filesystem
|
114
103
|
def to_s() target.to_s end
|
115
104
|
alias :to_str :to_s
|
@@ -138,6 +127,7 @@ module RIO
|
|
138
127
|
require 'rio/if'
|
139
128
|
include Enumerable
|
140
129
|
end
|
130
|
+
|
141
131
|
protected
|
142
132
|
|
143
133
|
def target() @state.target end
|
data/lib/rio/arycopy.rb
CHANGED
data/lib/rio/base.rb
CHANGED
@@ -37,10 +37,6 @@
|
|
37
37
|
|
38
38
|
module RIO
|
39
39
|
class Base < ::Object #:nodoc: all
|
40
|
-
# KIOSYMS = [:gets,:open,:readline,:readlines,
|
41
|
-
# :chop,:chomp!,:chop!,
|
42
|
-
# :to_a,:putc,:puts,:print,:printf,:split,:=~]
|
43
|
-
# @@kernel_cleaned ||= KIOSYMS.each { |sym| undef_method(sym) }
|
44
40
|
KEEPSYM = {
|
45
41
|
'__id__' => true,
|
46
42
|
'__send__' => true,
|
@@ -54,7 +50,7 @@ module RIO
|
|
54
50
|
'dup' => true,
|
55
51
|
'clone' => true,
|
56
52
|
'nil?' => true,
|
57
|
-
|
53
|
+
'open' => true,
|
58
54
|
}.freeze
|
59
55
|
instance_methods.each { |m| undef_method m unless KEEPSYM[m] }
|
60
56
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#--
|
2
|
+
# ===============================================================================
|
3
|
+
# Copyright (c) 2005, 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
|
+
# rake rdoc
|
26
|
+
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
|
+
#
|
28
|
+
# Suggested Reading
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
30
|
+
# * RIO::Doc::INTRO
|
31
|
+
# * RIO::Doc::HOWTO
|
32
|
+
# * RIO::Rio
|
33
|
+
#
|
34
|
+
# <b>Rio is pre-alpha software.
|
35
|
+
# The documented interface and behavior is subject to change without notice.</b>
|
36
|
+
|
37
|
+
|
38
|
+
module RIO
|
39
|
+
def strio(*args) rio(:strio,*args) end
|
40
|
+
def stdio(*args) rio(:stdio,*args) end
|
41
|
+
def stderr(*args) rio(:stderr,*args) end
|
42
|
+
def temp(*args) rio(:temp,*args) end
|
43
|
+
def tempfile(*args) rio(:tempfile,*args) end
|
44
|
+
def tempdir(*args) rio(:tempdir,*args) end
|
45
|
+
def tcp(*args) rio(:tcp,*args) end
|
46
|
+
def cmdio(*args) rio(:cmdio,*args) end
|
47
|
+
def sysio(*args) rio(:sysio,*args) end
|
48
|
+
def fd(*args) rio(:fd,*args) end
|
49
|
+
|
50
|
+
module_function :strio
|
51
|
+
module_function :stdio
|
52
|
+
module_function :stderr
|
53
|
+
module_function :temp
|
54
|
+
module_function :tempfile
|
55
|
+
module_function :tempdir
|
56
|
+
module_function :tcp
|
57
|
+
module_function :cmdio
|
58
|
+
module_function :sysio
|
59
|
+
module_function :fd
|
60
|
+
end
|
61
|
+
|
62
|
+
module RIO
|
63
|
+
class Rio
|
64
|
+
def self.strio(*args) rio(:strio,*args) end
|
65
|
+
def self.stdio(*args) rio(:stdio,*args) end
|
66
|
+
def self.stderr(*args) rio(:stderr,*args) end
|
67
|
+
def self.temp(*args) rio(:temp,*args) end
|
68
|
+
def self.tempfile(*args) rio(:tempfile,*args) end
|
69
|
+
def self.tempdir(*args) rio(:tempdir,*args) end
|
70
|
+
def self.tcp(*args) rio(:tcp,*args) end
|
71
|
+
def self.cmdio(*args) rio(:cmdio,*args) end
|
72
|
+
def self.sysio(*args) rio(:sysio,*args) end
|
73
|
+
def self.fd(*args) rio(:fd,*args) end
|
74
|
+
end
|
75
|
+
end
|
data/lib/rio/constructor.rb
CHANGED
@@ -92,21 +92,31 @@ module RIO
|
|
92
92
|
#
|
93
93
|
# ==== Creating Rios that do not have a path
|
94
94
|
#
|
95
|
-
# To create a Rio without a path, the first argument to +rio+ is usually
|
96
|
-
# character.
|
95
|
+
# To create a Rio without a path, the first argument to +rio+ is usually
|
96
|
+
# either a single character or a symbol.
|
97
97
|
#
|
98
98
|
# ===== Creating a Rio that refers to a clone of your programs stdin or stdout.
|
99
99
|
#
|
100
100
|
# <tt>rio(?-)</tt> (mnemonic: '-' is used by some Unix programs to specify stdin or stdout in place of a file)
|
101
|
+
#
|
102
|
+
# <tt>rio(:stdio)</tt>
|
101
103
|
#
|
102
104
|
# Just as a Rio that refers to a file, does not know whether that file will be opened for reading or
|
103
105
|
# writing until an I/O operation is specified, a <tt>stdio:</tt> Rio does not know whether it will connect
|
104
106
|
# to stdin or stdout until an I/O operation is specified.
|
105
107
|
#
|
108
|
+
# Currently :stdin and :stdout are allowed as synonyms for :stdio. This allows one to write
|
109
|
+
# rio(:stdout).puts("Hello :stdout")
|
110
|
+
# which is reasonable. It also allows one to write
|
111
|
+
# rio(:stdin).puts("Hello :stdin")
|
112
|
+
# which is not reasonable and will be disallowed in future releases.
|
113
|
+
#
|
106
114
|
# ===== Creating a Rio that refers to a clone of your programs stderr.
|
107
115
|
#
|
108
116
|
# <tt>rio(?=)</tt> (mnemonic: '-' refers to fileno 1, so '=' refers to fileno 2)
|
109
117
|
#
|
118
|
+
# <tt>rio(:stderr)</tt>
|
119
|
+
#
|
110
120
|
# ===== Creating a Rio that refers to an arbitrary IO object.
|
111
121
|
#
|
112
122
|
# an_io = ::File.new('afile')
|
@@ -114,7 +124,9 @@ module RIO
|
|
114
124
|
#
|
115
125
|
# ===== Creating a Rio that refers to a file descriptor
|
116
126
|
#
|
117
|
-
# <tt>rio(?#,
|
127
|
+
# <tt>rio(?#,file_descriptor)</tt> (mnemonic: a file descriptor is a number '#')
|
128
|
+
#
|
129
|
+
# <tt>rio(:fd,file_descriptor)</tt>
|
118
130
|
#
|
119
131
|
# an_io = ::File.new('afile')
|
120
132
|
# fnum = an_io.fileno
|
@@ -123,15 +135,33 @@ module RIO
|
|
123
135
|
# ===== Creating a Rio that refers to a StringIO object
|
124
136
|
#
|
125
137
|
# <tt>rio(?")</tt> (mnemonic: '"' surrounds strings)
|
138
|
+
#
|
139
|
+
# <tt>rio(:strio)</tt>
|
140
|
+
#
|
141
|
+
# Alpha note: Should :strio be changed to :stringio, or even :string.
|
142
|
+
# Should more than one be allowed? I am leaning toward :string
|
143
|
+
#
|
126
144
|
# * create a Rio that refers to a string that it creates
|
127
145
|
# rio(?")
|
128
146
|
# * create a Rio that refers to a string of your choosing
|
129
147
|
# astring = ""
|
130
148
|
# rio(?",astring)
|
131
149
|
#
|
132
|
-
# ===== Creating a Rio that refers to a
|
150
|
+
# ===== Creating a Rio that refers to a temporary object
|
151
|
+
#
|
152
|
+
# To create a temporary object that will become a file (Tempfile)
|
153
|
+
# or a temporary directory, depending on how it is used.
|
133
154
|
#
|
134
155
|
# <tt>rio(??)</tt> (mnemonic: '?' you don't know its name)
|
156
|
+
#
|
157
|
+
# <tt>rio(:temp)</tt>
|
158
|
+
#
|
159
|
+
# The following are also supported, to specify file or directory
|
160
|
+
#
|
161
|
+
# <tt>rio(:tempfile)</tt>
|
162
|
+
#
|
163
|
+
# <tt>rio(:tempdir)</tt>
|
164
|
+
#
|
135
165
|
# rio(??)
|
136
166
|
# rio(??,basename='rio',tmpdir=Dir::tmpdir)
|
137
167
|
#
|
@@ -145,8 +175,6 @@ module RIO
|
|
145
175
|
# or just write to it.
|
146
176
|
#
|
147
177
|
# To force it to become a directory:
|
148
|
-
# rio(??).dir
|
149
|
-
# or
|
150
178
|
# rio(??).mkdir
|
151
179
|
# or
|
152
180
|
# rio(??).chdir
|
@@ -154,19 +182,22 @@ module RIO
|
|
154
182
|
#
|
155
183
|
# ===== Creating a Rio that refers to an arbitrary TCPSocket
|
156
184
|
#
|
157
|
-
#
|
158
|
-
#
|
159
|
-
#
|
185
|
+
# <tt>rio('tcp:',hostname,port)</tt>
|
186
|
+
#
|
187
|
+
# <tt>rio('tcp://hostname:port')</tt>
|
188
|
+
#
|
189
|
+
# <tt>rio(:tcp,hostname,port)</tt>
|
160
190
|
#
|
161
191
|
# ===== Creating a Rio that runs an external program and connects to its stdin and stdout
|
162
192
|
#
|
163
193
|
# <tt>rio(?-,cmd)</tt> (mnemonic: '-' is used by some Unix programs to specify stdin or stdout in place of a file)
|
164
194
|
#
|
165
|
-
# or
|
166
|
-
#
|
167
195
|
# <tt>rio(?`,cmd)</tt> (mnemonic: '`' (backtick) runs an external program in ruby)
|
168
196
|
#
|
197
|
+
# <tt>rio(:cmdio,cmd)</tt>
|
198
|
+
#
|
169
199
|
# This is Rio's interface to IO#popen
|
200
|
+
#
|
170
201
|
def rio(*args,&block) # :yields: self
|
171
202
|
Rio.rio(*args,&block)
|
172
203
|
end
|