class DataComApi::Responses::SearchBase

Abstract class

Constants

OFFSET_KEYS

Public Class Methods

new(api_client, received_options) click to toggle source

Options accept 2 special params: :start_at_offset and :end_at_offset which is where the records will be start being fetched from

Calls superclass method DataComApi::Responses::Base::new
# File lib/data-com-api/responses/search_base.rb, line 12
def initialize(api_client, received_options)
  @start_at_offset = 0
  @end_at_offset   = nil

  unless received_options[OFFSET_KEYS[0]].nil?
    @start_at_offset = received_options[OFFSET_KEYS[0]].to_i
  end
  unless received_options[OFFSET_KEYS[1]].nil?
    @end_at_offset = received_options[OFFSET_KEYS[1]].to_i
  end

  @options = received_options.reject { |key| OFFSET_KEYS.include? key.to_sym }
  super(api_client)

  # Cache pagesize, MUST NOT change between requests
  @page_size = client.page_size
end

Public Instance Methods

all() click to toggle source

Be careful, this will load all records in memory, check total_records before doing such a thing

# File lib/data-com-api/responses/search_base.rb, line 63
def all
  all_records = Array.new(self.real_size)

  self.each_with_index { |record, index| all_records[index] = record }

  all_records
end
Also aliased as: to_a
at_offset(offset) click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 49
def at_offset(offset)
  page_options = options.merge(
    offset:    offset,
    page_size: page_size
  )

  request = self.perform_request(page_options)
  calculate_size_from_request! request

  self.transform_request request
end
each()
Alias for: each_with_index
each_with_index() { |record, index + current_offset| ... } click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 71
def each_with_index
  records_per_previous_page = page_size
  current_offset            = @start_at_offset
  total_records             = current_offset

  loop do
    break if current_offset > self.real_max_offset

    records = at_offset(current_offset)

    records.each_with_index do |record, index|
      yield(record, index + current_offset)
    end

    records_per_previous_page  = records.size
    current_offset            += page_size
    total_records             += records_per_previous_page

    if records_per_previous_page != page_size || total_records == self.size
      break
    end
  end
end
Also aliased as: each
max_offset() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 95
def max_offset
  client.max_offset
end
max_size() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 41
def max_size
  self.real_max_offset + page_size
end
real_max_offset() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 99
def real_max_offset
  return @real_max_offset if @real_max_offset

  @real_max_offset = self.max_offset
  @real_max_offset = @real_max_offset - (@real_max_offset % page_size)
  unless @end_at_offset.nil? || @real_max_offset < @end_at_offset
    @real_max_offset = @end_at_offset
  end

  @real_max_offset
end
real_size() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 45
def real_size
  self.size > self.real_max_offset ? self.max_size : self.size
end
size() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 30
def size
  return @size if @size

  size_options = options.merge(
    offset:    0,
    page_size: client.size_only_page_size
  )
  
  calculate_size_from_request! self.perform_request(size_options)
end
to_a()
Alias for: all

Protected Instance Methods

options() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 120
def options
  @options
end
page_size() click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 116
def page_size
  @page_size
end

Private Instance Methods

calculate_size_from_request!(request) click to toggle source
# File lib/data-com-api/responses/search_base.rb, line 126
def calculate_size_from_request!(request)
  return if @size

  @size = request['totalHits'].to_i
end