class RSpec::Hive::QueryBuilder::RowTransformer

Constants

HIVE_NIL

Attributes

schema[R]
strategy[R]

Public Class Methods

new(schema, missing_column_strategy) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 9
def initialize(schema, missing_column_strategy)
  @schema = schema
  @strategy = missing_column_strategy
end

Public Instance Methods

transform(row) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 14
def transform(row)
  if row.respond_to?(:each_pair)
    mock_hive_row(row)
  elsif row.respond_to?(:each)
    array_row(row)
  else
    raise ArgumentError, 'Array or Hash required!'
  end
end

Private Instance Methods

array_row(row) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 30
def array_row(row)
  size = schema.columns.size
  missing = size - row.size
  if missing.positive?
    row_with_missing_columns(row)
  else
    row
  end
end
mock_hive_row(partial_row) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 50
def mock_hive_row(partial_row)
  symbolized_row = Hash[partial_row.map { |k, v| [k.to_sym, v] }]

  schema.columns.map do |column|
    value = symbolized_row.fetch(column.name.to_sym) { strategy.missing(column) }
    nil_to_null(value)
  end
end
nil_to_null(value) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 59
def nil_to_null(value)
  value.nil? ? HIVE_NIL : value
end
row_with_missing_columns(row) click to toggle source
# File lib/rspec/hive/query_builder/row_transformer.rb, line 40
def row_with_missing_columns(row)
  schema.columns.map.with_index do |column, index|
    if index > row.size
      strategy.missing(column)
    else
      row[index]
    end
  end
end