lib/pagy.rb in pagy-8.0.2 vs lib/pagy.rb in pagy-8.1.0

- old
+ new

@@ -3,45 +3,41 @@ require 'pathname' # Core class class Pagy - VERSION = '8.0.2' + VERSION = '8.1.0' # 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 # Core defult: constant for easy access, but mutable for customizable defaults - DEFAULT = { page: 1, # rubocop:disable Style/MutableConstant - items: 20, - outset: 0, - size: 7, - cycle: false, - # backend/collection - count_args: [:all], # AR friendly - # backend/url - params: {}, - page_param: :page, - fragment: '', - request_path: nil, - # frontend/helpers - anchor_string: nil } + DEFAULT = { page: 1, # rubocop:disable Style/MutableConstant + items: 20, + outset: 0, + size: 7, + cycle: false, + count_args: [:all], # AR friendly + params: {}, + page_param: :page } - attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :in, :from, :to, :prev, :next, :params, :request_path + attr_reader :count, :page, :items, :vars, :last, :offset, :in, :from, :to, :prev, :next, :params, :request_path + alias pages last # 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_pages_var + setup_last_var + raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last + setup_offset_var setup_params_var setup_request_path_var - raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last @from = [@offset - @outset + 1, @count].min @to = [@offset - @outset + @items, @count].min @in = [@to - @from + 1, @count].min @prev = (@page - 1 unless @page == 1) @@ -69,16 +65,16 @@ start = right_gap_end + 1 end series.push(*start..@last) elsif size.is_a?(Integer) && size.positive? # only central series # The simplest and fastest algorithm - size = @pages if size > @pages # reduce the max size to @pages + size = @last if size > @last # reduce the max size to @last 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 > @pages - (size - left) # end pages - @pages - size + 1 + elsif @page > @last - (size - left) # end pages + @last - size + 1 else # intermediate pages @page - left end series = (start..start + size - 1).to_a else @@ -118,13 +114,15 @@ # Setup @items (overridden by the gearbox extra) def setup_items_var setup_vars(items: 1) end - # Setup @pages and @last (overridden by the gearbox extra) - def setup_pages_var - @pages = @last = [(@count.to_f / @items).ceil, 1].max + # Setup @last and @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