Class: ShopifyAPI::GraphQL::Pager

Inherits:
Object
  • Object
show all
Defined in:
lib/shopify_api/graphql/tiny.rb

Overview

:nodoc:

Constant Summary collapse

NEXT_PAGE_KEYS =
{
  :before => %w[hasPreviousPage startCursor].freeze,
  :after  => %w[hasNextPage endCursor].freeze
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(gql, *options) ⇒ Pager

Returns a new instance of Pager.



384
385
386
387
# File 'lib/shopify_api/graphql/tiny.rb', line 384

def initialize(gql, *options)
  @gql = gql
  @options = normalize_options(options)
end

Instance Method Details

#execute(q, variables = nil) ⇒ Object



389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
# File 'lib/shopify_api/graphql/tiny.rb', line 389

def execute(q, variables = nil)
  unless pagination_variable_exists?(q)
    raise ArgumentError, "query does not contain the pagination variable '#{@options[:variable]}'"
  end

  variables ||= {}
  pagination_finder = @options[@options[:direction]]

  enumerator = Enumerator.new do |y|
    loop do
      page = @gql.execute(q, variables)
      y << page

      cursor = pagination_finder[page]
      break unless cursor

      variables[@options[:variable]] = cursor
    end
  end

  if block_given?
    enumerator.each { |page| yield page }
  else
    enumerator.lazy
  end
end