class Shoptet::ApiEnumerator

Public Class Methods

new(base_url, filters, data_key, api) click to toggle source
Calls superclass method
# File lib/shoptet/api_enumerator.rb, line 5
def initialize base_url, filters, data_key, api
  @base_url = base_url
  @filters = filters
  @data_key = data_key || URI(base_url).path.split('/').last
  @api = api

  @enum = Enumerator.new do |y|
    first_page.dig('data', @data_key).each { y.yield _1 }

    if total_pages > 1
      (2..(total_pages - 1)).each do |page|
        @api.request(base_url, filters.merge(page: page))
          .dig('data', @data_key)
          .each { y.yield _1 }
      end

      last_page.dig('data', @data_key).each { y.yield _1 }
    end
  end

  super @enum
end

Public Instance Methods

first_page() click to toggle source
# File lib/shoptet/api_enumerator.rb, line 28
def first_page
  @first_page ||= @api.request(@base_url, @filters)
end
last_page() click to toggle source
# File lib/shoptet/api_enumerator.rb, line 32
def last_page
  return first_page if total_pages < 2

  @last_page ||= @api.request(@base_url, @filters.merge(page: total_pages))
end
size() click to toggle source
# File lib/shoptet/api_enumerator.rb, line 42
def size
  first_page.dig('data', 'paginator', 'totalCount')
end
total_pages() click to toggle source
# File lib/shoptet/api_enumerator.rb, line 38
def total_pages
  first_page.dig('data', 'paginator', 'pageCount') || 0
end