lib/pagy.rb in pagy-8.6.1 vs lib/pagy.rb in pagy-8.6.2

- old
+ new

@@ -3,11 +3,11 @@ require 'pathname' # Core class class Pagy - VERSION = '8.6.1' + VERSION = '8.6.2' # Gem root pathname to get the path of Pagy files stylesheets, javascripts, apps, locales, etc. def self.root @root ||= Pathname.new(__dir__).parent.freeze end @@ -27,41 +27,41 @@ # Merge and validate the options, do some simple arithmetic and set the instance variables def initialize(vars) normalize_vars(vars) setup_vars(count: 0, page: 1, outset: 0) setup_items_var + setup_offset_var setup_last_var raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last - setup_offset_var @from = [@offset - @outset + 1, @count].min @to = [@offset - @outset + @items, @count].min @in = [@to - @from + 1, @count].min @prev = (@page - 1 unless @page == 1) @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1 end # Return the array of page numbers and :gap items e.g. [1, :gap, 8, "9", 10, :gap, 36] def series(size: @vars[:size], **_) raise VariableError.new(self, :size, 'to be an Integer >= 0', size) \ - unless size.is_a?(Integer) + unless size.is_a?(Integer) && size >= 0 return [] if size.zero? [].tap do |series| if size >= @last series.push(*1..@last) else left = ((size - 1) / 2.0).floor # left half might be 1 page shorter for even size start = if @page <= left # beginning pages 1 - elsif @page > @last - (size - left) # end pages + elsif @page > (@last - size + left) # end pages @last - size + 1 else # intermediate pages @page - left end series.push(*start...start + size) - # Insert first and last ends plus gaps when needed + # Set first and last pages plus gaps when needed, respecting the size if vars[:ends] && size >= 7 series[0] = 1 unless series[0] == 1 series[1] = :gap unless series[1] == 2 series[-2] = :gap unless series[-2] == @last - 1 series[-1] = @last unless series[-1] == @last @@ -99,20 +99,20 @@ # Setup @items (overridden by the gearbox extra) def setup_items_var setup_vars(items: 1) end + # Setup @offset (overridden by the gearbox extra) + def setup_offset_var + @offset = (@items * (@page - 1)) + @outset # may be already set from gear_box + end + # Setup @last (overridden by the gearbox extra) def setup_last_var @last = [(@count.to_f / @items).ceil, 1].max @last = vars[:max_pages] if vars[:max_pages] && @last > vars[:max_pages] end alias setup_pages_var setup_last_var - - # Setup @offset based on the :gearbox_items variable - def setup_offset_var - @offset = (@items * (@page - 1)) + @outset # may be already set from gear_box - end end require_relative 'pagy/extras/size' # will be opt in in v9.0 require_relative 'pagy/backend' require_relative 'pagy/frontend'