class Bbiff::Executable::LineIndicator

Public Class Methods

new(out = STDOUT) click to toggle source
# File lib/bbiff/executable.rb, line 10
def initialize(out = STDOUT)
  @width = 0
  @out = out
  @closed = false
end

Public Instance Methods

clear() click to toggle source
# File lib/bbiff/executable.rb, line 40
def clear
  raise_if_closed!

  @out.print "\r#{' ' * @width}\r"
  @width = 0
end
close() click to toggle source
# File lib/bbiff/executable.rb, line 60
def close
  if @closed
    raise 'already closed LineIndicator'
  else
    @out.puts if @width > 0
    @closed = true
  end
end
newline() click to toggle source
# File lib/bbiff/executable.rb, line 33
def newline
  raise_if_closed!

  @out.print "\n"
  @width = 0
end
puts(str) click to toggle source
# File lib/bbiff/executable.rb, line 47
def puts(str)
  raise_if_closed!

  set_line(str)
  newline
end
raise_if_closed!() click to toggle source
# File lib/bbiff/executable.rb, line 54
def raise_if_closed!
  if @closed
    raise 'Closed LineIndicator'
  end
end
set_line(str) click to toggle source
# File lib/bbiff/executable.rb, line 16
def set_line(str)
  raise_if_closed!

  clear
  if str[-1] == "\n"
    if str.rindex("\n") != str.size-1 || str.index("\n") < str.rindex("\n")
      raise 'multiline'
    end

    @out.print str
    @width = 0
  else
    @out.print str
    @width = mbswidth(str)
  end
end

Private Instance Methods

mbswidth(str) click to toggle source
# File lib/bbiff/executable.rb, line 71
def mbswidth(str)
  Unicode::DisplayWidth.of(str)
end