Class: ActionController::Pagination::Paginator
- Includes:
- Enumerable
- Defined in:
- lib/action_controller/pagination.rb
Overview
A class representing a paginator for an Active Record collection.
Defined Under Namespace
Instance Attribute Summary collapse
-
#controller ⇒ Object
readonly
Returns the value of attribute controller.
-
#item_count ⇒ Object
readonly
Returns the value of attribute item_count.
-
#items_per_page ⇒ Object
readonly
Returns the value of attribute items_per_page.
Instance Method Summary collapse
-
#[](number) ⇒ Object
Returns a new Page representing the page with the given index
number
. -
#current_page ⇒ Object
(also: #current)
Returns a Page object representing this paginator’s current page.
-
#current_page=(page) ⇒ Object
Sets the current page number of this paginator.
-
#each(&block) ⇒ Object
Successively yields all the paginator’s pages to the given block.
-
#first_page ⇒ Object
(also: #first)
Returns a new Page representing the first page in this paginator.
-
#has_page_number?(number) ⇒ Boolean
Returns true if this paginator contains the page of index
number
. -
#initialize(controller, item_count, items_per_page, current_page = 1) ⇒ Paginator
constructor
Creates a new Paginator on the given
controller
for a set of items of sizeitem_count
and havingitems_per_page
items per page. -
#last_page ⇒ Object
(also: #last)
Returns a new Page representing the last page in this paginator.
-
#page_count ⇒ Object
(also: #length)
Returns the number of pages in this paginator.
Constructor Details
#initialize(controller, item_count, items_per_page, current_page = 1) ⇒ Paginator
Creates a new Paginator on the given controller
for a set of items of size item_count
and having items_per_page
items per page. Raises ArgumentError if items_per_page is out of bounds (i.e., less than or equal to zero). The page CGI parameter for links defaults to “page” and can be overridden with page_parameter
.
207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/action_controller/pagination.rb', line 207 def initialize(controller, item_count, items_per_page, current_page=1) raise ArgumentError, 'must have at least one item per page' if items_per_page <= 0 @controller = controller @item_count = item_count || 0 @items_per_page = items_per_page @pages = {} self.current_page = current_page end |
Instance Attribute Details
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
218 219 220 |
# File 'lib/action_controller/pagination.rb', line 218 def controller @controller end |
#item_count ⇒ Object (readonly)
Returns the value of attribute item_count.
218 219 220 |
# File 'lib/action_controller/pagination.rb', line 218 def item_count @item_count end |
#items_per_page ⇒ Object (readonly)
Returns the value of attribute items_per_page.
218 219 220 |
# File 'lib/action_controller/pagination.rb', line 218 def items_per_page @items_per_page end |
Instance Method Details
#[](number) ⇒ Object
Returns a new Page representing the page with the given index number
.
265 266 267 |
# File 'lib/action_controller/pagination.rb', line 265 def [](number) @pages[number] ||= Page.new(self, number) end |
#current_page ⇒ Object Also known as: current
Returns a Page object representing this paginator’s current page.
233 234 235 |
# File 'lib/action_controller/pagination.rb', line 233 def current_page @current_page ||= self[@current_page_number] end |
#current_page=(page) ⇒ Object
Sets the current page number of this paginator. If page
is a Page object, its number
attribute is used as the value; if the page does not belong to this Paginator, an ArgumentError is raised.
223 224 225 226 227 228 229 230 |
# File 'lib/action_controller/pagination.rb', line 223 def current_page=(page) if page.is_a? Page raise ArgumentError, 'Page/Paginator mismatch' unless page.paginator == self end page = page.to_i @current_page_number = has_page_number?(page) ? page : 1 end |
#each(&block) ⇒ Object
Successively yields all the paginator’s pages to the given block.
270 271 272 273 274 |
# File 'lib/action_controller/pagination.rb', line 270 def each(&block) page_count.times do |n| yield self[n+1] end end |
#first_page ⇒ Object Also known as: first
Returns a new Page representing the first page in this paginator.
239 240 241 |
# File 'lib/action_controller/pagination.rb', line 239 def first_page @first_page ||= self[1] end |
#has_page_number?(number) ⇒ Boolean
Returns true if this paginator contains the page of index number
.
259 260 261 |
# File 'lib/action_controller/pagination.rb', line 259 def has_page_number?(number) number >= 1 and number <= page_count end |
#last_page ⇒ Object Also known as: last
Returns a new Page representing the last page in this paginator.
245 246 247 |
# File 'lib/action_controller/pagination.rb', line 245 def last_page @last_page ||= self[page_count] end |
#page_count ⇒ Object Also known as: length
Returns the number of pages in this paginator.
251 252 253 254 |
# File 'lib/action_controller/pagination.rb', line 251 def page_count @page_count ||= @item_count.zero? ? 1 : (q,r=@item_count.divmod(@items_per_page); r==0? q : q+1) end |