Sha256: 9233c6003bb6a961786943435c355f51ccf5285ba9d8ed5e762ffc6d59998c47

Contents?: true

Size: 994 Bytes

Versions: 3

Compression:

Stored size: 994 Bytes

Contents

# frozen_string_literal: true

module Basic101

  class InputReader

    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

    def read_string
      end_of_input_error if @columns.empty?
      value = @columns.shift
      if value == EOS
        ''
      else
        value || ''
      end
    end

    def read_numeric
      column = next_column
      unless column =~ /^[+-]?\d+/
        raise BadInputFormatError, "Not numeric: #{column.inspect}"
      end
      column.to_f
    end

    private

    def next_column
      raise_error_if_eos
      @columns.shift || ''
    end

    def raise_error_if_eos
      if @columns.first == EOS
        end_of_input_error
      end
    end

    private

    EOS = "EOS"

    def end_of_input_error
      raise TooFewInputItemsError, "Too few items"
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
basic101-1.0.2 lib/basic101/input_reader.rb
basic101-1.0.1 lib/basic101/input_reader.rb
basic101-1.0.0 lib/basic101/input_reader.rb