lib/genspec/shell.rb in genspec-0.2.1 vs lib/genspec/shell.rb in genspec-0.2.2
- old
+ new
@@ -3,15 +3,23 @@
module GenSpec
# Just like a Thor::Shell::Basic except that input and output are both redirected to
# the specified streams. By default, these are initialized to instances of StringIO.
class Shell < Thor::Shell::Basic
attr_accessor :stdin, :stdout, :stderr
- alias_method :input, :stdin
- alias_method :input=, :stdin=
- alias_method :output, :stdout
+ alias_method :input, :stdin
+ alias_method :input=, :stdin=
+ alias_method :output, :stdout
alias_method :output=, :stdout=
+ Thor::Shell::SHELL_DELEGATED_METHODS.each do |method|
+ eval <<-end_code
+ def #{method}(*args, &block) # def yes?(*args, &block)
+ push_std { super(*args, &block) } # push_std { super(*args, &block) }
+ end # end
+ end_code
+ end
+
def ask(statement, color = nil)
say "#{statement} ", color
response = stdin.gets
if response
response.strip
@@ -32,9 +40,17 @@
@stderr = @stdout
self
end
private
+ def push_std
+ _stderr, _stdout, _stdin = $stderr, $stdout, $stdin
+ $stderr, $stdout, $stdin = stderr, stdout, stdin
+ yield
+ ensure
+ $stderr, $stdout, $stdin = _stderr, _stdout, _stdin
+ end
+
def init_stream(which, value)
if value.kind_of?(String)
value = StringIO.new(value)
end
send("#{which}=", value)
\ No newline at end of file