Sha256: 358551fbd32d87a4c032b2e4dbfb445637fd2c190c858ac8005aac979f07567d

Contents?: true

Size: 1.41 KB

Versions: 8

Compression:

Stored size: 1.41 KB

Contents

# Pagination is used to navigate paginateable collections
class Pagination

  delegate :_record, to: :data
  attr_accessor :data

  def initialize(data)
    self.data = data
  end

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

  def total
    data._raw[_record.total_key.to_sym]
  end

  def limit
    data._raw[_record.limit_key.to_sym] || LHS::Record::DEFAULT_LIMIT
  end

  def offset
    data._raw[_record.pagination_key.to_sym].presence || 0
  end
  alias current_page offset
  alias start offset

  def pages_left
    total_pages - current_page
  end

  def next_offset
    fail 'to be implemented in subclass'
  end

  def current_page
    fail 'to be implemented in subclass'
  end

  def first_page
    1
  end

  def last_page
    total_pages
  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
end

class PagePagination < Pagination

  def current_page
    offset
  end

  def next_offset
    current_page + 1
  end

end

class StartPagination < Pagination

  def current_page
    (offset + limit - 1) / limit
  end

  def next_offset
    offset + limit
  end

end

class OffsetPagination < Pagination

  def current_page
    (offset + limit) / limit
  end

  def next_offset
    offset + limit
  end

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
lhs-5.3.0 lib/lhs/pagination.rb
lhs-5.2.0 lib/lhs/pagination.rb
lhs-5.1.0 lib/lhs/pagination.rb
lhs-5.0.4 lib/lhs/pagination.rb
lhs-5.0.3 lib/lhs/pagination.rb
lhs-5.0.1 lib/lhs/pagination.rb
lhs-5.0.0 lib/lhs/pagination.rb
lhs-4.2.1 lib/lhs/pagination.rb