Class: PaginationHelper::Paginator
- Inherits:
-
Object
- Object
- PaginationHelper::Paginator
- Includes:
- Enumerable
- Defined in:
- app/helpers/pagination_helper.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.
-
#page_parameter ⇒ Object
readonly
Returns the value of attribute page_parameter.
Instance Method Summary collapse
-
#[](number) ⇒ Object
Returns a new Page representing the page with the given index
number
. -
#basic_html(view, window_size = 2, link_to_current_page = false, params = {}) ⇒ Object
Creates a basic HTML link bar for the given
view
. -
#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, page_parameter = 'page') ⇒ 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, page_parameter = 'page') ⇒ 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
.
260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'app/helpers/pagination_helper.rb', line 260 def initialize(controller, item_count, items_per_page, current_page=1, page_parameter='page') 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 @page_parameter = page_parameter self.current_page = current_page end |
Instance Attribute Details
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
272 273 274 |
# File 'app/helpers/pagination_helper.rb', line 272 def controller @controller end |
#item_count ⇒ Object (readonly)
Returns the value of attribute item_count.
272 273 274 |
# File 'app/helpers/pagination_helper.rb', line 272 def item_count @item_count end |
#items_per_page ⇒ Object (readonly)
Returns the value of attribute items_per_page.
272 273 274 |
# File 'app/helpers/pagination_helper.rb', line 272 def items_per_page @items_per_page end |
#page_parameter ⇒ Object (readonly)
Returns the value of attribute page_parameter.
272 273 274 |
# File 'app/helpers/pagination_helper.rb', line 272 def page_parameter @page_parameter end |
Instance Method Details
#[](number) ⇒ Object
Returns a new Page representing the page with the given index number
.
318 319 320 |
# File 'app/helpers/pagination_helper.rb', line 318 def [](number) Page.new(self, number) end |
#basic_html(view, window_size = 2, link_to_current_page = false, params = {}) ⇒ Object
Creates a basic HTML link bar for the given view
. The first and last pages of the paginator are always shown, along with window_size
pages around the current page. By default, the current page is displayed, but not linked; to change this behavior, pass true to the link_to_current_page
argument. Specify additional link_to parameters with params
.
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
# File 'app/helpers/pagination_helper.rb', line 335 def basic_html(view, window_size=2, link_to_current_page=false, params={}) window_pages = current.window(window_size).pages return if window_pages.length <= 1 unless link_to_current_page html = '' unless window_pages[0].first? html << view.link_to(first.number, first.to_link(params)) html << ' ... ' if window_pages[0].number - first.number > 1 html << ' ' end window_pages.each do |page| if current == page and not link_to_current_page html << page.number.to_s else html << view.link_to(page.number, page.to_link(params)) end html << ' ' end unless window_pages.last.last? html << ' ... ' if last.number - window_pages[-1].number > 1 html << view.link_to(last.number, last.to_link(params)) end html end |
#current_page ⇒ Object Also known as: current
Returns a Page object representing this paginator’s current page.
287 288 289 |
# File 'app/helpers/pagination_helper.rb', line 287 def current_page self[@current_page] 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.
277 278 279 280 281 282 283 284 |
# File 'app/helpers/pagination_helper.rb', line 277 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 = has_page_number?(page) ? page : 1 end |
#each(&block) ⇒ Object
Successively yields all the paginator’s pages to the given block.
323 324 325 326 327 |
# File 'app/helpers/pagination_helper.rb', line 323 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.
293 294 295 |
# File 'app/helpers/pagination_helper.rb', line 293 def first_page self[1] end |
#has_page_number?(number) ⇒ Boolean
Returns true if this paginator contains the page of index number
.
312 313 314 315 |
# File 'app/helpers/pagination_helper.rb', line 312 def has_page_number?(number) return false unless number.is_a? Fixnum 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.
299 300 301 |
# File 'app/helpers/pagination_helper.rb', line 299 def last_page self[page_count] end |
#page_count ⇒ Object Also known as: length
Returns the number of pages in this paginator.
305 306 307 308 |
# File 'app/helpers/pagination_helper.rb', line 305 def page_count return 1 if @item_count.zero? (@item_count / @items_per_page.to_f).ceil end |