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