class Ubiquity::Iconik::API::Client::Paginator

Attributes

api_client[RW]
logger[RW]

Public Class Methods

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

Public Instance Methods

current_page() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 21
def current_page
  @current_page ||= last_response['page']
end
http_client() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 25
def http_client
  api_client.http_client
end
include_remaining_pages() click to toggle source
# File lib/ubiquity/iconik/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, 'per_page' => _per_page, 'objects' => _results })
end
initialize_logger(args = {}) click to toggle source
# File lib/ubiquity/iconik/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/iconik/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/iconik/api/client/paginator.rb, line 42
def last_results
  @last_results ||= last_response['objects']
end
next_page?() click to toggle source
# File lib/ubiquity/iconik/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/iconik/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/iconik/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/iconik/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/iconik/api/client/paginator.rb, line 59
def page_size
  @page_size ||= last_response['per_page']
end
pages_get(pages, options = { }) click to toggle source
# File lib/ubiquity/iconik/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/iconik/api/client/paginator.rb, line 78
def paginated?
  @paginated = !!total_pages
end
process_request() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 82
def process_request
  @current_page = nil
  @total_results = nil
  @has_next_page = nil
end
process_response() click to toggle source
# File lib/ubiquity/iconik/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 = paginated?

  next_page_number

  @last_results = last_response['objects']
end
remaining_pages_get() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 122
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/iconik/api/client/paginator.rb, line 102
def request
  api_client.request
end
request_args_out() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 106
def request_args_out
  @request_args_out ||= request.initial_arguments.dup
end
request_options_out() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 110
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/iconik/api/client/paginator.rb, line 114
def total_pages
  last_response['pages']
end
total_results() click to toggle source
# File lib/ubiquity/iconik/api/client/paginator.rb, line 118
def total_results
  @total_results ||= last_response['total']
end