class Basic101::InputReader

Constants

EOS

Public Class Methods

new(input) click to toggle source
# File lib/basic101/input_reader.rb, line 7
def initialize(input)
  line = input.read_line
  line += ',' unless line.empty?
  line += EOS
  @columns = line.parse_csv
rescue CSV::MalformedCSVError
  raise BadInputFormatError, 'Invalid format'
end

Public Instance Methods

read_numeric() click to toggle source
# File lib/basic101/input_reader.rb, line 26
def read_numeric
  column = next_column
  unless column =~ /^[+-]?\d+/
    raise BadInputFormatError, "Not numeric: #{column.inspect}"
  end
  column.to_f
end
read_string() click to toggle source
# File lib/basic101/input_reader.rb, line 16
def read_string
  end_of_input_error if @columns.empty?
  value = @columns.shift
  if value == EOS
    ''
  else
    value || ''
  end
end

Private Instance Methods

end_of_input_error() click to toggle source
# File lib/basic101/input_reader.rb, line 51
def end_of_input_error
  raise TooFewInputItemsError, "Too few items"
end
next_column() click to toggle source
# File lib/basic101/input_reader.rb, line 36
def next_column
  raise_error_if_eos
  @columns.shift || ''
end
raise_error_if_eos() click to toggle source
# File lib/basic101/input_reader.rb, line 41
def raise_error_if_eos
  if @columns.first == EOS
    end_of_input_error
  end
end