class Pexels::PaginatedResponse

Attributes

attrs[R]
data[R]
page[R]
per_page[R]
response[R]
total_results[R]

Public Class Methods

new(response) click to toggle source
# File lib/pexels/paginated_response.rb, line 14
def initialize(response)
  @response = response
  @attrs = @response.body

  @total_results = attrs.fetch('total_results', nil)
  @page = attrs.fetch('page')
  @per_page = attrs.fetch('per_page')
  @prev_page = attrs.fetch('prev_page', nil)
  @next_page = attrs.fetch('next_page', nil)
end

Public Instance Methods

each(&block) click to toggle source
# File lib/pexels/paginated_response.rb, line 29
def each(&block)
  if block_given?
    data.each(&block)
  else
    to_enum(:each)
  end
end
next_page() click to toggle source
# File lib/pexels/paginated_response.rb, line 37
def next_page
  return unless @next_page

  request.params[:page] = extract_page(@next_page)
  self.class.new(request.call)
end
prev_page() click to toggle source
# File lib/pexels/paginated_response.rb, line 44
def prev_page
  return unless @prev_page

  request.params[:page] = extract_page(@next_page)
  self.class.new(request.call)
end
total_pages() click to toggle source
# File lib/pexels/paginated_response.rb, line 25
def total_pages
  total_results.fdiv(per_page).ceil
end

Private Instance Methods

extract_page(url) click to toggle source
# File lib/pexels/paginated_response.rb, line 59
def extract_page(url)
  CGI.parse(URI.parse(url).query)['page'].first
end
request() click to toggle source
# File lib/pexels/paginated_response.rb, line 55
def request
  response.request
end