Class: ActionController::Pagination::Paginator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/action_controller/pagination.rb

Overview

A class representing a paginator for an Active Record collection.

Defined Under Namespace

Classes: Page, Window

Instance Attribute Summary collapse

Instance Method Summary collapse

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.

Raises:

  • (ArgumentError)


192
193
194
195
196
197
198
199
200
201
# File 'lib/action_controller/pagination.rb', line 192

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
  
  self.current_page = current_page
end

Instance Attribute Details

#controllerObject (readonly)

Returns the value of attribute controller.



202
203
204
# File 'lib/action_controller/pagination.rb', line 202

def controller
  @controller
end

#item_countObject (readonly)

Returns the value of attribute item_count.



202
203
204
# File 'lib/action_controller/pagination.rb', line 202

def item_count
  @item_count
end

#items_per_pageObject (readonly)

Returns the value of attribute items_per_page.



202
203
204
# File 'lib/action_controller/pagination.rb', line 202

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.



249
250
251
# File 'lib/action_controller/pagination.rb', line 249

def [](number)
  Page.new(self, number)
end

#current_pageObject Also known as: current

Returns a Page object representing this paginator’s current page.



217
218
219
# File 'lib/action_controller/pagination.rb', line 217

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.



207
208
209
210
211
212
213
214
# File 'lib/action_controller/pagination.rb', line 207

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.



254
255
256
257
258
# File 'lib/action_controller/pagination.rb', line 254

def each(&block)
  page_count.times do |n|
    yield self[n+1]
  end
end

#first_pageObject Also known as: first

Returns a new Page representing the first page in this paginator.



223
224
225
# File 'lib/action_controller/pagination.rb', line 223

def first_page
  self[1]
end

#has_page_number?(number) ⇒ Boolean

Returns true if this paginator contains the page of index number.

Returns:

  • (Boolean)


242
243
244
245
# File 'lib/action_controller/pagination.rb', line 242

def has_page_number?(number)
  return false unless number.is_a? Fixnum
  number >= 1 and number <= page_count
end

#last_pageObject Also known as: last

Returns a new Page representing the last page in this paginator.



229
230
231
# File 'lib/action_controller/pagination.rb', line 229

def last_page
  self[page_count] 
end

#page_countObject Also known as: length

Returns the number of pages in this paginator.



235
236
237
238
# File 'lib/action_controller/pagination.rb', line 235

def page_count
  return 1 if @item_count.zero?
  (@item_count / @items_per_page.to_f).ceil
end