Sha256: 146e1fc2adf4dac6236c7baa2c87951330a32ef489ac35a4c092338dce3e70cf

Contents?: true

Size: 1.24 KB

Versions: 8

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

module Ckeditor
  # Simple paginate relation
  class Paginatable
    attr_reader :limit_value, :offset_value

    def initialize(scope, options = {})
      @scope = scope
      @limit_value = (options[:limit] || Ckeditor.default_per_page).to_i
    end

    def page(num = 1)
      @offset_value = limit_value * ([num.to_i, 1].max - 1)
      self
    end

    def scoped
      @scope.limit(limit_value).offset(offset_value)
    end
    alias all scoped
    alias to_a scoped

    # Next page number in the collection
    def next_page
      current_page + 1 unless last_page?
    end

    # Previous page number in the collection
    def prev_page
      current_page - 1 unless first_page?
    end

    # First page of the collection?
    def first_page?
      current_page == 1
    end

    # Last page of the collection?
    def last_page?
      current_page >= total_pages
    end

    # Total number of pages
    def total_pages
      (total_count.to_f / limit_value).ceil
    end

    # total item numbers of scope
    def total_count
      @total_count ||= @scope.count
    end

    # Current page number
    def current_page
      offset = (offset_value < 0 ? 0 : offset_value)
      (offset / limit_value) + 1
    end
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
ckeditor-5.1.3 lib/ckeditor/paginatable.rb
ckeditor-5.1.2 lib/ckeditor/paginatable.rb
ckeditor-5.1.1 lib/ckeditor/paginatable.rb
glebtv-ckeditor-4.14.1 lib/ckeditor/paginatable.rb
ckeditor-5.1.0 lib/ckeditor/paginatable.rb
glebtv-ckeditor-4.13.1 lib/ckeditor/paginatable.rb
glebtv-ckeditor-4.13.0 lib/ckeditor/paginatable.rb
ckeditor-5.0.0 lib/ckeditor/paginatable.rb