class Basic101::Output

Constants

COLUMNS_PER_TAB

Public Class Methods

new(file = $stdout) click to toggle source
# File lib/basic101/output.rb, line 7
def initialize(file = $stdout)
  @file = file
  @chars_on_line = 0
  @transcript = NullTranscript.new
end

Public Instance Methods

echo(s) click to toggle source
# File lib/basic101/output.rb, line 25
def echo(s)
  write_string s, false
end
isatty() click to toggle source
# File lib/basic101/output.rb, line 36
def isatty
  @file.isatty
end
print(s) click to toggle source
puts(s = '') click to toggle source
# File lib/basic101/output.rb, line 17
def puts(s = '')
  print s.to_s + "\n"
end
tab_to(column) click to toggle source
# File lib/basic101/output.rb, line 29
def tab_to(column)
  column = [0, column].max
  spaces_needed = -> {column - @chars_on_line}
  return if spaces_needed.call < 0
  print ' ' * spaces_needed.call
end
transcript=(transcript) click to toggle source
# File lib/basic101/output.rb, line 13
def transcript=(transcript)
  @transcript = transcript
end

Private Instance Methods

flush() click to toggle source
# File lib/basic101/output.rb, line 68
def flush
  return if isatty
  @file.flush
end
write_char(c, transcribe) click to toggle source
# File lib/basic101/output.rb, line 62
def write_char(c, transcribe)
  @transcript.save_output(c) if transcribe
  @file.print c
  @chars_on_line += 1 if c =~ /[[:print:]]/
end
write_string(s, transcribe) click to toggle source
# File lib/basic101/output.rb, line 44
def write_string(s, transcribe)
  s.chars.each do |c|
    case c
    when "\n"
      write_char c, transcribe
      @chars_on_line = 0
    when "\t"
      write_char ' ', transcribe
      while @chars_on_line % COLUMNS_PER_TAB > 0
        write_char ' ', transcribe
      end
    else
      write_char c, transcribe
    end
  end
  flush
end