ztk 1.0.0.rc.0 → 1.0.0.rc.1

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/ztk/spinner.rb CHANGED
@@ -60,16 +60,16 @@ module ZTK
60
60
  options = Base.build_config({
61
61
  :step => 0.1
62
62
  }.merge(options))
63
- options.logger.debug { "options(#{options.send(:table).inspect})" }
63
+ options.ui.logger.debug { "options(#{options.send(:table).inspect})" }
64
64
 
65
- !block_given? and Base.log_and_raise(options.logger, SpinnerError, "You must supply a block!")
65
+ !block_given? and Base.log_and_raise(options.ui.logger, SpinnerError, "You must supply a block!")
66
66
 
67
67
  count = 0
68
68
  spinner = Thread.new do
69
69
  while count do
70
- options.stdout.print(CHARSET[(count += 1) % CHARSET.length])
71
- options.stdout.print("\b")
72
- options.stdout.respond_to?(:flush) and options.stdout.flush
70
+ options.ui.stdout.print(CHARSET[(count += 1) % CHARSET.length])
71
+ options.ui.stdout.print("\b")
72
+ options.ui.stdout.respond_to?(:flush) and options.ui.stdout.flush
73
73
  sleep(options.step)
74
74
  end
75
75
  end
data/lib/ztk/ssh.rb CHANGED
@@ -139,7 +139,7 @@ module ZTK
139
139
  :timeout => 60,
140
140
  :ignore_exit_status => false
141
141
  }.merge(configuration))
142
- config.logger.debug { "config=#{config.send(:table).inspect}" }
142
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
143
143
  end
144
144
 
145
145
  # Starts an SSH session. Can also be used to get the Net::SSH object.
@@ -158,7 +158,7 @@ module ZTK
158
158
 
159
159
  # Close our session gracefully.
160
160
  def close
161
- config.logger.debug { "close" }
161
+ config.ui.logger.debug { "close" }
162
162
  ssh and !ssh.closed? and ssh.close
163
163
  end
164
164
 
@@ -174,8 +174,8 @@ module ZTK
174
174
  # end
175
175
  # ssh.console
176
176
  def console
177
- config.logger.debug { "config=#{config.send(:table).inspect}" }
178
- config.logger.info { "console(#{console_command.inspect})" }
177
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
178
+ config.ui.logger.info { "console(#{console_command.inspect})" }
179
179
 
180
180
  Kernel.exec(console_command)
181
181
  end
@@ -204,9 +204,9 @@ module ZTK
204
204
  def exec(command, options={})
205
205
  options = OpenStruct.new({ :exit_code => 0, :silence => false }.merge(options))
206
206
 
207
- config.logger.debug { "config=#{config.send(:table).inspect}" }
208
- config.logger.debug { "options=#{options.send(:table).inspect}" }
209
- config.logger.info { "exec(#{command.inspect})" }
207
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
208
+ config.ui.logger.debug { "options=#{options.send(:table).inspect}" }
209
+ config.ui.logger.info { "exec(#{command.inspect})" }
210
210
 
211
211
  output = ""
212
212
  exit_code = -1
@@ -220,7 +220,7 @@ module ZTK
220
220
  @ssh = Net::SSH.start(config.host_name, config.user, ssh_options)
221
221
 
222
222
  channel = ssh.open_channel do |chan|
223
- config.logger.debug { "Channel opened." }
223
+ config.ui.logger.debug { "Channel opened." }
224
224
 
225
225
  direct_log(:debug) { log_header("COMMAND") }
226
226
  direct_log(:debug) { "#{command}\n" }
@@ -237,7 +237,7 @@ module ZTK
237
237
  end
238
238
  direct_log(:debug) { data }
239
239
 
240
- config.stdout.print(data) unless options.silence
240
+ config.ui.stdout.print(data) unless options.silence
241
241
  output += data
242
242
  end
243
243
 
@@ -249,7 +249,7 @@ module ZTK
249
249
  end
250
250
  direct_log(:warn) { data }
251
251
 
252
- config.stderr.print(data) unless options.silence
252
+ config.ui.stderr.print(data) unless options.silence
253
253
  output += data
254
254
  end
255
255
 
@@ -262,7 +262,7 @@ module ZTK
262
262
  end
263
263
 
264
264
  ch.on_open_failed do |c, code, desc|
265
- config.logger.fatal { "Open failed! (#{code.inspect} - #{desc.inspect})" }
265
+ config.ui.logger.fatal { "Open failed! (#{code.inspect} - #{desc.inspect})" }
266
266
  end
267
267
 
268
268
  end
@@ -270,7 +270,7 @@ module ZTK
270
270
  channel.wait
271
271
 
272
272
  direct_log(:debug) { log_header("CLOSED") }
273
- config.logger.debug { "Channel closed." }
273
+ config.ui.logger.debug { "Channel closed." }
274
274
  end
275
275
  end
276
276
 
@@ -284,7 +284,7 @@ module ZTK
284
284
  (exit_signal.nil? ? nil : "exit_signal=#{exit_signal} (#{EXIT_SIGNALS[exit_signal]})")
285
285
  ].compact.join(", ")
286
286
 
287
- config.logger.debug { message }
287
+ config.ui.logger.debug { message }
288
288
 
289
289
  if !config.ignore_exit_status && (exit_code != options.exit_code)
290
290
  log_and_raise(SSHError, message)
@@ -308,23 +308,23 @@ module ZTK
308
308
  # remote = File.expand_path(File.join("/tmp", "id_rsa.pub"))
309
309
  # ssh.upload(local, remote)
310
310
  def upload(local, remote)
311
- config.logger.debug { "config=#{config.send(:table).inspect}" }
312
- config.logger.info { "upload(#{local.inspect}, #{remote.inspect})" }
311
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
312
+ config.ui.logger.info { "upload(#{local.inspect}, #{remote.inspect})" }
313
313
 
314
314
  ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
315
315
  @sftp = Net::SFTP.start(config.host_name, config.user, ssh_options)
316
316
  sftp.upload!(local.to_s, remote.to_s) do |event, uploader, *args|
317
317
  case event
318
318
  when :open
319
- config.logger.debug { "upload(#{args[0].local} -> #{args[0].remote})" }
319
+ config.ui.logger.debug { "upload(#{args[0].local} -> #{args[0].remote})" }
320
320
  when :close
321
- config.logger.debug { "close(#{args[0].remote})" }
321
+ config.ui.logger.debug { "close(#{args[0].remote})" }
322
322
  when :mkdir
323
- config.logger.debug { "mkdir(#{args[0]})" }
323
+ config.ui.logger.debug { "mkdir(#{args[0]})" }
324
324
  when :put
325
- config.logger.debug { "put(#{args[0].remote}, size #{args[2].size} bytes, offset #{args[1]})" }
325
+ config.ui.logger.debug { "put(#{args[0].remote}, size #{args[2].size} bytes, offset #{args[1]})" }
326
326
  when :finish
327
- config.logger.debug { "finish" }
327
+ config.ui.logger.debug { "finish" }
328
328
  end
329
329
  end
330
330
  end
@@ -348,23 +348,23 @@ module ZTK
348
348
  # remote = File.expand_path(File.join(ENV["HOME"], ".ssh", "id_rsa.pub"))
349
349
  # ssh.download(remote, local)
350
350
  def download(remote, local)
351
- config.logger.debug { "config=#{config.send(:table).inspect}" }
352
- config.logger.info { "download(#{remote.inspect}, #{local.inspect})" }
351
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
352
+ config.ui.logger.info { "download(#{remote.inspect}, #{local.inspect})" }
353
353
 
354
354
  ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
355
355
  @sftp = Net::SFTP.start(config.host_name, config.user, ssh_options)
356
356
  sftp.download!(remote.to_s, local.to_s) do |event, downloader, *args|
357
357
  case event
358
358
  when :open
359
- config.logger.debug { "download(#{args[0].remote} -> #{args[0].local})" }
359
+ config.ui.logger.debug { "download(#{args[0].remote} -> #{args[0].local})" }
360
360
  when :close
361
- config.logger.debug { "close(#{args[0].local})" }
361
+ config.ui.logger.debug { "close(#{args[0].local})" }
362
362
  when :mkdir
363
- config.logger.debug { "mkdir(#{args[0]})" }
363
+ config.ui.logger.debug { "mkdir(#{args[0]})" }
364
364
  when :get
365
- config.logger.debug { "get(#{args[0].remote}, size #{args[2].size} bytes, offset #{args[1]})" }
365
+ config.ui.logger.debug { "get(#{args[0].remote}, size #{args[2].size} bytes, offset #{args[1]})" }
366
366
  when :finish
367
- config.logger.debug { "finish" }
367
+ config.ui.logger.debug { "finish" }
368
368
  end
369
369
  end
370
370
  end
@@ -389,7 +389,7 @@ module ZTK
389
389
  command << [ "-o", "ProxyCommand=\"#{proxy_command}\"" ] if config.proxy_host_name
390
390
  command << "#{config.user}@#{config.host_name}"
391
391
  command = command.flatten.compact.join(" ")
392
- config.logger.debug { "console_command(#{command.inspect})" }
392
+ config.ui.logger.debug { "console_command(#{command.inspect})" }
393
393
  command
394
394
  end
395
395
 
@@ -410,7 +410,7 @@ module ZTK
410
410
  command << "#{config.proxy_user}@#{config.proxy_host_name}"
411
411
  command << "nc %h %p"
412
412
  command = command.flatten.compact.join(" ")
413
- config.logger.debug { "proxy_command(#{command.inspect})" }
413
+ config.ui.logger.debug { "proxy_command(#{command.inspect})" }
414
414
  command
415
415
  end
416
416
 
@@ -441,7 +441,7 @@ module ZTK
441
441
  # This is not plainly documented on the Net::SSH config class.
442
442
  options.merge!(:password => config.password) if config.password
443
443
 
444
- config.logger.debug { "ssh_options(#{options.inspect})" }
444
+ config.ui.logger.debug { "ssh_options(#{options.inspect})" }
445
445
  options
446
446
  end
447
447
 
@@ -94,7 +94,7 @@ module ZTK
94
94
  :timeout => 5,
95
95
  :wait => 60
96
96
  }.merge(configuration))
97
- config.logger.debug { "config=#{config.send(:table).inspect}" }
97
+ config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
98
98
  end
99
99
 
100
100
  # Check to see if socket on the host and port specified is ready. This
@@ -110,15 +110,15 @@ module ZTK
110
110
  socket = TCPSocket.new(config.host, config.port)
111
111
 
112
112
  if config.data.nil?
113
- config.logger.debug { "read(#{config.host}:#{config.port})" }
113
+ config.ui.logger.debug { "read(#{config.host}:#{config.port})" }
114
114
  ((IO.select([socket], nil, nil, config.timeout) && socket.gets) ? true : false)
115
115
  else
116
- config.logger.debug { "write(#{config.host}:#{config.port}, #{config.data.size} bytes)" }
116
+ config.ui.logger.debug { "write(#{config.host}:#{config.port}, #{config.data.size} bytes)" }
117
117
  ((IO.select(nil, [socket], nil, config.timeout) && socket.write(config.data)) ? true : false)
118
118
  end
119
119
 
120
120
  rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EHOSTUNREACH => e
121
- config.logger.debug { "#{config.host}:#{config.port} - #{e.message}" }
121
+ config.ui.logger.debug { "#{config.host}:#{config.port} - #{e.message}" }
122
122
  false
123
123
  ensure
124
124
  (socket && socket.close)
@@ -131,16 +131,16 @@ module ZTK
131
131
  # @return [Boolean] Returns true or false depending on weither the socket
132
132
  # became ready or not.
133
133
  def wait
134
- config.logger.debug { "Waiting for socket to become available; timeout after #{config.wait} seconds." }
134
+ config.ui.logger.debug { "Waiting for socket to become available; timeout after #{config.wait} seconds." }
135
135
  Timeout.timeout(config.wait) do
136
136
  until ready?
137
- config.logger.debug { "Sleeping 1 second." }
137
+ config.ui.logger.debug { "Sleeping 1 second." }
138
138
  sleep(1)
139
139
  end
140
140
  end
141
141
  true
142
142
  rescue Timeout::Error => e
143
- config.logger.warn { "socket(#{config.host}:#{config.port}) timeout!" }
143
+ config.ui.logger.warn { "socket(#{config.host}:#{config.port}) timeout!" }
144
144
  false
145
145
  end
146
146
 
data/lib/ztk/ui.rb CHANGED
@@ -22,24 +22,31 @@ require "base64"
22
22
 
23
23
  module ZTK
24
24
 
25
- # ZTK::Ui Error Class
25
+ # ZTK::UI Error Class
26
26
  #
27
27
  # @author Zachary Patten <zachary@jovelabs.net>
28
28
  class UIError < Error; end
29
29
 
30
+ # ZTK UI Wrapper Class
31
+ #
30
32
  # @author Zachary Patten <zachary@jovelabs.net>
31
33
  class UI < ZTK::Base
32
34
 
33
35
  attr_accessor :stdout, :stderr, :stdin, :logger
34
36
 
35
37
  def initialize(configuration={})
36
- super({
37
- :stdout => $stdout,
38
- :stderr => $stderr,
39
- :stdin => $stdin,
40
- :logger => $logger
41
- }.merge(configuration))
42
- config.logger.debug { "config=#{config.send(:table).inspect}" }
38
+ defined?(Rails) and (rails_logger = Rails.logger)
39
+ null_logger = (::ZTK::Logger.new("/dev/null") rescue ::Logger.new("/dev/null"))
40
+
41
+ @stdout = (configuration[:stdout] || $stdout || STDOUT)
42
+ @stderr = (configuration[:stderr] || $stderr || STDERR)
43
+ @stdin = (configuration[:stdin] || $stdin || STDIN)
44
+ @logger = (configuration[:logger] || $logger || rails_logger || null_logger)
45
+
46
+ (@stdout && @stdout.respond_to?(:sync=)) and @stdout.sync = true
47
+ (@stderr && @stderr.respond_to?(:sync=)) and @stderr.sync = true
48
+ (@stdin && @stdin.respond_to?(:sync=)) and @stdin.sync = true
49
+ (@logger && @logger.respond_to?(:sync=)) and @logger.sync = true
43
50
  end
44
51
 
45
52
  end
data/lib/ztk/version.rb CHANGED
@@ -21,6 +21,6 @@
21
21
  module ZTK
22
22
 
23
23
  # ZTK Version String
24
- VERSION = "1.0.0.rc.0"
24
+ VERSION = "1.0.0.rc.1"
25
25
 
26
26
  end
data/spec/spec_helper.rb CHANGED
@@ -32,10 +32,28 @@ ENV['LOG_LEVEL'] = "DEBUG"
32
32
 
33
33
  WAIT_SMALL = 3
34
34
 
35
- $logger = ZTK::Logger.new(File.join("/tmp", "test.log"))
35
+ RSpec.configure do |config|
36
+
37
+ config.before(:all) do
38
+ $stdout = File.open("/dev/null", "w")
39
+ $stderr = File.open("/dev/null", "w")
40
+ $stdin = File.open("/dev/null", "r")
41
+ $logger = ZTK::Logger.new(File.join("/tmp", "test.log"))
42
+
43
+ $logger.info { "=" * 80 }
44
+ $logger.info { "STARTING ZTK v#{ZTK::VERSION} TEST RUN @ #{Time.now.utc}" }
45
+ $logger.info { "=" * 80 }
46
+ end
47
+
48
+ config.before(:each) do
49
+ $ui = ZTK::UI.new(
50
+ :stdout => StringIO.new,
51
+ :stderr => StringIO.new,
52
+ :stdin => StringIO.new
53
+ )
54
+ end
55
+
56
+ end
36
57
 
37
- $logger.info { "=" * 80 }
38
- $logger.info { "STARTING ZTK v#{ZTK::VERSION} TEST RUN @ #{Time.now.utc}" }
39
- $logger.info { "=" * 80 }
40
58
 
41
59
  ################################################################################
@@ -24,42 +24,12 @@ describe ZTK::Background do
24
24
 
25
25
  subject { ZTK::Background.new }
26
26
 
27
- before(:all) do
28
- $stdout = File.open("/dev/null", "w")
29
- $stderr = File.open("/dev/null", "w")
30
- $stdin = File.open("/dev/null", "r")
31
- end
32
-
33
27
  describe "class" do
34
28
 
35
29
  it "should be an instance of ZTK::Background" do
36
30
  subject.should be_an_instance_of ZTK::Background
37
31
  end
38
32
 
39
- describe "default config" do
40
-
41
- it "should use $stdout as the default" do
42
- subject.config.stdout.should be_a_kind_of $stdout.class
43
- subject.config.stdout.should == $stdout
44
- end
45
-
46
- it "should use $stderr as the default" do
47
- subject.config.stderr.should be_a_kind_of $stderr.class
48
- subject.config.stderr.should == $stderr
49
- end
50
-
51
- it "should use $stdin as the default" do
52
- subject.config.stdin.should be_a_kind_of $stdin.class
53
- subject.config.stdin.should == $stdin
54
- end
55
-
56
- it "should use $logger as the default" do
57
- subject.config.logger.should be_a_kind_of ZTK::Logger
58
- subject.config.logger.should == $logger
59
- end
60
-
61
- end
62
-
63
33
  end
64
34
 
65
35
  describe "behaviour" do
@@ -24,12 +24,6 @@ describe ZTK::Base do
24
24
 
25
25
  subject { ZTK::Base }
26
26
 
27
- before(:all) do
28
- $stdout = File.open("/dev/null", "w")
29
- $stderr = File.open("/dev/null", "w")
30
- $stdin = File.open("/dev/null", "r")
31
- end
32
-
33
27
  describe "class" do
34
28
 
35
29
  it "should be ZTK::Base" do
@@ -24,12 +24,6 @@ describe ZTK::Benchmark do
24
24
 
25
25
  subject { ZTK::Benchmark }
26
26
 
27
- before(:all) do
28
- $stdout = File.open("/dev/null", "w")
29
- $stderr = File.open("/dev/null", "w")
30
- $stdin = File.open("/dev/null", "r")
31
- end
32
-
33
27
  describe "class" do
34
28
 
35
29
  it "should be ZTK::Benchmark" do
@@ -54,33 +48,29 @@ describe ZTK::Benchmark do
54
48
  end
55
49
 
56
50
  it "should throw an exception if executed with a message but without a mark" do
57
- stdout = StringIO.new
58
51
  lambda {
59
- ZTK::Benchmark.bench(:stdout => stdout, :message => "Hello World")
52
+ ZTK::Benchmark.bench(:ui => $ui, :message => "Hello World")
60
53
  }.should raise_error ZTK::BenchmarkError
61
54
  end
62
55
 
63
56
  it "should throw an exception if executed without a message but with a mark" do
64
- stdout = StringIO.new
65
57
  lambda {
66
- ZTK::Benchmark.bench(:stdout => stdout, :mark => "%0.4f")
58
+ ZTK::Benchmark.bench(:ui => $ui, :mark => "%0.4f")
67
59
  }.should raise_error ZTK::BenchmarkError
68
60
  end
69
61
 
70
62
  it "should not write to STDOUT if not given a message or mark" do
71
- stdout = StringIO.new
72
- ZTK::Benchmark.bench(:stdout => stdout) do
63
+ ZTK::Benchmark.bench(:ui => $ui) do
73
64
  sleep(0.1)
74
65
  end
75
- stdout.size.should == 0
66
+ $ui.stdout.size.should == 0
76
67
  end
77
68
 
78
69
  it "should write to STDOUT if given a message and mark" do
79
- stdout = StringIO.new
80
- ZTK::Benchmark.bench(:stdout => stdout, :message => "Hello World", :mark => "%0.4f") do
70
+ ZTK::Benchmark.bench(:ui => $ui, :message => "Hello World", :mark => "%0.4f") do
81
71
  sleep(0.1)
82
72
  end
83
- stdout.size.should > 0
73
+ $ui.stdout.size.should > 0
84
74
  end
85
75
 
86
76
  end
@@ -24,42 +24,12 @@ describe ZTK::Command do
24
24
 
25
25
  subject { ZTK::Command.new }
26
26
 
27
- before(:all) do
28
- $stdout = File.open("/dev/null", "w")
29
- $stderr = File.open("/dev/null", "w")
30
- $stdin = File.open("/dev/null", "r")
31
- end
32
-
33
27
  describe "class" do
34
28
 
35
29
  it "should be an instance of ZTK::Command" do
36
30
  subject.should be_an_instance_of ZTK::Command
37
31
  end
38
32
 
39
- describe "default config" do
40
-
41
- it "should use $stdout as the default" do
42
- subject.config.stdout.should be_a_kind_of $stdout.class
43
- subject.config.stdout.should == $stdout
44
- end
45
-
46
- it "should use $stderr as the default" do
47
- subject.config.stderr.should be_a_kind_of $stderr.class
48
- subject.config.stderr.should == $stderr
49
- end
50
-
51
- it "should use $stdin as the default" do
52
- subject.config.stdin.should be_a_kind_of $stdin.class
53
- subject.config.stdin.should == $stdin
54
- end
55
-
56
- it "should use $logger as the default" do
57
- subject.config.logger.should be_a_kind_of ZTK::Logger
58
- subject.config.logger.should == $logger
59
- end
60
-
61
- end
62
-
63
33
  end
64
34
 
65
35
  describe "behaviour" do
@@ -67,21 +37,19 @@ describe ZTK::Command do
67
37
  describe "execute" do
68
38
 
69
39
  it "should be able to execute the command \"hostname -f\"" do
70
- stdout = StringIO.new
71
40
  subject.config do |config|
72
- config.stdout = stdout
41
+ config.ui = $ui
73
42
  end
74
43
  hostname = %x(hostname -f).chomp
75
44
  status = subject.exec("hostname -f")
76
45
  status.exit_code.should == 0
77
- stdout.rewind
78
- stdout.read.chomp.should == hostname
46
+ $ui.stdout.rewind
47
+ $ui.stdout.read.chomp.should == hostname
79
48
  end
80
49
 
81
50
  it "should timeout after the period specified" do
82
- stdout = StringIO.new
83
51
  subject.config do |config|
84
- config.stdout = stdout
52
+ config.ui = $ui
85
53
  config.timeout = WAIT_SMALL
86
54
  end
87
55
  hostname = %x(hostname -f).chomp
@@ -89,26 +57,23 @@ describe ZTK::Command do
89
57
  end
90
58
 
91
59
  it "should throw an exception if the exit status is not as expected" do
92
- stdout = StringIO.new
93
60
  subject.config do |config|
94
- config.stdout = stdout
61
+ config.ui = $ui
95
62
  end
96
63
  lambda { subject.exec("/bin/bash -c 'exit 64'") }.should raise_error ZTK::CommandError
97
64
  end
98
65
 
99
66
  it "should return a instance of an OpenStruct object" do
100
- stdout = StringIO.new
101
67
  subject.config do |config|
102
- config.stdout = stdout
68
+ config.ui = $ui
103
69
  end
104
70
  result = subject.exec(%q{echo "Hello World"})
105
71
  result.should be_an_instance_of OpenStruct
106
72
  end
107
73
 
108
74
  it "should return the exit code" do
109
- stdout = StringIO.new
110
75
  subject.config do |config|
111
- config.stdout = stdout
76
+ config.ui = $ui
112
77
  end
113
78
  data = 64
114
79
 
@@ -117,9 +82,8 @@ describe ZTK::Command do
117
82
  end
118
83
 
119
84
  it "should return the output" do
120
- stdout = StringIO.new
121
85
  subject.config do |config|
122
- config.stdout = stdout
86
+ config.ui = $ui
123
87
  end
124
88
  data = "Hello World @ #{Time.now.utc}"
125
89
 
@@ -128,9 +92,8 @@ describe ZTK::Command do
128
92
  end
129
93
 
130
94
  it "should allow us to change the expected exit code" do
131
- stdout = StringIO.new
132
95
  subject.config do |config|
133
- config.stdout = stdout
96
+ config.ui = $ui
134
97
  end
135
98
  data = 32
136
99
  result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
@@ -139,25 +102,21 @@ describe ZTK::Command do
139
102
  describe "stdout" do
140
103
 
141
104
  it "should capture STDOUT and send it to the appropriate pipe" do
142
- stdout, stderr, stdin = StringIO.new, StringIO.new, StringIO.new
143
-
144
105
  subject.config do |config|
145
- config.stdout = stdout
146
- config.stderr = stderr
147
- config.stdin = stdin
106
+ config.ui = $ui
148
107
  end
149
108
  data = "Hello World @ #{Time.now.utc}"
150
109
 
151
110
  subject.exec(%Q{echo "#{data}" -f >&1})
152
111
 
153
- stdout.rewind
154
- stdout.read.match(data).should_not be nil
112
+ $ui.stdout.rewind
113
+ $ui.stdout.read.match(data).should_not be nil
155
114
 
156
- stderr.rewind
157
- stderr.read.match(data).should be nil
115
+ $ui.stderr.rewind
116
+ $ui.stderr.read.match(data).should be nil
158
117
 
159
- stdin.rewind
160
- stdin.read.match(data).should be nil
118
+ $ui.stdin.rewind
119
+ $ui.stdin.read.match(data).should be nil
161
120
  end
162
121
 
163
122
  end
@@ -165,25 +124,21 @@ describe ZTK::Command do
165
124
  describe "stderr" do
166
125
 
167
126
  it "should capture STDERR and send it to the appropriate pipe" do
168
- stdout, stderr, stdin = StringIO.new, StringIO.new, StringIO.new
169
-
170
127
  subject.config do |config|
171
- config.stdout = stdout
172
- config.stderr = stderr
173
- config.stdin = stdin
128
+ config.ui = $ui
174
129
  end
175
130
  data = "Hello World @ #{Time.now.utc}"
176
131
 
177
132
  subject.exec(%Q{echo "#{data}" -f >&2})
178
133
 
179
- stdout.rewind
180
- stdout.read.match(data).should be nil
134
+ $ui.stdout.rewind
135
+ $ui.stdout.read.match(data).should be nil
181
136
 
182
- stderr.rewind
183
- stderr.read.match(data).should_not be nil
137
+ $ui.stderr.rewind
138
+ $ui.stderr.read.match(data).should_not be nil
184
139
 
185
- stdin.rewind
186
- stdin.read.match(data).should be nil
140
+ $ui.stdin.rewind
141
+ $ui.stdin.read.match(data).should be nil
187
142
  end
188
143
  end
189
144