Sha256: db245d24f386b477278a5e37ae92149de2d7453b902bc03dad45901ee855fb20

Contents?: true

Size: 1.04 KB

Versions: 13

Compression:

Stored size: 1.04 KB

Contents

module Godmin
  class Paginator
    WINDOW_SIZE = 7.freeze

    attr_reader :per_page, :current_page

    def initialize(resources, per_page: 25, current_page: nil)
      @resources    = resources
      @per_page     = per_page
      @current_page = current_page ? current_page.to_i : 1
    end

    def paginate
      @resources.limit(per_page).offset(offset)
    end

    def pages
      @pages ||= begin
        pages = (1..total_pages).to_a

        return pages unless total_pages > WINDOW_SIZE

        if current_page < WINDOW_SIZE
          pages.slice(0, WINDOW_SIZE)
        elsif current_page > (total_pages - WINDOW_SIZE)
          pages.slice(-WINDOW_SIZE, WINDOW_SIZE)
        else
          pages.slice(pages.index(current_page) - (WINDOW_SIZE / 2), WINDOW_SIZE)
        end
      end
    end

    def total_pages
      @total_pages ||= (total_resources.to_f / per_page).ceil
    end

    def total_resources
      @total_resources ||= @resources.count
    end

    private

    def offset
      (current_page * per_page) - per_page
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
godmin-1.3.1 lib/godmin/paginator.rb
godmin-1.3.0 lib/godmin/paginator.rb
godmin-1.2.0 lib/godmin/paginator.rb
godmin-1.1.0 lib/godmin/paginator.rb
godmin-1.0.0 lib/godmin/paginator.rb
godmin-0.12.4 lib/godmin/paginator.rb
godmin-0.12.3 lib/godmin/paginator.rb
godmin-0.12.2 lib/godmin/paginator.rb
godmin-0.12.1 lib/godmin/paginator.rb
godmin-0.12.0 lib/godmin/paginator.rb
godmin-0.11.2 lib/godmin/paginator.rb
godmin-0.11.1 lib/godmin/paginator.rb
godmin-0.11.0 lib/godmin/paginator.rb