module Rover

Constants

VERSION

Public Class Methods

parse_csv(str, types: nil, **options) click to toggle source
# File lib/rover.rb, line 17
def parse_csv(str, types: nil, **options)
  require "csv"
  csv_to_df(CSV.parse(str, **csv_options(options)), types: types, headers: options[:headers])
end
read_csv(path, types: nil, **options) click to toggle source
# File lib/rover.rb, line 12
def read_csv(path, types: nil, **options)
  require "csv"
  csv_to_df(CSV.read(path, **csv_options(options)), types: types, headers: options[:headers])
end

Private Class Methods

csv_options(options) click to toggle source

TODO use date converter

# File lib/rover.rb, line 25
def csv_options(options)
  options = {headers: true, converters: :numeric}.merge(options)
  raise ArgumentError, "Must specify headers" unless options[:headers]
  options
end
csv_to_df(table, types: nil, headers: nil) click to toggle source
# File lib/rover.rb, line 31
def csv_to_df(table, types: nil, headers: nil)
  if headers && headers.size < table.headers.size
    raise ArgumentError, "Expected #{table.headers.size} headers, got #{headers.size}"
  end

  table.by_col!
  data = {}
  table.each do |k, v|
    data[k] = v
  end
  DataFrame.new(data, types: types)
end