Class: ShopifyAPI::GraphQL::Pager
- Inherits:
-
Object
- Object
- ShopifyAPI::GraphQL::Pager
- 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
- #execute(q, variables = nil) ⇒ Object
-
#initialize(gql, *options) ⇒ Pager
constructor
A new instance of Pager.
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, *) @gql = gql @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 |