Class: Pagy::Countless
- Includes:
- UseOverflowExtra
- Defined in:
- lib/pagy/countless.rb,
lib/pagy/extras/overflow.rb
Defined Under Namespace
Modules: UseOverflowExtra
Constant Summary collapse
- INSTANCE_VARS_MIN =
{ items: 1, page: 1, outset: 0 }.freeze
Constants inherited from Pagy
I18n, ITEMS_PLACEHOLDER, PAGE_PLACEHOLDER, VARS, VERSION
Instance Attribute Summary
Attributes inherited from Pagy
#count, #from, #items, #last, #next, #offset, #page, #pages, #prev, #to, #vars
Instance Method Summary collapse
-
#finalize(fetched) ⇒ Object
Finalize the instance variables based on the fetched items.
-
#initialize(vars = {}) ⇒ Countless
constructor
Merge and validate the options, do some simple arithmetic and set a few instance variables.
Methods inherited from Pagy
new_from_elasticsearch_rails, new_from_searchkick, root, #sequels, #series
Methods included from UseOverflowExtra
Constructor Details
#initialize(vars = {}) ⇒ Countless
Merge and validate the options, do some simple arithmetic and set a few instance variables
12 13 14 15 16 17 18 19 |
# File 'lib/pagy/countless.rb', line 12 def initialize(vars={}) # rubocop:disable Lint/MissingSuper @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars (can be overridden) 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) end |
Instance Method Details
#finalize(fetched) ⇒ Object
Finalize the instance variables based on the fetched items
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/pagy/countless.rb', line 22 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 self end |