Sha256: 37927a58d473ca655a89beba67b44b4205f8ca9b48fbaf1b30486e6119faf988

Contents?: true

Size: 1.5 KB

Versions: 43

Compression:

Stored size: 1.5 KB

Contents

module Graphiti
  class Scoping::Paginate < Scoping::Base
    DEFAULT_PAGE_SIZE = 20

    def apply
      if size > resource.max_page_size
        raise Graphiti::Errors::UnsupportedPageSize
          .new(size, resource.max_page_size)
      elsif requested? && @opts[:sideload_parent_length].to_i > 1
        raise Graphiti::Errors::UnsupportedPagination
      else
        super
      end
    end

    # We want to apply this logic unless we've explicitly received the
    # +default: false+ option. In that case, only apply if pagination
    # was explicitly specified in the request.
    #
    # @return [Boolean] should we apply this logic?
    def apply?
      if @opts[:default_paginate] == false
        requested?
      else
        true
      end
    end

    # @return [Proc, Nil] the custom pagination proc
    def custom_scope
      resource.pagination
    end

    # Apply default pagination proc via the Resource adapter
    def apply_standard_scope
      resource.adapter.paginate(@scope, number, size)
    end

    # Apply the custom pagination proc
    def apply_custom_scope
      resource.instance_exec(@scope, number, size, resource.context, &custom_scope)
    end

    private

    def requested?
      ![page_param[:size], page_param[:number]].all?(&:nil?)
    end

    def page_param
      @page_param ||= (query_hash[:page] || {})
    end

    def number
      (page_param[:number] || 1).to_i
    end

    def size
      (page_param[:size] || resource.default_page_size || DEFAULT_PAGE_SIZE).to_i
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
graphiti-1.2.42 lib/graphiti/scoping/paginate.rb
graphiti-1.2.41 lib/graphiti/scoping/paginate.rb
graphiti-1.2.40 lib/graphiti/scoping/paginate.rb
graphiti-1.2.39 lib/graphiti/scoping/paginate.rb
graphiti-1.2.38 lib/graphiti/scoping/paginate.rb
graphiti-1.2.37 lib/graphiti/scoping/paginate.rb
graphiti-1.2.36 lib/graphiti/scoping/paginate.rb
graphiti-1.2.35 lib/graphiti/scoping/paginate.rb
graphiti-1.2.34 lib/graphiti/scoping/paginate.rb
graphiti-1.2.33 lib/graphiti/scoping/paginate.rb
graphiti-1.2.32 lib/graphiti/scoping/paginate.rb
graphiti-1.2.31 lib/graphiti/scoping/paginate.rb
graphiti-1.2.30 lib/graphiti/scoping/paginate.rb
graphiti-1.2.29 lib/graphiti/scoping/paginate.rb
graphiti-1.2.28 lib/graphiti/scoping/paginate.rb
graphiti-1.2.27 lib/graphiti/scoping/paginate.rb
graphiti-1.2.26 lib/graphiti/scoping/paginate.rb
graphiti-1.2.25 lib/graphiti/scoping/paginate.rb
graphiti-1.2.21 lib/graphiti/scoping/paginate.rb
graphiti-1.2.20 lib/graphiti/scoping/paginate.rb