DEFAULT_OPTIONS = {
:class_name => nil,
:singular_name => nil,
- :per_page => 10,
+ :per_page => 10,
:conditions => nil,
- :order_by => nil,
- :order => nil,
- :join => nil,
- :joins => nil,
- :count => nil,
- :include => nil,
- :select => nil,
- :group => nil,
- :parameter => "page"
+ :order_by => nil,
+ :order => nil,
+ :join => nil,
+ :joins => nil,
+ :count => nil,
+ :include => nil,
+ :select => nil,
+ :group => nil,
+ :parameter => "page"
}.freeze
end
end
end
+ protected
+
def create_paginators_and_retrieve_collections #:nodoc:
Pagination::OPTIONS[self.class].each do |collection_id, options|
- next if options[:actions] && !options[:actions].include?(action_name)
+ next if options[:actions]&.exclude?(action_name)
paginator, collection =
paginator_and_collection_for(collection_id, options)
collection.offset(paginator.current.offset).limit(options[:per_page])
end
- protected :create_paginators_and_retrieve_collections,
- :count_collection_for_pagination,
- :find_collection_for_pagination
+ private
def paginator_and_collection_for(_collection_id, options) #:nodoc:
klass = options[:class_name].constantize
[paginator, collection]
end
- private :paginator_and_collection_for
-
# A class representing a paginator for an Active Record collection.
class Paginator
include Enumerable
# object, its +number+ attribute is used as the value; if the page does
# not belong to this Paginator, an ArgumentError is raised.
def current_page=(page)
- if page.is_a? Page
- raise ArgumentError, "Page/Paginator mismatch" unless
- page.paginator == self
- end
+ raise ArgumentError, "Page/Paginator mismatch" if page.is_a?(Page) && page.paginator != self
+
page = page.to_i
@current_page_number = has_page_number?(page) ? page : 1
end
@number = 1 unless @paginator.has_page_number? @number
end
attr_reader :paginator, :number
+
alias to_i number
# Compares two Page objects and returns true when they represent the
# same page number).
def ==(other)
return false if other.nil?
+
@paginator == other.paginator &&
@number == other.number
end
# if the pages do not belong to the same Paginator object.
def <=>(other)
raise ArgumentError unless @paginator == other.paginator
+
@number <=> other.number
end
@page = page
self.padding = padding
end
- attr_reader :paginator, :page
+ attr_reader :paginator, :page, :padding, :first, :last
# Sets the window's padding (the number of pages on either side of the
# window page).
def padding=(padding)
- @padding = padding < 0 ? 0 : padding
+ @padding = padding.negative? ? 0 : padding
# Find the beginning and end pages of the window
@first = if @paginator.has_page_number?(@page.number - @padding)
@paginator[@page.number - @padding]
@paginator.last
end
end
- attr_reader :padding, :first, :last
# Returns an array of Page objects in the current window.
def pages