Sha256: 086d4fc1de71f1b215c1cf0e5ef41c9a7083b954d14788691683f0a5e7330338

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

require 'thor/shell/basic'

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 :output=, :stdout=
    
    def ask(statement, color = nil)
      say "#{statement} ", color
      response = stdin.gets
      if response
        response.strip
      else
        raise "Asked '#{statement}', but input.gets returned nil!"
      end
    end
    
    def initialize(output = "", input = "")
      super()
      new(output, input)
    end
    
    # Reinitializes this Shell with the given input and output streams.
    def new(output="", input="")
      init_stream(:output, output)
      init_stream(:input,  input)
      @stderr = @stdout
      self
    end

    private
    
    def init_stream(which, value)
      if value.kind_of?(String)
        value = StringIO.new(value)
      end
      send("#{which}=", value)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
genspec-0.3.2 lib/genspec/shell.rb
genspec-0.3.1 lib/genspec/shell.rb
genspec-0.3.0 lib/genspec/shell.rb