lib/pagy/countless.rb in pagy-4.11.0 vs lib/pagy/countless.rb in pagy-5.0.0
- old
+ new
@@ -1,38 +1,31 @@
+# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/countless
# frozen_string_literal: true
require 'pagy'
class Pagy
-
+ # No need to know the count to paginate
class Countless < Pagy
-
- INSTANCE_VARS_MIN = { items: 1, page: 1, outset: 0 }.freeze
-
# Merge and validate the options, do some simple arithmetic and set a few instance variables
- def initialize(vars={}) # rubocop:disable Lint/MissingSuper
- @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars (can be overridden)
- @vars[:fragment] = Pagy.deprecated_var(:anchor, @vars[:anchor], :fragment, @vars[:fragment]) if @vars[:anchor]
-
- INSTANCE_VARS_MIN.each do |k,min| # validate instance variables
- raise VariableError.new(self), "expected :#{k} >= #{min}; got #{@vars[k].inspect}" \
- unless @vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min
- end
- @offset = @items * (@page - 1) + @outset # pagination offset + outset (initial offset)
+ def initialize(vars = {}) # rubocop:disable Lint/MissingSuper
+ normalize_vars(vars)
+ setup_vars(page: 1, outset: 0)
+ setup_items_var
+ @offset = (@items * (@page - 1)) + @outset
end
# Finalize the instance variables based on the fetched items
def finalize(fetched)
raise OverflowError.new(self), "page #{@page} got no items" \
if fetched.zero? && @page > 1
- @pages = @last = (fetched > @items ? @page + 1 : @page) # set the @pages and @last
- @items = fetched if fetched < @items && fetched.positive? # adjust items for last non-empty page
- @from = fetched.zero? ? 0 : @offset + 1 - @outset # page begins from item
- @to = fetched.zero? ? 0 : @offset + @items - @outset # page ends to item
- @prev = (@page-1 unless @page == 1) # nil if no prev page
- @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1 # nil if no next page, 1 if :cycle
+ @pages = @last = (fetched > @items ? @page + 1 : @page)
+ @in = [fetched, @items].min
+ @from = @in.zero? ? 0 : @offset - @outset + 1
+ @to = @offset - @outset + @in
+ @prev = (@page - 1 unless @page == 1)
+ @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
self
end
-
end
end