class BqGuess::Guesser

Attributes

record[R]

Public Class Methods

guess(record) click to toggle source
# File lib/bq_guess/guesser.rb, line 17
def guess(record)
  new(record).guess
end
guess_records(records) click to toggle source
# File lib/bq_guess/guesser.rb, line 11
def guess_records(records)
  records[1..-1].each_with_object(guess(records.first)) do |record, schema|
    schema.merge!(guess(record))
  end
end
new(record) click to toggle source
# File lib/bq_guess/guesser.rb, line 22
def initialize(record)
  @record = record
end

Public Instance Methods

guess() click to toggle source
# File lib/bq_guess/guesser.rb, line 26
def guess
  record.each_with_object(Schema.new) do |(key, value), schema|
    schema[key] = guess_field(key, value)
  end
end

Private Instance Methods

guess_field(key, value) click to toggle source
# File lib/bq_guess/guesser.rb, line 34
def guess_field(key, value)
  case value
  when TrueClass, FalseClass
    Fields::Boolean.new(key)
  when Float
    Fields::Float.new(key)
  when Integer
    Fields::Integer.new(key)
  when NilClass
    Fields::Null.new(key)
  when Hash
    Fields::Record.new(key, self.class.guess(value))
  when String
    Fields::String.new(key)
  when Array
    guess_field(key, value.first).tap(&:repeated!)
  end
end