class Ubiquity::Envoi::API::Client::Paginator

Attributes

api_client[RW]
logger[RW]

Public Class Methods

new(api_client, options = { }) click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 5
def initialize(api_client, options = { })
  @api_client = api_client
  initialize_logger(options)
end

Public Instance Methods

current_page() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 21
def current_page
  @current_page ||= last_response['page']
end
http_client() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 25
def http_client
  api_client.http_client
end
include_remaining_pages() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 29
def include_remaining_pages
  # response = api_client.response.dup
  @first_page = current_page
  _results = last_results
  _results.concat(remaining_pages_get)
  _per_page = _results.length
  last_response.merge({ 'page' => @first_page, 'perPage' => _per_page, 'results' => _results })
end
initialize_logger(args = {}) click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 10
def initialize_logger(args = {})
  @logger   = args[:logger] ||= Logger.new(args[:log_to] || STDOUT)
  log_level = args[:log_level]
  if log_level
    _logger = @logger.dup
    _logger.level = log_level
    @logger = _logger
  end
  @logger
end
last_response() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 38
def last_response
  @last_response ||= api_client.http_client.response_parsed
end
last_results() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 42
def last_results
  @last_results ||= last_response['results']
end
next_page?() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 46
def next_page?
  current_page < total_pages
end
next_page_get(_next_page_number = nil) click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 50
def next_page_get(_next_page_number = nil)
  _next_page_number ||= next_page_number
  page_get(_next_page_number)
end
next_page_number() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 55
def next_page_number
  @next_page_number ||= current_page + 1
end
page_get(page_number) click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 63
def page_get(page_number)
  logger.debug { "Getting Page #{page_number} of #{total_pages}" }
  new_request = request.class.new(request_args_out.merge('_page' => page_number), request_options_out)
  _response = new_request.execute
  process_response
end
page_size() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 59
def page_size
  @page_size ||= last_response['perPage']
end
pages_get(pages, options = { }) click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 70
def pages_get(pages, options = { })
  consolidate = options.fetch(:consolidate, true)
  pages = pages.to_a if pages.respond_to?(:to_a)
  pages_out = pages.map { |v| page_get(v) }
  pages_out.flatten! if consolidate
  pages_out
end
paginated?() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 78
def paginated?
  @paginated = !!total_results
end
process_request() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 82
def process_request
  @current_page = nil
  @total_results = nil
  @has_next_page = nill
end
process_response() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 88
def process_response
  @current_page = nil
  @last_response = nil
  @next_page_number = nil
  @page_size = nil
  @total_pages = nil
  @total_results = nil
  @paginated = !!total_results

  @last_results = last_response['results']
end
remaining_pages_get() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 130
def remaining_pages_get
  return [ ] unless paginated? && next_page?
  remaining_results = [ ]

  loop do
    response = next_page_get
    remaining_results.concat(response)

    break unless next_page?
  end
  remaining_results
end
request() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 100
def request
  api_client.request
end
request_args_out() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 104
def request_args_out
  @request_args_out ||= request.initial_arguments.dup
end
request_options_out() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 108
def request_options_out
  @request_options_out ||= { :client => api_client }.merge request.initial_options.dup
end
total_pages() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 112
def total_pages
  @total_pages ||= begin
    logger.debug { "Page Size: #{page_size}" }
    logger.debug { "Total Results: #{total_results}" }

    div = total_results / page_size
    mod = total_results % page_size
    remainder = div == mod ? 0 : 1
    _total_pages = div + remainder
    logger.debug { "Total Pages: #{_total_pages}" }
    _total_pages
  end
end
total_results() click to toggle source
# File lib/ubiquity/envoi/api/client/paginator.rb, line 126
def total_results
  @total_results ||= last_response['total']
end