tee 0.0.2 → 0.0.3
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/lib/tee.rb +59 -51
- data/spec/tee_spec.rb +27 -0
- metadata +7 -7
data/lib/tee.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A class like tee(1)
|
2
2
|
class Tee
|
3
3
|
# @return [String]
|
4
|
-
VERSION = '0.0.
|
4
|
+
VERSION = '0.0.3'
|
5
5
|
|
6
6
|
class << self
|
7
7
|
# @macro new
|
@@ -83,8 +83,7 @@ class Tee
|
|
83
83
|
# @param obj [Object]
|
84
84
|
# @return [self]
|
85
85
|
def <<(obj)
|
86
|
-
each_ios_and_stdout
|
87
|
-
self
|
86
|
+
each_ios_and_stdout(obj, &:<<)
|
88
87
|
end
|
89
88
|
|
90
89
|
# Closes all ios except stdout
|
@@ -107,7 +106,25 @@ class Tee
|
|
107
106
|
# @return [self]
|
108
107
|
def flush
|
109
108
|
each_ios_and_stdout(&:flush)
|
110
|
-
|
109
|
+
end
|
110
|
+
|
111
|
+
# Delegates #print to ios
|
112
|
+
#
|
113
|
+
# @param obj [Object]
|
114
|
+
# @return [nil]
|
115
|
+
def print(*obj)
|
116
|
+
each_ios_and_stdout(*obj, &:print)
|
117
|
+
nil
|
118
|
+
end
|
119
|
+
|
120
|
+
# Delegates #printf to ios
|
121
|
+
#
|
122
|
+
# @param format [String]
|
123
|
+
# @param obj [Object]
|
124
|
+
# @return [nil]
|
125
|
+
def printf(format, *obj)
|
126
|
+
each_ios_and_stdout(format, *obj, &:printf)
|
127
|
+
nil
|
111
128
|
end
|
112
129
|
|
113
130
|
# Delegates #putc to ios
|
@@ -116,10 +133,27 @@ class Tee
|
|
116
133
|
# @return [Fixnum]
|
117
134
|
# @return [String]
|
118
135
|
def putc(char)
|
119
|
-
each_ios_and_stdout
|
136
|
+
each_ios_and_stdout(char, &:putc)
|
120
137
|
char
|
121
138
|
end
|
122
139
|
|
140
|
+
# Delegates #puts to ios
|
141
|
+
#
|
142
|
+
# @param obj [Object]
|
143
|
+
# @return [nil]
|
144
|
+
def puts(*obj)
|
145
|
+
each_ios_and_stdout(*obj, &:puts)
|
146
|
+
nil
|
147
|
+
end
|
148
|
+
|
149
|
+
# Delegates #syswrite to ios
|
150
|
+
#
|
151
|
+
# @param string [String]
|
152
|
+
# @return [Array<Integer>]
|
153
|
+
def syswrite(string)
|
154
|
+
each_ios_and_stdout(string).map(&:syswrite)
|
155
|
+
end
|
156
|
+
|
123
157
|
# Returns self
|
124
158
|
#
|
125
159
|
# @return [self]
|
@@ -135,71 +169,45 @@ class Tee
|
|
135
169
|
end
|
136
170
|
alias isatty tty?
|
137
171
|
|
138
|
-
# @method print(obj, ...)
|
139
|
-
# Delegates #print to ios
|
140
|
-
# @param obj [Object]
|
141
|
-
# @return [nil]
|
142
|
-
|
143
|
-
# @method printf(format[, obj, ...])
|
144
|
-
# Delegates #printf to ios
|
145
|
-
# @param format [String]
|
146
|
-
# @param obj [Object]
|
147
|
-
# @return [nil]
|
148
|
-
|
149
|
-
# @method puts(obj, ...)
|
150
|
-
# Delegates #puts to ios
|
151
|
-
# @param obj [Object]
|
152
|
-
# @return [nil]
|
153
|
-
%w( print printf puts ).each do |method|
|
154
|
-
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
155
|
-
def #{method}(*args)
|
156
|
-
each_ios_and_stdout { |io| io.#{method}(*args) }
|
157
|
-
nil
|
158
|
-
end
|
159
|
-
EOS
|
160
|
-
end
|
161
|
-
|
162
|
-
# @method syswrite(string)
|
163
|
-
# Delegates #syswrite to ios
|
164
|
-
# @param string [String]
|
165
|
-
# @return [Array<Integer>]
|
166
|
-
|
167
|
-
# @method write(string)
|
168
172
|
# Delegates #write to ios
|
173
|
+
#
|
169
174
|
# @param string [String]
|
170
175
|
# @return [Array<Integer>]
|
176
|
+
def write(string)
|
177
|
+
each_ios_and_stdout(string).map(&:write)
|
178
|
+
end
|
171
179
|
|
172
|
-
# @method write_nonblock(string)
|
173
180
|
# Delegates #write_nonblock to ios
|
181
|
+
#
|
174
182
|
# @param string [String]
|
175
183
|
# @return [Array<Integer>]
|
176
|
-
|
177
|
-
|
178
|
-
def #{method}(string)
|
179
|
-
each_ios_and_stdout.map { |io| io.#{method}(string) }
|
180
|
-
end
|
181
|
-
EOS
|
184
|
+
def write_nonblock(string)
|
185
|
+
each_ios_and_stdout(string).map(&:write_nonblock)
|
182
186
|
end
|
183
187
|
|
184
188
|
private
|
185
189
|
|
186
|
-
|
187
|
-
|
190
|
+
# @return [self]
|
191
|
+
def each_ios(*args, &block)
|
192
|
+
return to_enum(:each_ios, *args) unless block_given?
|
188
193
|
@ios.each do |io,|
|
189
|
-
yield io
|
194
|
+
yield io, *args
|
190
195
|
end
|
191
196
|
self
|
192
197
|
end
|
193
198
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
yield @stdout if @stdout
|
198
|
-
|
199
|
+
# @return [self]
|
200
|
+
def each_ios_and_stdout(*args, &block)
|
201
|
+
return to_enum(:each_ios_and_stdout, *args) unless block_given?
|
202
|
+
yield @stdout, *args if @stdout
|
203
|
+
each_ios(*args, &block)
|
199
204
|
end
|
200
205
|
|
206
|
+
# @return [nil]
|
201
207
|
def close_ios_opened_by_self(ios = @ios)
|
202
|
-
ios.each
|
208
|
+
ios.each do |io, opened|
|
209
|
+
io.close if opened && !io.closed?
|
210
|
+
end
|
203
211
|
nil
|
204
212
|
end
|
205
213
|
end
|
data/spec/tee_spec.rb
CHANGED
@@ -267,6 +267,30 @@ describe Tee do
|
|
267
267
|
end
|
268
268
|
end
|
269
269
|
|
270
|
+
describe '#closed?' do
|
271
|
+
context 'when tee is opened without argument' do
|
272
|
+
it 'returns true' do
|
273
|
+
tee.closed?.should be_true
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
context 'when tee is opened with an ios' do
|
278
|
+
before { @tee = Tee.open(StringIO.new) }
|
279
|
+
|
280
|
+
it 'returns false' do
|
281
|
+
@tee.closed?.should be_false
|
282
|
+
end
|
283
|
+
|
284
|
+
context 'after closing' do
|
285
|
+
before { @tee.close }
|
286
|
+
|
287
|
+
it 'returns true' do
|
288
|
+
@tee.closed?.should be_true
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
270
294
|
describe '#flush' do
|
271
295
|
it 'returns self' do
|
272
296
|
tee.flush.should be tee
|
@@ -322,6 +346,9 @@ describe Tee do
|
|
322
346
|
end
|
323
347
|
|
324
348
|
%w( syswrite write write_nonblock ).each do |method|
|
349
|
+
# for JRuby 1.6
|
350
|
+
next if method == 'write_nonblock' && !StringIO.method_defined?(method)
|
351
|
+
|
325
352
|
describe "##{method}" do
|
326
353
|
it 'returns Array of the number of bytes written' do
|
327
354
|
string = 'foo'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70107985808900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70107985808900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70107985774440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 2.11.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70107985774440
|
36
36
|
description: A class like tee(1).
|
37
37
|
email: m.ishihara@gmail.com
|
38
38
|
executables: []
|
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
version: '0'
|
71
71
|
segments:
|
72
72
|
- 0
|
73
|
-
hash:
|
73
|
+
hash: 757023539280985321
|
74
74
|
requirements: []
|
75
75
|
rubyforge_project:
|
76
76
|
rubygems_version: 1.8.11
|