Sha256: dc7601109497ef016e9a7e2a5559783e86984dc86b55939e8a641de3a3ae8908

Contents?: true

Size: 944 Bytes

Versions: 3

Compression:

Stored size: 944 Bytes

Contents

module Fish0
  class Paginator
    include Enumerable
    delegate :each, :all, :skip, :limit, :padding, :fetch, to: :collection

    attr_reader :collection

    def initialize(collection, page_number: 1, per_page: 22, padding: 0)
      @collection = collection || (raise ArgumentError)
      @per = per_page
      @page = page_number
      @padding = padding
      per(per_page)
      page(page_number)
    end

    def page(value = @page)
      @page = value
      skip((@page - 1) * @per + @padding)
      self
    end

    def per(value = @per)
      @per = value
      skip((@page - 1) * @per + @padding)
      limit(@per)
      self
    end

    def padding(value)
      @padding = value
      page
      skip
      self
    end

    def total
      collection.count
    end

    def current_page
      @page
    end

    def pages
      (total.to_f / @per).ceil
    end

    def last_page?
      current_page >= pages
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fish0-0.0.14 lib/fish0/paginator.rb
fish0-0.0.13 lib/fish0/paginator.rb
fish0-0.0.12 lib/fish0/paginator.rb