Sha256: fd1b5730d729318b372e44d866d200c3c27c8bf7a8811b7c16b8ddbee5e8d7ee

Contents?: true

Size: 937 Bytes

Versions: 6

Compression:

Stored size: 937 Bytes

Contents

module JsonapiCompliable
  class Scoping::Paginate < Scoping::Base
    MAX_PAGE_SIZE = 1_000

    def apply
      if size > MAX_PAGE_SIZE
        raise JsonapiCompliable::Errors::UnsupportedPageSize
          .new(size, MAX_PAGE_SIZE)
      else
        super
      end
    end

    def apply?
      if @opts[:default] == false
        not [page_param[:size], page_param[:number]].all?(&:nil?)
      else
        true
      end
    end

    def custom_scope
      resource.pagination
    end

    def apply_standard_scope
      resource.adapter.paginate(@scope, number, size)
    end

    def apply_custom_scope
      custom_scope.call(@scope, number, size)
    end

    private

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

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

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

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
jsonapi_compliable-0.6.4 lib/jsonapi_compliable/scoping/paginate.rb
jsonapi_compliable-0.6.3 lib/jsonapi_compliable/scoping/paginate.rb
jsonapi_compliable-0.6.2 lib/jsonapi_compliable/scoping/paginate.rb
jsonapi_compliable-0.6.1 lib/jsonapi_compliable/scoping/paginate.rb
jsonapi_compliable-0.6.0 lib/jsonapi_compliable/scoping/paginate.rb
jsonapi_compliable-0.5.7 lib/jsonapi_compliable/scoping/paginate.rb