Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
namara / lib / query.rb
Size: Mime:
require_relative 'rpc/query/query_twirp'

class Namara

  def query(query_statement)
    payload = { statement: query_statement }

    response = rpc_request(query_client) do |client|
      client.query(payload, rpc_headers)
    end

    build_result_set(response.data)
  end

  private

  def build_result_set(data)
    ObjectToHash.deep_ostruct({
      metadata: build_metadata_set(data.column_metadata),
      rows: build_data_set(data.rows, data.column_metadata)
    })
  end

  # Converts each row to a hash with column names as keys and cells as values.
  def build_data_set(rows, column_metadata)
    rows.map do |r|
      row = {}
      r.cells.each_with_index { |c, i| row[column_metadata[i].key] = c }
      row
    end
  end

  # Takes an array of metadata hashes and maps each column name to
  # the metadata hash.
  def build_metadata_set(column_metadata)
    metadata = {}
    column_metadata.each { |m| metadata[m.key] = m }
    metadata
  end

  def query_client
    @query_client ||= Query::QueryServiceClient.new(api_url)
  end
end