Sha256: 7b0ae223f7a7f46cd45f8c5ff6bb708d55f3ac708e0a4db7e83dd365dfc74711

Contents?: true

Size: 1.4 KB

Versions: 21

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

require 'active_support/core_ext/module/delegation'

# Pagination is used to navigate paginateable collections
module LHS::Pagination
  class Base

    DEFAULT_LIMIT = 100

    delegate :_record, to: :data
    attr_accessor :data

    def initialize(data)
      self.data = data
    end

    def total
      data._raw.dig(*_record.total_key) || 0
    end

    # as standard in Rails' ActiveRecord count is not summing up, but using the number provided from data source
    alias count total

    def limit
      data._raw.dig(*_record.limit_key(:body)) || DEFAULT_LIMIT
    end

    def offset
      data._raw.dig(*_record.pagination_key(:body)) || self.class::DEFAULT_OFFSET
    end
    alias start offset

    def pages_left
      total_pages - current_page
    end

    def next_offset(_step = 1)
      raise 'to be implemented in subclass'
    end

    def current_page
      raise 'to be implemented in subclass'
    end

    def first_page
      1
    end

    def last_page
      total_pages
    end

    def next?
      data._raw[:next].present?
    end

    def previous?
      data._raw[:previous].present?
    end

    def prev_page
      current_page - 1
    end

    def next_page
      current_page + 1
    end

    def limit_value
      limit
    end

    def total_pages
      (total.to_f / limit).ceil
    end

    def self.page_to_offset(page, _limit)
      page.to_i
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
lhs-19.5.0 lib/lhs/pagination/base.rb
lhs-19.5.0.pre.wherehref.1 lib/lhs/pagination/base.rb
lhs-19.4.1 lib/lhs/pagination/base.rb
lhs-19.4.0 lib/lhs/pagination/base.rb
lhs-19.3.1 lib/lhs/pagination/base.rb
lhs-19.3.0 lib/lhs/pagination/base.rb
lhs-19.2.0 lib/lhs/pagination/base.rb
lhs-19.1.0 lib/lhs/pagination/base.rb
lhs-19.0.2 lib/lhs/pagination/base.rb
lhs-19.0.1 lib/lhs/pagination/base.rb
lhs-19.0.0 lib/lhs/pagination/base.rb
lhs-19.0.0.pre.endpoint.1 lib/lhs/pagination/base.rb
lhs-18.0.3 lib/lhs/pagination/base.rb
lhs-18.0.2 lib/lhs/pagination/base.rb
lhs-18.0.1 lib/lhs/pagination/base.rb
lhs-18.0.0 lib/lhs/pagination/base.rb
lhs-17.0.1 lib/lhs/pagination/base.rb
lhs-17.0.1.pre1 lib/lhs/pagination/base.rb
lhs-18.0.0.pre.pre1 lib/lhs/pagination/base.rb
lhs-17.0.0 lib/lhs/pagination/base.rb