Sha256: 9e021fc95946bdc82ff632ed580d991295cebdbff8618674bfdb4ef54a9ddf06

Contents?: true

Size: 1.03 KB

Versions: 9

Compression:

Stored size: 1.03 KB

Contents

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

    attr_reader :collection

    def initialize(collection, page_number: 1, per_page: 22, padding: 0)
      raise ArgumentError,
            'you can paginate only Fish0::Repository' unless collection.is_a?(Fish0::Repository)
      @collection = collection
      @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

9 entries across 9 versions & 2 rubygems

Version Path
test_fish0-0.2.0 lib/fish0/paginator.rb
fish0-0.2.0 lib/fish0/paginator.rb
fish0-0.1.2 lib/fish0/paginator.rb
fish0-0.1.1 lib/fish0/paginator.rb
fish0-0.1.0 lib/fish0/paginator.rb
fish0-0.0.18 lib/fish0/paginator.rb
fish0-0.0.17 lib/fish0/paginator.rb
fish0-0.0.16 lib/fish0/paginator.rb
fish0-0.0.15 lib/fish0/paginator.rb